Ⅰ php私有屬性繼承問題
你設置了 private $Pname; 為私有變數 就導致了你的派生類是無法訪問父類的成員可以使用 protected $Pname 這樣就可以使得派生類和基類都能范圍該類的成員。 ===你初始化$student=new Student('1','zhangsan','18','男','9月23');後 不用重載parent::IT(); 這樣只能echo出父類的那句話。。你要的是覆蓋的效果 所以直接echo "$this->Pname 的工作是學生<br>"; 就可以了
Ⅱ PHP中類的繼承是有什麼用處哪位有案例分析一下謝謝
我們可以寫一些公共類,讓其他類繼承,
比如程序中經常會用到的一些邏輯或演算法或公共方法
將他們包進類裡面,可以提升程序的效率,減少代碼的重復
Common.class.php
<?php
/**
*公共處理類
*/
classCommon{
protected$DB;
publicfunction__construct(){
session_start();
$this->DB=mysql_connect('localhost','root','')ordie('Couldnotconnecttoserver');
mysql_select_db('wordpress',$this->DB)ordie('Couldnotselectdatabase');
}
?>
Register.class.php
<?php
requireClASSPATH.'Common.class.php';
classRegisterextendsCommon{
}
望採納 Thx
Ⅲ php中靜態類的繼承
樓主這個問題跟靜態沒有多大關系,主要是繼承的概念沒有搞清楚,繼承一個類是將子類擁有了調用父類的方法和屬性的權利,並不是說將父類的方法復制到了子類中self方法相當於當前類的指針,你那樣調用相當於寫了
public static function test() {
parent::who();
}
這樣的代碼,所以才會出現那樣的結果
Ⅳ 細說php 抽象類能不能被繼承 php
當然可以。
它的作用就是規定好方法,讓別人繼承來實現方法,這是一種代碼管理手段。
抽象類的方法,沒有方法體,繼承該抽象類的類必須實現所有抽象類定義的類。
Ⅳ 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()的屬性,還可以定義自己的屬性。與此同時他長的就和他兄弟不同了,但又有一樣的「血統(使用父類的方法)」。
Ⅵ 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()魔術方法來模擬屬性的繼承。請你動手實踐。
Ⅶ php 繼承父類 怎麼調用父類的方法
直接
$this->parent_function($parameter)
或者
parent::parent_function($parameter)
Ⅷ php繼承問題
這個問題有意思 .
我覺得大家可能沒明白樓主的意思,private 不能被繼承,這個我想沒什麼爭議。
樓主在 A 中定義了一個 private 和 protect ,B 繼承 A ,但為空類,按理說 A 中的 private $priv 不會被 B 繼承,但為何在創建對象 $b = new B("b_1", "b_2"); $priv 卻能被賦值並且在後面有輸出?按理說 B 類中不應該有 $priv 啊?就算函數被重載了,但哪來的 $priv 變數呢?如果說是引用了父類中的 $priv ,那為何不見 parent::$priv 這樣的形式呢?
Ⅸ php如何通過子類繼承父類共有方法訪問父類私有屬性
在父類中加個public方法,
如private $aaa = 'test';
public function getAAA(){
return $this->aaa;
}
在子類中調用parent::getAAA();就可以獲得父類私有屬性
當然如果你想獲取多個,可以改成動態變數名,
getAAA($v){
return $this->{$v};
}
Ⅹ php類繼承,方法不能繼承
你的$name是私有的,無法繼承,要protected才能繼承