導航:首頁 > 編程語言 > php超類

php超類

發布時間:2024-03-29 06:14:23

A. php中的類是單繼承,那要有多個類繼承怎麼辦

PHP沒有多繼承的特性。即使是一門支持多繼承的編程語言,我們也很少會使用這個特性。在大多數人看來,多繼承不是一種好的設計方法。想要給某個類添加額外的特性,不一定要使用繼承。這里我提供一種模擬多繼承的方法以供參考。


PHP有一個魔術方法,叫做__call。當你調用一個不存在的方法時,這個方法會被自動調用。這時,我們就有機會將調用重定向到一個存在的方法。繼承多個父類的子類,尋找方法的過程一般是這樣的:

本身的方法 -> 父類1的方法 -> 父類2的方法...


模擬過程大致是這樣:將各個父類實例化,然後作為子類的屬性。這些父類提供一些公有的方法。當子類擁有某方法時,__call()函數不會被調用。這相當於「覆蓋」了父類的方法。當調用了不存在的方法時,通過__call()方法依次從父類中尋找可以調用的方法。雖然這不是完備的多繼承,但可以幫助我們解決問題。


<?php
classParent1{
functionmethod1(){}
functionmethod2(){}
}
classParent2{
functionmethod3(){}
functionmethod4(){}
}
classChild{
protected$_parents=array();
publicfunctionChild(array$parents=array()){
$_parents=$parents;
}

publicfunction__call($method,$args){
//從「父類"中查找方法
foreach($this->_parentsas$p){
if(is_callable(array($p,$method))){
returncall_user_func_array(array($p,$method),$args);
}
}
//恢復默認的行為,會引發一個方法不存在的致命錯誤
returncall_user_func_array(array($this,$method),$args);
}
}
$obj=newChild(array(newParent1(),newParent2()));
$obj->method1();
$obj->method3();

這里沒有涉及屬性的繼承,但實現起來並不困難。可以通過__set()和__get()魔術方法來模擬屬性的繼承。請你動手實踐。

B. php子類怎麼使用父類的use

你指的是導入命名空間的語法 use?

那不存在父類子類的說法。use只是將另外一個命名空間的定義(類或函數等)導入到當前命名空間使用。

每個文件(如果一個文件有多個命名空間,那每個命名空間導入一次)使用該語法導入一次,就可以一正常使用了。

如果一個文件里同時定義了兩個類,同時只有一個命名空間,那在命名空間後導入一次就可以在兩個類里同時使用了

PHP: 命名空間

C. php寫函數 根據子類(id)遞歸查找頂級父類(id) 返回父類名字 (表結構:id name pid)

你肯定得是兩張表吧 一張是 table1 (id name pid ) 一張是 table 2(pid name)

多表聯查:select table2.name as p_name , pid as p_id from table1 right join table2 on table1.pid=table2.pid where id=' 輸入你的子類ID'

就可以查詢了 ,望採納

D. php中self的真正含義是什麼為什麼可以調用父類 的成員和方法 - PHP進階討論

self對應static$this是非static這兩者總和相當於Java裡面的thisparent相當於Java裡面的super我問你
你要在子類中執行父類的構造器怎麼執行?TankMe
發表於
2009-9-9
16:19[i]self是這個類。this是這個類現在創建的對象。而不是單純的只指靜態非靜態。self從理論上在php里是可以調用帆叢任何東西的。。。php6可以支持直接調用靜態和非靜態。因為他是和::符配合的。。。只要是這個類裡面侍判的任何成員和方法都能調態談櫻用。。。你把php所有錯誤提示關閉。就可以執行。。。我記得我以前測試過一下的。。。php5貌似會拋出一個warring。。我忘記當時測試的結果了。但是從文檔上看到得這理論是可行的

E. PHP怎麼在子類用父類的魔術方法

父類的魔術方法:
function __construct()
{
echo '我是父類的構造函數(魔術方法)';

}

function __unset()
{
echo '我是父類的銷毀方法(魔術方法)';

}
子類調用
function index()
{
parent::__construct();

parent::__unset();

}
輸出:
我是父類的構造函數(魔術方法)
我是父類的銷毀方法(魔術方法)

F. 父類中被final標識的方法,在子類中可以調用嗎

可以,被final修飾的任何繼承自這個類的子類,都不能夠在自己的方法當中來覆蓋他父類的這個方法。

閱讀全文

與php超類相關的資料

熱點內容
李采譚4部啊喂 瀏覽:553
CK影院網 瀏覽:724
不用下載的網站直接看就行 瀏覽:897
母乳喂養電影有哪些 瀏覽:795
抓雞需要什麼配置的伺服器 瀏覽:80
雲平台推送伺服器地址 瀏覽:72
多維BOSS通伺服器地址 瀏覽:1001
姜銀慧倫理電影 瀏覽:531
dde編程 瀏覽:845
飛機事故的電影演員叫什麼兵 瀏覽:593
群暉nfc共享文件夾 瀏覽:917
實時影像疊加ar編程培訓 瀏覽:653
程序員吃青春飯規定 瀏覽:307
南洋建國類的小說 瀏覽:347
萱萱電視劇影視 瀏覽:219
泰國腐片免費看 瀏覽:144
美版狗電影 瀏覽:865
德軍女兵電影大全集 瀏覽:635
android經典教材 瀏覽:863
解讀程序源碼 瀏覽:949