ホームページ  >  記事  >  バックエンド開発  >  PHPクラスのself、parent、thisの違いは何ですか

PHPクラスのself、parent、thisの違いは何ですか

伊谢尔伦
伊谢尔伦オリジナル
2017-07-08 10:21:061179ブラウズ

まず、これ

1. これを使用するには、オブジェクトコンテキストが必要です。そうでない場合は、致命的なエラー: オブジェクトコンテキストにない場合の $this の使用というエラーが報告されます。
2、これはこのクラスのメソッドとプロパティを呼び出すことができ、親クラスの調整可能なメソッドとプロパティを呼び出すこともできます

2、self

1、selfはこのクラスのプロパティとstaticのstaticにアクセスできますメソッドは、親クラスの静的プロパティと静的メソッドにアクセスできます。
2. self を使用する場合、インスタンス化する必要はありません


3. 親は、親クラスの静的プロパティと静的メソッドにアクセスできます。 2. 親を使用する場合、次のように

コードをインスタンス化する必要はありません。

<?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. $test->tank(); メソッドを呼び出すと、タンク内の $this がオブジェクトになります。このペア たとえば、このクラスと親クラスのメソッドと属性を呼び出すことができます、

2, test1::test1_function(); 静的メソッドを使用して非静的メソッドを呼び出すと、警告が表示されます。非静的メソッド test:: test1_function() は静的に呼び出すべきではありません。 self はこのクラスと親クラスの静的プロパティを呼び出すことができ、親が非静的メソッドを呼び出す場合は親クラスの静的プロパティを呼び出すことができることがわかります。 -static プロパティを使用すると、エラーが報告されます。コード内にコメント

3 があります。test1::extends_function(); このステップでは、$this が非オブジェクトで使用されていることを報告するエラーが報告されます。これはなぜでしょうか? test1::extends_function(); はクラス内のメソッドを呼び出すだけでインスタンス化されないため、親クラスで $this が使用されるとエラーが報告されます。

以上がPHPクラスのself、parent、thisの違いは何ですかの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。