44 Stimmen

Wie würde man in php beim Initialisieren einer Klasse eine Variable an diese Klasse übergeben, die in ihren Funktionen verwendet werden soll?

Es geht also um Folgendes. Ich möchte eine Klasse aufrufen und einen Wert an sie übergeben, so dass es innerhalb dieser Klasse in allen verschiedenen Funktionen ect. ect verwendet werden kann. Wie würde ich vorgehen, um das zu tun?

Danke! Sam

69voto

Tomalak Punkte 320467

Ich möchte eine Klasse aufrufen und ihr einen Wert übergeben, damit er innerhalb dieser Klasse verwendet werden kann

Das Konzept wird als "Konstruktor" bezeichnet.

Wie die anderen Antworten zeigen, sollten Sie die die einheitliche Konstruktorsyntax ( __construct() ) ab PHP 5. Hier ist ein Beispiel, wie dies aussieht:

class Foo {
    function __construct($init_parameter) {
        $this->some_parameter = $init_parameter;
    }
}

// in code:

$foo = new Foo("some init value");

Hinweis - Es gibt so genannte Konstruktoren im alten Stil, auf die man im Legacy-Code stoßen kann. Sie sehen wie folgt aus:

class Foo {
    function Foo($init_parameter) {
        $this->some_parameter = $init_parameter;
    }
}

Dieses Formular ist ab PHP 7 offiziell veraltet und Sie sollten es nicht mehr für neuen Code verwenden.

34voto

davethegr8 Punkte 10905

In neueren PHP-Versionen (5 und höher) wird die Funktion __constuct immer dann aufgerufen, wenn Sie "new {Object}" verwenden. Wenn Sie also Daten an das Objekt übergeben wollen, fügen Sie der construct-Funktion Parameter hinzu und rufen dann

$obj = new Object($some, $parameters);

class Object {
    function __construct($one, $two) {}
}

Benannte Konstruktoren werden in PHP zugunsten der Methode __construct abgeschafft.

24voto

M.B Punkte 239
class SomeClass
{
    public $someVar;
    public $otherVar;

    public function __construct()
    {
        $arguments = func_get_args();

        if(!empty($arguments))
            foreach($arguments[0] as $key => $property)
                if(property_exists($this, $key))
                    $this->{$key} = $property;
    }
}

$someClass = new SomeClass(array('someVar' => 'blah', 'otherVar' => 'blahblah'));
print $someClass->someVar;

Das bedeutet auf lange Sicht weniger Wartungsaufwand.

Die Reihenfolge der übergebenen Variablen ist nicht mehr wichtig, (keine Standardwerte mehr wie 'null': someClass(null, null, true, false))

Das Hinzufügen einer neuen Variablen ist weniger mühsam (man muss die Zuweisung nicht in den Konstruktor schreiben)

Wenn Sie sich die Instanziierung der Klasse ansehen, wissen Sie sofort, worauf sich die übergebenen Variablen beziehen:

Person(null, null, true, false) 

gegen

Person(array('isFat' => true, 'canRunFast' => false))

15voto

andrew Punkte 4956

So mache ich meine

class MyClass {

       public variable;  //just declaring my variables first (becomes 5)
       public variable2; //the constructor will assign values to these(becomes 6)

       function __construct($x, $y) {
            $this->variable  = $x;
            $this->variable2 = $y;
       }

       function add() {
            $sum = $this->variable + $this->variable2
            return $sum;
       }

} //end of MyClass class

Erstellen Sie eine Instanz und rufen Sie dann die Funktion add

$myob = new MyClass(5, 6); //pass value to the construct function
echo $myob->add();

11 wird auf die Seite geschrieben Dies ist kein sehr nützliches Beispiel, da man lieber einen Wert an add übergibt, wenn man es aufruft, aber es veranschaulicht den Punkt.

3voto

empi Punkte 15455

Das kann man auch so machen:

class SomeClass
{
   var $someVar;
   function SomeClass($yourValue)
   {
       $this->someVar = $yourValue;
   }

   function SomeFunction()
   {
       return 2 * $this->someVar;
   }
}

oder Sie können __construct anstelle von SomeClass für den Konstruktor in php5 verwenden.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X