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
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.
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.
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))
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.
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.
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);
}
}