Heim  >  Artikel  >  Backend-Entwicklung  >  Was ist der Unterschied zwischen self, parent und this in der PHP-Klasse?

Was ist der Unterschied zwischen self, parent und this in der PHP-Klasse?

伊谢尔伦
伊谢尔伦Original
2017-07-08 10:21:061245Durchsuche

1, this

1 Um dies zu verwenden, müssen Sie ein Objekt haben, andernfalls wird ein Fehler gemeldet. Schwerwiegender Fehler: Verwendung von $this, wenn nicht im Objektkontext.
2. Dies kann Methoden und Attribute in dieser Klasse aufrufen und kann auch einstellbare Methoden und Attribute in der übergeordneten Klasse aufrufen

2 >1, self kann auf die

statischen

-Eigenschaften und statischen Methoden in dieser Klasse zugreifen und kann auf die statischen Eigenschaften und statischen Methoden in der übergeordneten Klasse zugreifen. 2. Wenn Sie self verwenden, müssen Sie nicht instanziieren

3. Parent kann auf statische Eigenschaften und statische Methoden zugreifen .
2. Wenn Sie parent verwenden, müssen Sie den -Code nicht wie folgt instanziieren:


1 Wenn wir $test->tank() aufrufen. ;-Methode, $this in tank ist ein Objekt, das Methoden und Attribute in dieser Klasse und der übergeordneten Klasse aufrufen kann,

2, test1::test1_function(); Bei Verwendung einer statischen Methode wird eine Warnung angezeigt. Die nicht statische Methode test::test1_function() sollte nicht statisch aufgerufen werden. Es ist ersichtlich, dass self die statischen Eigenschaften dieser Klasse und der übergeordneten Klasse aufrufen kann Rufen Sie die statischen Eigenschaften der übergeordneten Klasse auf. Beim Aufruf nicht statischer Attribute wird ein Fehler gemeldet. Es gibt Kommentare

<?php
class test{
 public $public;
 private $private;
 protected $protected;
 static $instance;
 static $good = &#39;tankzhang <br>&#39;;
 public $tank = &#39;zhangying <br>&#39;;
 public  function construct(){
 $this->public    = &#39;public     <br>&#39;;
 $this->private   = &#39;private    <br>&#39;;
 $this->protected = &#39;protected  <br>&#39;;
 }
 public function tank(){                          //私有方法不能继承,换成public,protected
 if (!isset(self::$instance[get_class()]))
 {
 $c = get_class();
 self::$instance = new $c;
 }
 return self::$instance;
 }   
 public function pub_function() {
 echo "you request public function<br>";
 echo $this->public;
 }
 protected  function pro_function(){
 echo "you request protected function<br>";
 echo $this->protected;
 }
 private function pri_function(){
 echo "you request private function<br>";
 echo $this->private;
 }
 static function sta_function(){
 echo "you request static function<br>";
 }
}
class test1 extends test{
 static $love = "tank <br>";
 private $aaaaaaa = "ying <br>";
 public function construct(){
 parent::tank();
 parent::construct();
 }
 public function tank(){
 echo $this->public;
 echo $this->protected;
 echo $this->aaaaaaa;
 $this->pro_function();
 }
 public  function test1_function(){
 echo self::$love;
 echo self::$good;
 echo parent::$good;
 echo parent::$tank;   //Fatal error: Access to undeclared static property: test::$tank
 echo self::$tank;     //Fatal error: Access to undeclared static property: test::$tank
 }
 static function extends_function(){
 parent::sta_function();
 self::pro_function();
 echo "you request extends_private function<br>";
 }
}
error_reporting(E_ALL);
$test = new test1();
$test->tank();            //子类和父类有相同名字的属性和方法,实例化子类时,会调用子类中的方法。
test1::test1_function();
test1::extends_function();  //执行一部分后,报Fatal error: Using $this when not in object context in D:\xampp\htdocs\mytest\www4.php on line 32
?>
3 im Code, test1::extends_function(); dieser Schritt meldet einen Fehler und meldet, dass $this in einem Nicht-Objekt verwendet wird. Warum ist das so? test1::extends_function(); ruft nur eine Methode in der Klasse auf und wird nicht instanziiert. Wenn $this in der übergeordneten Klasse verwendet wird, wird ein Fehler gemeldet

Das obige ist der detaillierte Inhalt vonWas ist der Unterschied zwischen self, parent und this in der PHP-Klasse?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

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