① php中怎麼類外訪問私有方法
你問的是私有方法還是私有屬性?
你說的__get __set 是訪問和設置屬性用的。
__call才是訪問方法用的。
但這兩種都需要修改原始類,既然有這個許可權了,那私有方法有什麼必要定義呢?
另外一種獲取私有屬性或調用私有方法的思路是通過反射:
//MyClass這個類中包含了一個名為myFun的私有方法
classMyClass{
private$tmp='hello';
privatefunctionmyFun()
{
echo$this->tmp.''.'world!';
}
}
//通過類名MyClass進行反射
$ref_class=newReflectionClass('MyClass');
//通過反射類進行實例化
$instance=$ref_class->newInstance();
//通過方法名myFun獲取指定方法
$method=$ref_class->getMethod('myFun');
//設置可訪問性
$method->setAccessible(true);
//執行方法
$method->invoke($instance);
//獲取屬性
$property=$ref_class->getProperty('tmp');
//列印屬性
var_mp($property);
不知道你提這個單純是個問題,還是有別的需求,可以多看看php手冊學習一下。
php 訪問控制
php 反射
② php私有函數如何調用
要先搞清楚類和對象的關系
將一個類實例化後就變成對象,私有函數只能在類內部使用,不能在類外,也就是對象上使用,也不能在子類中使用,如定義一個parent類
class
parent{
private
function
_justForMyself(){
echo
"這是私有函數,只能在類內部使用哦";
}
public
function
forAll(){
echo
"這是公共函數,在類外和子類都可以使用";
echo
"因為我在類內,可以調用私有函數";
$this->_justForMyself();
}
}
現在我們實例化這個類,讓他變成一個對象
$obj
=
new
parent();//實例化parent類,讓他變成一個對象並賦值給$obj
$obj->forAll();//forAll是公共函數,因此這里可以執行看到輸出
$obj->_justForMyself();//_justForMyself是私有函數,類外不可使用,因此執行到這里會報錯
③ php子類可以繼承和訪問父類的私有屬性和方法嗎
你這樣理解也可以,當父類有私有的方法和屬性,子類是繼承不到的,所以子類不能訪問父類的私有方法和屬性。java
特性,private:類中只要限定為private的成員,只能被這個類本身訪問
④ PHP中private和public還有protected的區別
public:聲明方法和屬性可以被隨意訪問。
Protected:聲明的方法和屬性只能被類本身和其繼承子類訪問。
private:只能被定義屬性和方法的類訪問。
private 是完全私有的,只有當前類中的成員能訪問到.
protected 是受保護的,只有當前類的成員與繼承該類的類才能訪問.
protected的訪問權介於public和private之間,實際上三者的區別就是許可權問題,private和protected區別主要體現在其繼承類的訪問許可權上,這些你可以自己編寫一個程序,寫個類,編譯一下你就很清楚他們許可權的區別了。
私有成員private member
只能被成員函數和類的友元訪問
實行信息隱藏的類把其數據成員聲明為private
被保護成員protected member
對派生類derived class 就像public 成員一樣
對其他程序則表現得像private