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

WBOY
リリース: 2016-06-13 13:03:26
オリジナル
771 人が閲覧しました

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

私は公的、私的、保護されたもの、そしてこれと自分自身を混同する傾向があります。 パブリック、プライベート、プロテクトに関する記事をすでに書きました ブログ投稿、これ、自分、親の使い方について話しましょう

一つ、これ

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

二人、自分

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

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


三、親

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

をインスタンス化する必要はありません
<?php

class test{
 public $public;
 private $private;
 protected $protected;
 static $instance;
 static $good = 'tankzhang <br>';
 public $tank = 'zhangying <br>';

 public  function __construct(){
 $this->public    = 'public     <br>';
 $this->private   = 'private    <br>';
 $this->protected = 'protected  <br>';

 }
 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() は、静的プロパティ 、親は親クラスの静的プロパティを呼び出すことができます 、どちらも非静的プロパティを呼び出すときにエラーを報告します。コード内にコメントがあります

3,

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

関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート