Home  >  Article  >  Backend Development  >  What is the difference between self, parent and this in php class

What is the difference between self, parent and this in php class

伊谢尔伦
伊谢尔伦Original
2017-07-08 10:21:061240browse

1, this

1, to use this, you must have an object, otherwise it will report an error, Fatal error: Using $this when not in object context.
2, this can call methods and attributes in this class , and can also call adjustable methods and attributes in the parent class

2, self

1, self can access the static properties and static methods in this class, and can access the static properties and static methods in the parent class.
2, when using self, you don’t need to instantiate


3, parent

1, parent can access the static properties and properties in the parent class static method.
2. When using parent, you don’t need to instantiate the code.

The code is as follows:

<?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
?>

1. When we call the $test->tank(); method, inside the tank $this is an object. This object can call methods and attributes in this class and the parent class,

2, test1::test1_function(); when we use static methods to call non-static methods A warning will be displayed. Non-static method test::test1_function() should not be called statically. It can be seen that self can call the static properties of this class and the parent class, and parent can call the static properties of the parent class. Both will report errors when calling non-static properties. There is a comment

3 in the code, test1::extends_function(); this step will report an error, reporting that $this is used in a non-object. Why is this? test1::extends_function(); just calls a method in the class and is not instantiated, so there is no object at all. When $this is used in the parent class, an error will be reported

The above is the detailed content of What is the difference between self, parent and this in php class. For more information, please follow other related articles on the PHP Chinese website!

Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn