通過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 ([email protected]) * @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 ([email protected]) * @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 ([email protected]) * @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不可訪問 ******/