php class中self,parent,this的差異,以及執行個體

來源:互聯網
上載者:User
php class中self,parent,this的區別,以及執行個體

我容易混淆public,private,protected,還容易混淆this,self這些東西。前面已經寫了一篇關於public,private,protected博文了,下面來說一下this,self,parent的用法

一,this

1,要用this,你必有是一個對像的形勢,不然它會報錯的,Fatal error: Using $this when not in object context。
2,this可以調用本類中的方法和屬性,也可以調用父類中的可以調的方法和屬性

二,self

1,self可以訪問本類中的靜態屬性和靜態方法,可以訪問父類中的靜態屬性和靜態方法。
2,用self時,可以不用執行個體化的


三,parent

1,parent可以訪問父類中的靜態屬性和靜態方法。
2,用parent時,可以不用執行個體化的

'; public $tank = 'zhangying 
'; public function __construct(){ $this->public = 'public
'; $this->private = 'private
'; $this->protected = 'protected
'; } 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
"; echo $this->public; } protected function pro_function(){ echo "you request protected function
"; echo $this->protected; } private function pri_function(){ echo "you request private function
"; echo $this->private; } static function sta_function(){ echo "you request static function
"; }}class test1 extends test{ static $love = "tank
"; private $aaaaaaa = "ying
"; 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
"; }}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();這個方法時,tank裡面的$this是一個對像,這個對像可以調用本類,父類中的方法和屬性,

2,test1::test1_function();當我們用靜態方法去調用非靜態方法時,會顯示警告的,Non-static method test::test1_function() should not be called statically可以看出不,self可以調用本類,父類中的靜態屬性,parent可以調用父類中的靜態屬性,二者調用非靜態屬性會報錯。代碼中有注釋

3,test1::extends_function();這一步會報錯,報在非對像中使用$this。為什麼會這樣呢,test1::extends_function();只是調用了class中的一個方法,並沒有執行個體化,所以根本不存在什麼對像,當父類中用到$this時,就會報錯

  • 聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

    如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

    A Free Trial That Lets You Build Big!

    Start building with 50+ products and up to 12 months usage for Elastic Compute Service

    • Sales Support

      1 on 1 presale consultation

    • After-Sales Support

      24/7 Technical Support 6 Free Tickets per Quarter Faster Response

    • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.