程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 網頁編程 >> PHP編程 >> 關於PHP編程 >> public、protected、private的區別,protectedprivate

public、protected、private的區別,protectedprivate

編輯:關於PHP編程

public、protected、private的區別,protectedprivate


通過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不可訪問

******/

 

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