程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 網頁編程 >> PHP編程 >> 關於PHP編程 >> php面向對象的簡單總結 $this $parent self

php面向對象的簡單總結 $this $parent self

編輯:關於PHP編程

php面向對象的簡單總結 $this $parent self


 雖然接觸php比較長時間,但有時在使用一些基礎東西的時候還會有些不確定,有些疑惑。面向對象涉及到的比較多,大概總結整理一下php的屬性、對象,以及訪問方式$this  $parent  self  的使用場景。   1. PHP類屬性定義和訪問方式:      1 <?php  2 class testClass {  3     const tConst = 1;  4     public $tVar = 2;    //或 public $tVar;  前面需要有變量修飾符  5     static $tSta = 3;  6   7     public function __construct(){  8         echo $this->tConst;    //無錯誤,無輸出  9         echo self::tConst;    //正確輸出 1 10          11         echo $this->tVar;    // 注意tVar前不能有$符號 12         echo self::$tVar;    // Access to undeclared static property: testClass::$tVar 13         echo self::tVar;    // tVar前需要加上$符號,Undefined class constant 'tVar' 14          15         echo $this->tSta;    //無錯誤,無輸出 16         echo self::$tSta;    //正確輸出 3 17          18     } 19 } 20  21 $otestClass = new testClass();           總結幾點:   在實例化對象時  $otestClass = new testClass(); 其中testClass()中的()可以省略,當構造函數有顯式聲明需要參數時,需要在這裡傳入參數 如果被引用的變量或者方法被聲明成const(定義常量)或者static(聲明靜態),那麼就必須使用操作符:: 如果被引用的變量或者方法沒有被聲明成const或者static,那麼就必須使用操作符-> 從類的內部訪問const或者static變量或者方法,使用自引用的self 從類的內部訪問不為const或者static變量或者方法,使用自引用的$this 2. $this->  究竟指向哪?    1 class testClass {  2     var $nick = '';  3       4     public function __construct($nick){  5         $this->nick = $nick;  6     }  7       8     public function display(){  9         echo $this->nick; 10     } 11 } 12  13 $otestClass1 = new testClass('frank'); 14 $otestClass1->display();        //echo $otestClass1->nick;  和此結果相同       上面例子中,$this->display();   其實就是 $otestClass1->nick,因此$this究竟指向哪是由所實例化的對象決定的,指向當前對象實例的指針。包括變量、方法都是如此   $this->方法() 的例子:      1 class baseClass{  2     public function testFunc(){  3         echo "\n" . 'I`m boss';  4     }  5 }  6   7 class parentClass extends baseClass{  8     public function testFunc(){  9         echo "\n" . 'I`m the up'; 10     } 11 } 12  13 class testClass extends parentClass{ 14     var $nick = ''; 15      16     public function __construct($nick){ 17         $this->nick = $nick; 18     } 19      20     public function display(){ 21         echo $this->nick; 22         $this->testFunc(); 23     } 24 } 25  26 $otestClass1 = new testClass('frank'); 27 $otestClass1->display();       這樣的代碼最後的輸出結果是什麼呢?關鍵是看testFunc()方法。   如果在類中用$this調用一個當前類中不存在的方法或變量,它會依次去父類尋找,直到找不到再報錯 基於第一條,如果找到了需要的方法或變量,就會停止尋找,如果其上級父類中還有同樣的,則選擇當前找到的 所以上面代碼輸出為:   frank I`m the up     3. 關於parent::   parent是對父類的引用      1 <?php  2 class A {  3     public  $a = 'aa';  4     public function callFunc(){  5         echo 'parent';  6     }  7 }  8   9 class B extends A{ 10     public function __construct(){ 11         parent::callFunc(); 12         echo "\n" . $this->a; 13     } 14 } 15  16 $oB = new B;   比如,上面的代碼中,在class B中,若要調用其父類A中的callFunc()方法,就需要使用parent::callFunc(),但A類中此方法必須是public修飾的,否則會提示 Fatal error: Call to private method A::callfunc() from context 'B'...   另外需要注意的是,對於父類中的屬性$a,調用的時候用$this,用parent就訪問不到了。若$a在A類中是這樣定義的:public static $a,則訪問的時候就需要parent::$a   注意,parent不具備傳遞性,它只能代表當前類的父類,若此例子A類繼承base類,在base類中定義baseFunc()方法,那麼在B類中使用parent::baseFunc()是錯誤的,只能在A類中這樣使用。   4. self::又指向哪裡?   簡單的說,self和某具體實例沒有關系,它只指向當前類,不會受某具體類對象的影響      1 class testClass{  2     public static $count = 0;  3     public $num = 0;  4       5     function __construct(){  6         self::$count++;  7         $this->num++;  8     }  9      10     function display(){ 11         echo self::$count . "\n"; 12         echo $this->num . "\n"; 13     } 14 } 15  16 $oTest1 = new testClass; 17 $oTest1->display();        //輸出: 1  1 18  19 $oTest2 = new testClass; 20 $oTest2->display();        //輸出: 2  1     上面例子中self::$cout始終指向該類本身,而$num是單獨存在於各個具體實例中的。       5. 總結:     $this 指向當前的實例     $parent 是父類的引用     self 對當前類本身的一個引用

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved