Heim >Backend-Entwicklung >PHP-Tutorial >Problem mit $this in der statischen PHP-Funktion
Klasse A{
<code> public $age = 50; private $money = 2000; static public $head = 1; public function tell(){ echo $this->age,'<br />'; echo self::$head,'<br />'; } static public function sayMoney(){ echo $this->money,'<br />'; }</code>
}
Klasse B erweitert A{
<code> public $age = 22; private $money = 10; public function subtell(){ parent::tell(); echo $this->age,'<br />'; } public function subMoney() { parent::sayMoney(); echo $this->money,'<br />'; }</code>
}
$b = new B();
$b->subtell();//22 1 22;
Echo '
Der letzte Satz meldet einen Fehler bei der Verwendung von $this, wenn nicht im Objektkontext
Aber $this ist nicht gebunden, wenn subMoney() aufgerufen wird, $this zeigt auf das b-Objekt und dann wird parent::sayMoney() ausgeführt. Da es statisch aufgerufen wird, sollte $this nicht 2000 erhalten, wenn sayMoney() ausgeführt wird. Es ist dasselbe wie das vorherige $b->. Was ist der Unterschied beim Aufruf von subtell();
Klasse A{
<code> public $age = 50; private $money = 2000; static public $head = 1; public function tell(){ echo $this->age,'<br />'; echo self::$head,'<br />'; } static public function sayMoney(){ echo $this->money,'<br />'; }</code>
}
Klasse B erweitert A{
<code> public $age = 22; private $money = 10; public function subtell(){ parent::tell(); echo $this->age,'<br />'; } public function subMoney() { parent::sayMoney(); echo $this->money,'<br />'; }</code>
}
$b = new B();
$b->subtell();//22 1 22;
Echo '
Der letzte Satz meldet einen Fehler bei der Verwendung von $this, wenn nicht im Objektkontext
Aber $this ist nicht gebunden, wenn subMoney() aufgerufen wird, $this zeigt auf das b-Objekt und dann wird parent::sayMoney() ausgeführt. Da es statisch aufgerufen wird, sollte $this nicht 2000 erhalten, wenn sayMoney() ausgeführt wird. Es ist dasselbe wie das vorherige $b->. Was ist der Unterschied beim Aufruf von subtell();
Sie können this
nicht innerhalb einer statischen Methode verwenden. Wenn statische Eigenschaften und Methoden erstellt werden, gibt es möglicherweise keine Instanzen dieser Klasse, die aufgerufen werden können. Sie können classA::staticMethod()
oder $a = new classA(); $a->staticMethod()
verwenden this
Falsche Lesart
Die Person oben hat recht, die zweite aufgerufene Funktion verwendet statische Werte, daher kann $this nicht verwendet werden
private gibt an, dass es privat ist und nur den Zugriff innerhalb der Klasse zulässt, auch wenn es sich um eine geerbte Klasse handelt.
Wenn der geerbte Zugriff zulässig ist und Sie keinen externen Zugriff wünschen, können Sie ihn in „geschützt“ ändern.
Außerdem wird die Instanz dieser Klasse erstellt und $this stellt die Klasse dar.