Sie können dies tun. Der Code in Ihrer Frage funktioniert, aber es gibt ein Problem mit diesem Ansatz.
Wenn Sie Ihre Klasse auf diese Weise schreiben, hängt sie immer von dieser externen Funktion ab, aber sie hat keine Kontrolle darüber, ob sie überhaupt existiert oder nicht, ob sie einen Wert zurückgibt, den der Konstruktor verwenden kann. Wenn Sie die externe Funktion verschieben, umbenennen oder ändern, kann dies das Verhalten Ihrer Klasse auf unvorhersehbare Weise ändern.
Ich würde stattdessen so etwas empfehlen, was meiner Meinung nach das erreichen kann, was Sie erreichen möchten (nicht sicher), ohne dass Ihre Klasse blind auf eine externe Funktion angewiesen ist.
class MyClass {
protected $_my_property = 'Good night World!'; // set a default value here
public function __construct($x = null) { // give your constructor an optional argument
if ($x) { // use the optional argument if it's provided
$this->_my_property = $x;
}
}
public function getOtherMethod() {
return $this->_my_property;
}
}
können Sie immer noch eine Instanz der Klasse ohne Argument
$obj = new MyClass();
und erstellen, wenn Sie $obj->getOtherMethod();
rufen werden Sie den Standardwert erhalten.
Sie können weiterhin die externe Funktion verwenden; Lassen Sie es einfach seinen Wert in den Konstruktor Ihres Objekts übergeben, anstatt ihn im Konstruktor zu verwenden.
$obj = new MyClass(my_external_function());
Warum ja, ja Sie können ... – AbraCadaver
Haben Sie es versucht? Obwohl die Funktion zweimal aufgerufen wird, ist sie sehr ineffizient –
Warum möchten Sie das tun? Nur neugierig. –