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

Problem mit $this in der statischen PHP-Funktion

WBOY
Freigeben: 2016-10-24 00:12:42
Original
1699 Leute haben es durchsucht

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>
Nach dem Login kopieren
Nach dem Login kopieren

}
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>
Nach dem Login kopieren
Nach dem Login kopieren

}

$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>
Nach dem Login kopieren
Nach dem Login kopieren

}
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>
Nach dem Login kopieren
Nach dem Login kopieren

}

$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.

Verwandte Etiketten:
php
Quelle:php.cn
Erklärung dieser Website
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
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage