『壹』 php __construct 傳參問題
$std = new student(100);//傳入scores
另外student的構造函數應該這樣寫
function __construct($num)
{
parent::__construct('someone',24,'123445');//調用父類的構造函數完成初始化
$this->scores = $num;
}
至於父類的構造函數參數可以從student類傳進瞎埋來,像這樣
function __construct($name,$age,$tel,$num)
或磨早螞者只有一個參數的話使用數睜森組傳入,像這樣
function __construct($arg)
{
parent::__construct($arg['name'],$arg['age'],$arg['tel']);//調用父類的構造函數完成初始化
$this->scores = $arg['num'];
}
echo $stu->name;//這句為什麼列印不出來?
是$std吧?
『貳』 php中parent::__construct()是什麼意思
調用父類的構造函數:
class A {
public $name; //名字
function __construct($name){ //構造函數
$this->name = $name;
}
function test(){
echo $this->name;
}
}
//派生類
class B extends A{
function __construct(){
parent::__construct("測試"); //調用或者說繼承父類的構造函數:
self::test();
}
}
$b = new B();
『叄』 php繼承一個父類,如何自動執行父類方法
你在父類寫一個成員函數 然後子類繼承 創建子類對象的時候 可以點出來父類的成員函數
比如
Student zs = new Student();
zs.SayHello() //點出來的是從父類的繼承來的成員函數
輸出結果為父類的->我是人類
publicclassPerson
{
publicvoidSayHello()//這只是父類的SayHello
{
echo"我是人類";
}
}
publicclassStudent:Person//已經繼承了Person父類
{
//我什麼都沒寫
}
『肆』 PHP子類能否繼承父類的構造方法
1. new son 這個類的時候,會先調用 基類 father 的構造函數2.基類構造函數 又調用 init(); 所以輸出father3.private 只能限制son 不能直接訪問father類 init,但是不能限制 基類調用 自身的private 方法
『伍』 PHP繼承的問題,調用父類的方法this指向問題。
我來說一說:
【一】…………public(僅有)屬性和方法的繼承…………
classa{
public$var='vara<br/>';
publicfunctionm(){
echo'funa<br/>';
}
publicfunctionrun(){
echo$this->var;
$this->m();
}
}
classbextendsa{
public$var='varb<br/>';
publicfunctionm(){
echo'funb<br/>';
}
}
$li=newb();
$li->run();
echo'<hr>';
var_mp($li);
輸出:
varb
funb
————————————————————————————
object(b)[1]
public'var'=>string'varb<br/>'(length=11)
在這段代碼中所表示的,是我們常見的一種繼承方式,同為公有屬性的$var 和公有方法m()
在這里,$var和m()都被繼承並覆寫,實例化過後,內存中只有一個$var實例,通過var_mp($li);我們可以看到它。
【二】…………private(私有)屬性和方法的繼承…………
classa{
private$var='vara<br/>';
privatefunctionm(){
echo'funa<br/>';
}
publicfunctionrun(){
echo$this->var;
$this->m();
var_mp($this);
echo'<br/><br/>';
}
}
classbextendsa{
private$var='varb<br/>';
privatefunctionm(){
echo'funb<br/>';
}
publicfunctionrun(){
echo$this->var;
$this->m();
var_mp($this);
echo'<br/><br/>';
parent::run();
}
}
$li=newb();
$li->run();
echo'<hr>';
var_mp($li);
輸出:
varb
funb
object(b)[1]
private'var'=>string'varb<br/>'(length=11)
private'var'(a)=>string'vara<br/>'(length=11)
.
.
vara
funa
object(b)[1]
private'var'=>string'varb<br/>'(length=11)
private'var'(a)=>string'vara<br/>'(length=11)
.
————————————————————————————————
object(b)[1]
private'var'=>string'varb<br/>'(length=11)
private'var'(a)=>string'vara<br/>'(length=11)
這個時候,我們可以看到,在調用run方法時,首先它會調用到b類的私有屬性$var 和私有方法m(),隨後,又使用parent::run()調用父類的run()方法,我們可以看到,父類的run()方法調用後,它所調用的屬性和方法,都是a類的兩個私有屬性和方法,這種形式,和你的問題一致;
而它與$this指向無關,我們可以在這里看到,兩個$this都是指向b類。
而最有意思的是,在$li句柄中,我們卻看到了兩個屬性!一個是b類的屬性,一個是a類的屬性,這兩個屬性同時存在著,那麼,私有方法也自然是同時存在著。
【三】…………私有屬性和方法能不能被繼承…………
classa{
private$var='vara<br/>';
privatefunctionm(){
echo'funa<br/>';
}
}
classbextendsa{
publicfunctionrun(){
echo$this->var;
$this->m();
}
}
$li=newb();
$li->run();
輸出:
Notice:Undefinedproperty:b::$varinE:...onLine9
Fatalerror:Calltoprivatemethoda::m()fromcontext'b'inE:...onLine10
這可以證明,私有屬性和方法,無法被繼承,所以,你的代碼示例中所說,將a類的m()方法更改為private後,會顯示aa的屬性,也就可以理解明白了。
『陸』 php中,調用父類的構造函數一定要用parent:__construct()嗎用this->__construct()行嗎
子類 還用調用父類的 構造函數?如果沒有參數 實例化子類 就可以 了 還有 繼承過來 的 肯定用parent了
『柒』 請問在php中parent::__construct()有什麼作用
你的 CommonController 已經 繼承了 Controller,
所以 parent::__construct(); 就是執行父類的構造方法。
這么做是因為子類中寫了構造方法會覆蓋父類的構造方法導致父類的構造方法不能自動執行,所以在子類中的構造方法中手動執行父類的構造方法。