# Variable an Funktion in Class übergeben



## rflx (4. Dezember 2007)

Hallo zusammen,

da ich noch nicht gross mit Klassen gearbeitet habe, habe ich ein kleines Problem. Ich will zwei Variablen in einer Funktion einer Klasse übergeben. Im moment sieht es bei mir so aus:

Ich includiere die class.php in einer *upload.php* Datei:

```
$width = '400';
$height = '200';

include_once 'class.php';
```

Später will ich die zwei Variablen ($width, $height) in die class.php übergeben.
Die *class.php* sieht so aus:

```
class upload {

var $image_x;
var $image_y;

function init() {
$this->image_x = '?';		// 400
$this->image_y = '?';		// 200
}
}
```
Wie kann ich jetzt die zwei Variablen ($width, $height) in die Funktion init() übergeben damit die '?' (Fragezeichen) mit dem Wert ($width, $height) übernommen werden?

Danke im Voraus für die Hilfe.

Gruss rflx


----------



## Der_baum (4. Dezember 2007)

Hi,

so:


```
$img_upload = new upload;
$img_upload->init($width,$height);
```


```
class upload {

var $image_x;
var $image_y;

   function init($width,$height) {
        $this->image_x = $width;
        $this->image_y = $height;
   }
}
```

Gruß Baum


EDIT:
Will ned Klugen, oder so.... hat mir aber damals auch geholfen:
http://www.phpbar.de/w/Klasse


----------



## ne0hype (4. Dezember 2007)

Hi,

also erstmal definierst du eine Klasse im Stiel von PHP5


```
class Upload { 

private $image_x; 
private $image_y; 

public function init($width, $hight) { 
$this->image_x = $width;        // 400 
$this->image_y = $hight;        // 200 
} 
}
```


----------



## Der_baum (4. Dezember 2007)

Naja, ... wenn bei ihm aber 4 und nicht 5 läuft?
Ich arbeite auch mit 5 und kann es nur empfehlen, wenn es aber der Server oder sonstige Scripte einfach nicht zulassen...


----------



## rflx (4. Dezember 2007)

Hi Der_baum & ne0hype

Danke für die Antworten.

@Der_baum: Was wird bei dieser Syntax genau erzeugt und wo muss ich das einfügen?

```
$img_upload = new upload; 
$img_upload->init($width,$height);
```

@ne0hype: Das mit dem Deklarieren funktioniert irgendwie nicht. Bekomme die Fehlermeldung:

```
Fatal error: Cannot redeclare upload::$image_x in C:\wamp\www\en\admin\includes\inhalt\uploader\class.php on line 364
```
Muss ich da noch zusätzlich etwas deklarieren?

EDIT: PHP5 läuft.

Gruss rflx


----------



## Der_baum (4. Dezember 2007)

Hi,



rflx hat gesagt.:


> EDIT: PHP5 läuft.


dann hat ne0hype natürlich recht. Schreibe bitte alles soweit auf PHP5 um. Wie und was du zu tun hast, kannst du aus dem o.g. Link entnehmen.
Um mal Anzufangen, was ja auch ne0hype eigentlich schon getan hat:


```
class Upload {  

private $image_x;
private $image_y;

	public function init($width, $height) { 
		$this->image_x = $width;
		$this->image_y = $height;
	}
}
```




rflx hat gesagt.:


> Was wird bei dieser Syntax genau erzeugt und wo muss ich das einfügen?



Einfügen musst du den Code an der Stelle, wo er ausgeführt werden soll.
Mit "new" leitest du eine Neue Instanz deiner Klasse ein. Um mich nicht mit fremden Lorbeeren zu schmücken, Auszug aus php.net:


> Um eine Instanz einer Klasse zu erzeugen, muss ein neues Objekt erzeugt und einer Variablen zugewiesen werden. Bei der Erzeugung wird das Objekt immer zugewiesen, außer wenn das Objekt einen definierten Konstruktor besitzt, der aufgrund eines Fehlers eine Exception wirft. Klassen sollten vor ihrer Instantiierung definiert werden (in manchen Fällen ist dies eine Notwendigkeit).



Und mit


Der_baum hat gesagt.:


> ```
> $img_upload->init($width,$height);
> ```


rufst du eine Funktion innerhalb deine Klasse auf, verbessert mich wenn ich was falsches sage.

Hier steht eigentlich alles was mit OOP unter PHP5 zu tun hat, wenn du weitere Fragen hast, helfen wir dir gerne weiter. -> http://de.php.net/oop5


Gruß Baum


----------



## rflx (4. Dezember 2007)

Hi Der_baum,

Vielen Dank für die Infos.
Habe aber eine kleine Frage: muss ich die ganze Klasse umschreiben oder nur die betreffende Funktion und Variablen? Weil meine Class hat 1863 Zeilen. *g*

Freundliche Grüsse

rflx


----------



## Der_baum (4. Dezember 2007)

Hallo!

Naja, der Umstieg wird sich sicherlich nicht nicht Lohnen.
Du solltest dich Grundsätzlich für eine PHP Version und für eine Programmier-Version (nicht ein misch-masch aus PHP 4 und 5) entscheiden.
Optionen, du passt die Komplette Klasse an PHP 5 an, oder setzt den Server auf PHP4 runter (eher abzuraten).
Es gibt natürlich noch eine Variante, die werde ich aber nicht nennen da es absolut keinen Sinn gibt und ich nicht Verprügelt werden will! 


Gruß aus München,
Baum


----------



## rflx (4. Dezember 2007)

haha  

kannst mir ja eine msg schreiben 

Ist es wirklich so schwer zwei Variablen in eine Klasse zu übernehmen?

Gruss rflx


----------



## ne0hype (4. Dezember 2007)

Ha nein...

```
$img_upload = new Upload;
$img_upload->init($width,$height);
```

und schon hast du die Variablen in deiner Klasse


----------



## drucko (4. Dezember 2007)

Allgemein brauchst du eben eine Funktion, die dir die Werte in die Klasse übergibt.
Der tatsächliche Wert wird als Funktionsparameter mitgegeben, und die Funktion weist diesen dann der Klassenvariable zu. Ob das PHP4 oder 5 ist, ändert an der Vorgehensweise nichts, nur an der Syntax.


```
class testklasse{
   var $foo;
   var $bar;

   function set_foo($foovalue){
      $this->foo = $foovalue;
   }
   function set_bar($barvalue){
      $this->bar = $barvalue;
   }
}


$instanz = new testklasse();
$wert1 = 4564;
$wert2 = 'kuckuck';
$instanz->set_foo($wert1);
$instanz->set_bar($wert2);
```


----------



## rflx (4. Dezember 2007)

Danke.. ich werde es einmal ausprobieren.

Schönen Abend wünscht

rflx


----------

