php父類函數
『壹』 php怎麼獲取父類函數裡面的變數值
<?php
classA{public$a1='a1';protected$a2='a2';functiontest(){echo"hello!<hr/>";}}
classBextendsA{//若A類和B類不在同一文件中請包含後(include)再操作
public$a1='b1';functiontest2(){$this->test();parent::test();//子類調用父類方法}
functiontest()
{echo$this->a1.',';echo$this->a2.',';echo"b2_test_hello<hr/>";}}
$a=newB();$a->test();//b1,a2,b2_test_hello
$a->test2();//b1,a2,b2_test_hello//hello!
?>
方法的調用:$this->方法名();如果子類中有該方法則調用的是子類中的方法,若沒有則虛絕是調用父類滾豎中的
parent::則始終調用的是父類中的方法。
變數的調用:$this->變數名;如果子類中有該變大譽大量則調用的是子類中的,若沒有則調用的是父類中的
『貳』 php寫函數 根據子類(id)遞歸查找頂級父類(id) 返回父類名字 (表結構:id name pid)
你這種表結構叫鄰接緩租表,查詢或皮的方式通過自連接。如
SELECTt1.nameASlev1,t2.nameaslev2,t3.nameaslev3,t4.nameaslev4
FROMTbnameASt1
LEFTJOINTbnameASt2ONt2.pid=t1.id
LEFTJOINTbnameASt3ONt3.pid=t2.id
LEFTJOINTbnameASt4ONt4.pid=t3.id
WHEREt1.name='XXXX'
這種方法的主要局限是你需要為每層數據添加一個自連接,隨著層次的增加,自連接
變得越來越復雜,檢索的性能自然而然的也就下降了。當然這種結構在查詢前必須知道該節點所處的層級,否則無法確定自連接的深度。
鄰接表模型衫哪差的局限性很大,用純SQL實現有一定的難度。不妨考慮其他模型,比如嵌套模型。
嵌套模型的基本結構是樹型結構,SQL檢索比鄰接表要方便很多。
關於嵌套模型,PHPChina的第一期電子雜志PHPer也有過深入探討,請參考!
『叄』 php怎麼獲取父函數名
函數是沒有父子關系的,所以無法獲取父函數名。
對象具有父子關系,但是方法名稱和父類的方法名稱必然是同名的。
另一種可能是你想問誰調用的當前函數,可以列印堆棧信息。print_r(debug_backtrace());
『肆』 在php中,子類extends繼承了父類,當子類和父類同時存在構造函數__construct先執行哪一個呢
1、如果父類和子類中都沒有顯式的定義__construct,在實例化子類對象時,只會隱含的調用子類自己的構造方法。
2、如果父類中有顯式的構造方法__construct,而子類中沒有定義__construct,在實例化子類對象時,就會調用父類中的構造方法。
3、如果父類和子類中都顯式的定義了__construct,在實例化子類對象時,只會調用子類自己的構造方法(這就像是子類重構了父類的構造方法),而如果也想要調用父類的構造方法的話,就需要在子類的__construct 方法中顯式的調用,(如 __construct(){ parent::_construct();})。
(4)php父類函數擴展閱讀
子類的構造函數名與子類名相同。
在子類里父類的構造函數不會自動執行。
要在子類里執行父類的構造函數,必須執行類似以下語句:
$this->[父類的構造函數名()]
類的構造函數統一命名為__construct()。
子類的構造函數名也是__construct()(也是廢話)。
在子類里父類的構造函數會不會執行,分兩種情況:
1、如子類不定義構造函數 __construct(),則父類的構造函數默認會被繼承下來,且會自動執行。
2、如子類定義了構造函數 __construct(),因為構造函數名也是__construct(),所以子類的構造函數實際上是覆蓋(override)了父類的構造函數。這時執行的是該子類的構造函數。
這時如果要在子類里執行父類的構造函數,必須執行類似以下語句:parent::__construct();
『伍』 php繼承一個父類,如何自動執行父類方法
你在父類寫一個成員函數 然後子類繼承 創建子類對象的時候 可以點出來父類的成員函數
比如
Student zs = new Student();
zs.SayHello() //點出來的是從父類的繼承來的成員函數
輸出結果為父類的->我是人類
publicclassPerson
{
publicvoidSayHello()//這只是父類的SayHello
{
echo"我是人類";
}
}
publicclassStudent:Person//已經繼承了Person父類
{
//我什麼都沒寫
}