通過className::functionNmae()、實例化、parent、self得出結論
className::functionNmae() 需是靜態方法(public模式)
parent::functionNmae() 該類是靜態方法調用則父類需是靜態方法,該類普通方法調用不限制 。父類方法需是(public、protected兩種模式)。
self::functionNmae() 該類需是靜態方法(三種模式)
實例化:實例化后可訪問public模式的靜態方法或普通方法
一、直接訪問(通過 className::functionNmae()和實例化):
結論:
| 可以 通過 className::functionNmae() 訪問public | 可以 通過實例 $obj->functionName() 訪問 | 不可 通過 className::functionNmae() 訪問protected | 不可 通過實例 $obj->functionName() 訪問 | 不可 通過 className::functionNmae() 訪問private | 不可 通過實例 $obj->functionName() 訪問
<?php/** * * @authors HG (hg0728@QQ.com) * @date 2015-05-26 17:12:02 * @version 1.0 */header("Content-type:text/html;charset=utf-8");class A { static $name='這是類A的靜態變量'; static public function stc_pc(){ echo '這是類A的公共靜態方法<br />'; } static function stc(){ echo '這是類A的靜態方法<br />'; } static protected function stc_pd(){ echo '這是類A受保護的靜態方法<br />'; } static private function stc_pe(){ echo '這是類A私有的靜態方法<br />'; }}A::stc_pc();//可訪問A::stc();//可訪問A::$name;//不報錯//A::stc_pd();//不可訪問//A::stc_pe();//不可訪問echo '<br><br>通過實例化訪問<br><br>';$a = new A();$a->stc_pc();//可訪問$a->stc();//可訪問//$a->$name;//報錯//$a->stc_pd();//不可訪問//$a->stc_pe();//不可訪問/******************** | 可以 通過 className::functionNmae() 訪問public | | 可以 通過實例 $obj->functionName() 訪問 | 不可 通過 className::functionNmae() 訪問protected | | 不可 通過實例 $obj->functionName() 訪問 | 不可 通過 className::functionNmae() 訪問private | | 不可 通過實例 $obj->functionName() 訪問 ********************/
二、直接訪問(self::functionNmae())
結論:
self::functionNmae();需是靜態方法(三種模式都可)
<?php/** * * @authors HG (hg0728@qq.com) * @date 2015-05-26 17:18:50 * @version 1.0 */header("Content-type:text/html;charset=utf-8");class C { static $name = "靜態變量"; static public function stc_pc(){ echo '靜態公共方法<br>'; self::stc_pd(); self::stc_pe(); self::stc(); //self::func();//報錯但有結果 } static protected function stc_pd(){ echo '靜態受保護方法<br>'; } static private function stc_pe(){ echo '靜態受保護方法<br>'; } static function stc(){ echo '靜態普通方法<br>'; } function func(){ echo '普通方法<br>'; } }C::stc_pc();/******self::functionNmae();需是靜態方法(三種模式都可)******/三、通過子類訪問父類(parent::functionNmae()和實例化)
結論:
parent::functionNmae(); private不可訪問$obj->functionNmae(); private不可訪問
<?php/** * * @authors HG (hg0728@qq.com) * @date 2015-05-26 17:18:50 * @version 1.0 */header("Content-type:text/html;charset=utf-8");include '/class_a.php';class B extends A{ static public function index(){ parent::stc_pc(); parent::stc(); parent::stc_pd(); parent::$name;//不報錯 //parent::stc_pe();//不可訪問 echo '<br><br>通過實例化訪問<br><br>'; $a = new A(); $a->stc_pc(); $a->stc(); $a->stc_pd(); $a->$name;//報錯 //$a->stc_pe();//不可 } }B::index();/******在子類中通過:parent::functionNmae(); private不可訪問$obj->functionNmae(); private不可訪問******/四、
<?php/** * * @authors HG (hg0728@qq.com) * @date 2015-05-28 11:54:03 * @version 1.0 */class functioninc{ function fc_a(){ echo '000 '; } static protected function fc_b(){ echo '111 '; } }class fun extends functioninc { static function a(){ parent::fc_a(); //報錯 fc_a()不是靜態方法 parent::fc_b(); } function b(){ parent::fc_a(); parent::fc_b(); }}/*在子類中靜態方法通過parent調用父類方法,父類方法需是靜態方法。普通方法通過parent調用父類方法,不限制。*/$a = new fun();$a->a();$a->b();public: 公有類型 在子類中可以通過self::var調用public方法或屬性,parent::method調用父類方法 在實例中可以能過$obj->var 來調用 public類型的方法或屬性
protected: 受保護類型 在子類中可以通過self::var調用protected方法或屬性,parent::method調用父類方法 在實例中不能通過$obj->var 來調用 protected類型的方法或屬性
private: 私有類型 該類型的屬性或方法只能在該類中使用,在該類的實例、子類中、子類的實例中都不能調用私有類型的屬性和方法
新聞熱點
疑難解答