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

熱點內容
dell伺服器前面板如何拆 瀏覽:765
雲頂之巔伺服器什麼時候關閉 瀏覽:947
安卓qq郵箱怎麼搞 瀏覽:755
大疆御pro安卓手機用什麼軟體 瀏覽:339
plc每日產量統計編程實例 瀏覽:241
怎麼證明一個人不是真正程序員 瀏覽:571
視頻怎麼加密課程 瀏覽:565
5x的解壓密碼 瀏覽:480
如何創建tomcat80伺服器 瀏覽:389
一個真正隱世的程序員 瀏覽:822
飢荒聯機為什麼開不了伺服器 瀏覽:28
程序員的甜品製作方法 瀏覽:200
找幾本關於程序員職場的小說 瀏覽:356
拼多多app這是怎麼回事 瀏覽:811
程序員那麼可愛小說作者 瀏覽:204
pdf文件打不開怎麼辦 瀏覽:607
數字化校園系統源碼 瀏覽:194
androidxml虛線 瀏覽:861
小學生催眠按摩解壓視頻 瀏覽:417
報修管理系統源碼 瀏覽:76