Heim >Backend-Entwicklung >PHP-Tutorial >Problem mit $this in der statischen PHP-Funktion

Problem mit $this in der statischen PHP-Funktion

WBOY
WBOYOriginal
2016-10-24 00:12:421718Durchsuche

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 '


';
$b->subMoney();

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();

Antwortinhalt:

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 '


';
$b->subMoney();

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

Das Folgende ist die ursprüngliche Antwort

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.

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn