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

熱點內容
安卓下載東西怎麼弄 瀏覽:520
我的世界伺服器地址13 瀏覽:309
機修編程原理 瀏覽:720
手機點開app反應慢是哪裡的問題 瀏覽:772
數控銑床g代碼編程圖案 瀏覽:129
lan是指什麼伺服器 瀏覽:769
php匹配手機號 瀏覽:444
火狐app攔截窗口如何解除 瀏覽:902
javaapichm下載 瀏覽:162
如何用代理伺服器玩cf 瀏覽:999
java對象轉jsonobject 瀏覽:370
怎麼刪除app里的更新提示 瀏覽:422
日月單片機 瀏覽:152
airports在安卓上如何查看電量 瀏覽:252
北京回收全新伺服器硬碟雲主機 瀏覽:517
php空間搭建ss 瀏覽:507
phparray轉string 瀏覽:673
powermill編程培訓班 瀏覽:493
pdf與word文檔區別 瀏覽:61
MC你如何將材質包裝進伺服器 瀏覽:703