當前位置:首頁 » 編程語言 » php函數繼承

php函數繼承

發布時間: 2022-11-18 00:14:52

1. php繼承機制和JS的繼承機制有什麼不同

類式繼承就像java的繼承一樣,思想也比較簡單:在子類型構造函數的內部調用超類型構造函數。

原型式繼承是藉助已有的對象創建新的對象,將子類的原型指向父類,就相當於加入了父類這條原型鏈

而你的 下面這段代碼不是嚴格意義上的類式繼承,按照Nicholas C.Zakas的說法,這個應該叫做組合式繼承。它調用了兩次parent2()。第一次是 child2.prototype=new parent2('param'); child2就會得到兩個屬性param,getParam(),他們都是parent2的屬性,但是他們在child2的原型中。第二次是parent2.call(this,cparam); 這次又在新對象上創建了實例屬性param,getParam()。於是,這兩個屬性就屏蔽了原型中的兩個同名屬性。這有什麼好處呢,就是你在構建一個child3時也繼承parent2()的屬性,還可以定義自己的屬性。與此同時他長的就和他兄弟不同了,但又有一樣的「血統(使用父類的方法)」。

2. php怎樣繼承變數

function logged(){
global $db,$sessions,$time_now;
.....
}

3. php 繼承時,方法可見性只能更高,即對於同一方法,父類為protected ,子類只能是protected 或者 public.

一個語言一種規矩,沒必要較真去比較,如果都一樣了,那就不是php了,php還是單繼承呢,你怎麼不去較真,php是5.0以後引用的面向對象,5.0之前照樣能實現工作,你怎麼不說java非要用面向對象去寫呢,一個道理,別較真

4. php子類的構造函數能繼承父類的嗎

可以繼承的,你加上parent::_construct(),方式訪問就可以。

5. PHP中類的繼承以及構造函數,和實例的屬性順序問題

父類的參數__construct($name,$age,$avoirpois,$sex)不正好是這個順序嘛

6. php 有關面向對象繼承構造函數初始化的問題

寫幾點提示供參考:

1、在類的繼承中,擴展或派生出來的類(子類)擁有其基類(父類)的所有變數和函數,並包含所有派生類中定義的部分。

也就說,你上面的在子類里類似

private $debugmessage;

這句代碼其實沒什麼意義。

2、如果你在子類里,又定義了與父類里同名的方法,那麼,父類的方法會被覆蓋,也就是說,你調用的是子類實現的代碼。

3、
this 指向的是當前對象
self 指向當前的類
parent 指向的是父類

7. php繼承一個父類,如何自動執行父類方法

你在父類寫一個成員函數 然後子類繼承 創建子類對象的時候 可以點出來父類的成員函數


比如

Student zs = new Student();

zs.SayHello() //點出來的是從父類的繼承來的成員函數

輸出結果為父類的->我是人類

publicclassPerson
{
publicvoidSayHello()//這只是父類的SayHello
{
echo"我是人類";
}
}

publicclassStudent:Person//已經繼承了Person父類
{
//我什麼都沒寫
}


8. php的子類繼承父類問題!

如果你想表達.子類不想輸出父類的欄位和方法,那麼你就只有在子類裡面重新寫和父類一樣的欄位和方法名,然後重新賦值,輸出子類,就是子類自己的欄位和方法了,而父類不會改變

你說的介面函數到底是什麼介面函數,是interface?還是普通的public function,還是什麼

9. 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()魔術方法來模擬屬性的繼承。請你動手實踐。

10. php繼承中方法重載(覆蓋)的應用場合

本文實例分析了php繼承中方法重載(覆蓋)的應用場合。分享給大家供大家參考。具體分析如下:
方法重載(override)/覆蓋——在什麼情況下使用:當父類知道所有的子類都需要用到一個方法,但父類不知道怎麼去寫這個方法時,就需要用到方法的重載。這時候,可以讓子類去重寫,來覆蓋這個方法。
通俗實例——父類(動物)知道其子類(貓和狗)都會叫,但它們的叫法都不一樣,所以父類沒法去寫這個方法,只能讓子類(貓和狗)去定義。代碼如下:
<?php
class
Animal{
public
$name;
protected
$price;
function
cry(){
echo
"不知道動物怎麼叫";
}
}
class
Dog
extends
Animal{
function
cry(){
echo
"汪汪...";
}
}
class
Pig
extends
Animal{
function
cry(){
echo
"哼哼..."
}
}
?>
方法重載/覆蓋的要點與細節(讀起來有點呦口):
1、要求子類的方法,其方法名稱、參數列表與父類方法一模一樣。如例子中cry(),不能添加參數,改成cry($naaa)等。注意:這里並不要求參數名一樣,只是要求參數的個數是一樣的。
2、所謂的重載或覆蓋,並不是將父類的方法覆蓋。也可以這么理解:如果子類有調用該方法時,如果在自己類里找不到這個方法,那麼它會去找父類里,看有沒有這個方法。這也是多態的理解
3、如果子類里某個方法,要把父類里相同名稱方法里的內容繼承下來,可以使用
parent::方法名

父類名::方法名
繼承。在子類定義的方法內使用。
4、訪問許可權問題,子類的訪問范圍>=父類的訪問范圍,即如果父類是protected
function
cry(),子類則只能是protected或public。
希望本文所述對大家的php程序設計有所幫助。

熱點內容
php難招 發布:2025-01-14 19:06:07 瀏覽:487
sublime編譯php 發布:2025-01-14 18:57:16 瀏覽:307
雲計算伺服器是什麼 發布:2025-01-14 18:56:22 瀏覽:41
vip域名查詢ftp 發布:2025-01-14 18:46:48 瀏覽:114
格式化linux 發布:2025-01-14 18:35:14 瀏覽:593
如何進入安卓原生市場 發布:2025-01-14 18:22:06 瀏覽:558
台式電腦找不到伺服器 發布:2025-01-14 18:19:58 瀏覽:423
androidsdk網盤 發布:2025-01-14 18:17:43 瀏覽:80
個別用戶訪問不了騰訊雲伺服器 發布:2025-01-14 18:03:27 瀏覽:276
oracle鏈接sqlserver 發布:2025-01-14 17:58:33 瀏覽:729