導航:首頁 > 編程語言 > 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超類相關的資料

熱點內容
php社區程序 瀏覽:976
python現在就業怎麼樣 瀏覽:304
php上傳目錄許可權設置 瀏覽:736
php合同檔案管理系統 瀏覽:366
tshock伺服器地址 瀏覽:877
php解析文件流 瀏覽:780
伺服器機箱銅片有什麼用 瀏覽:969
樂視手機如何使用原生態安卓 瀏覽:215
dns伺服器怎麼備份啊 瀏覽:865
蘋果退款app怎麼重新購買 瀏覽:655
U盤cmd檢查文件夾成文件 瀏覽:66
java路徑是否存在 瀏覽:338
新氧app上怎麼測臉型 瀏覽:787
用指令獲得命令方塊 瀏覽:427
流星蝴蝶劍怎麼輸入命令 瀏覽:681
keil有紅叉但是能編譯通過 瀏覽:498
賽拉圖的空調壓縮機多少錢 瀏覽:330
linux54 瀏覽:986
shutdown命令linux 瀏覽:250
編譯的輸入 瀏覽:511