wake-up-neo.com

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

Also hier ist der Deal. Ich möchte eine Klasse aufrufen und einen Wert an sie übergeben, damit sie in dieser Klasse in allen Funktionen ect verwendet werden kann. ect. Wie würde ich das machen?

Danke, Sam

36
Sam152

Ich möchte eine Klasse aufrufen und einen Wert übergeben, damit sie in dieser Klasse verwendet werden kann

Das Konzept wird "Konstruktor" genannt.

Wie aus den anderen Antworten hervorgeht, sollten Sie die einheitliche Konstruktorsyntax (__construct()) ab PHP verwenden. 5. Hier ein Beispiel, wie das aussieht:

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

// in code:

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

Notice - Es gibt sogenannte Old-Style-Konstruktoren, auf die Sie in altem Code stoßen könnten. Sie sehen so aus:

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

Dieses Formular ist offiziell ab PHP 7 veraltet und sollte nicht mehr für neuen Code verwendet werden.

54
Tomalak

In neuen Versionen von PHP (5 und höher) wird die Funktion __constuct aufgerufen, wenn Sie "new {Object}" verwenden. Wenn Sie also Daten in das Objekt übergeben möchten, fügen Sie der Konstruktfunktion Parameter hinzu und rufen Sie dann auf

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

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

Benannte Konstruktoren werden zu Gunsten der __construct-Methode aus PHP entfernt.

33
davethegr8
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;

Dies bedeutet auf lange Sicht weniger Wartung.

Die Reihenfolge der übergebenen Variablen ist nicht mehr wichtig (keine Schreibvorgaben mehr wie 'null': someClass (null, null, wahr, falsch))

Das Hinzufügen einer neuen Variable ist weniger umständlich (Sie müssen 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) 

vs 

Person(array('isFat' => true, 'canRunFast' => false)) 
18
M.B

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 auf

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

11 wird auf die Seite geschrieben. Ein nicht sehr nützliches Beispiel, da Sie den Wert beim Hinzufügen vorziehen würden, wenn Sie ihn aufrufen. Dies veranschaulicht jedoch den Punkt.

12
andrew

Das kannst du 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.

3
empi

Ich denke, jeder vermisst das Offensichtliche hier. Ja, der PHP4-Konstruktor ist veraltet, aber Sie können Ihre Klasse so schreiben, dass sie rückwärtskompatibel ist: 

class myClass {

    var $myVar;

    function myClass { // PHP4 constructor, calls PHP5 constructor
        $this->__construct();
    }

    function __construct() { // PHP5 constructor
        doSomeStuff($myVar);
    }
}
0
Chris Cox