ホームページ  >  記事  >  バックエンド開発  >  PHPクラスのself、parent、thisの違いと例の紹介

PHPクラスのself、parent、thisの違いと例の紹介

高洛峰
高洛峰オリジナル
2017-01-21 13:13:051606ブラウズ

1 つ、これ

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

1. self はこのクラスの静的属性と静的メソッドにアクセスできます。親クラスの静的プロパティと静的メソッド。

2. self を使用する場合、インスタンスを作成する必要はありません。


1. 親は、親クラスの静的プロパティと静的メソッドにアクセスできます。

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 を呼び出すことができます。 class 、親クラスのメソッドと属性、

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

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

複数の PHP クラスにおける self、parent、this の違いと例の紹介に関する関連記事については、PHP 中国語 Web サイトに注目してください。

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