❶ 請問在php中parent::__construct()有什麼作用
你的 CommonController 已經 繼承了 Controller,
所以 parent::__construct(); 就是執行父類的構造方法。
這么做是因為子類中寫了構造方法會覆蓋父類的構造方法導致父類的構造方法不能自動執行,所以在子類中的構造方法中手動執行父類的構造方法。
❷ PHP類繼承的問題,子類繼承父類,實例化子類,先執行父類還是先執行子類
不是這個意思。所謂「實例化子類的對象前要先實例化父類中的內容,為父類初始化」,是指當子類正在實例化時,總是鏈式調用父類構造方法初始化父類空間。換句話說,子類的構造方法必須先調用父類的構造方法,完了才能幹別的初始化工作。如果子類沒有顯式調用語句,編譯器會隱式幫你加上。
如:
public class A{ public A() { }}public class B extends A{ public B() { }}等價於:
public class A{ public A() { super();//這里實際上是Object(); //其他初始化工作 }}public class B extends A{ public B() { super();//這里實際上是A(); //其他初始化工作 }}另外,如果有這種情況:
public class A{ X x=new X(); public A() { }}public class B extends A{ Y y=new Y(); public B() {//這是類A空間里的欄位都已經初始化完畢。 }}在成員y被賦值之前,x一定已經存在。換句話說,X x=new X();一定先於Y y=new Y();執行。
❸ PHP子類怎麼調用父類的屬性
<?php
class Perpon {
private $Pid;
private $Pname;
private $Page;
private $Psex;
private $Pbirthday;
public function __construct($Pid,$Pname,$Page,$Psex,$Pbirthday)//PHP5中間的構造函數
{ $this->Pid=$Pid;
$this->Pname=$Pname;
$this->Page=$Page;
$this->Pbirthday=$Pbirthday;
echo "創建了一個對象"."<br>";
}
public function __set($name,$value) {
$this->$name=$value;
}
function show(){
echo ("我的姓名:$this->Pname,我的年齡:$this->Page,我的性別是:$this->Psex,我的生日是$this->Pbirthday <br>"); }
public function __get($name) { return $name; }
public function dining() { echo "$this->Pname 正在吃飯 <br>"; }
public function shuohua() { echo "$this->Pname喜歡說話 <br>"; }
public function gaosu() { echo "我的姓名叫做$this->Pname <br>"; }
public function IT() { echo $this->Pname."的工作是IT行業 <br>"; }
}
class Student extends Perpon {
public function __construct()//PHP5中間的構造函數
{ echo "子類的構造函數"; }
public function IT()//PHP5中間的構造函數
{ parent::IT();
echo $this->Pname."的工作是學生<br>";
}
}
$perpon=new Perpon('1','zhangsan','18','男','9月23'); $perpon->show(); $perpon->dining(); $perpon->shuohua(); $perpon->gaosu(); $perpon->IT();
echo "<hr>";
$student=new Student(); $student->IT();?>
調不到的原因是:
private $Pname;
記住:private只能自己調用,其他是不行的,這一點你自己記住即可。
❹ php 子類繼承父類的構造方法
調用父類的構造函數,就是說子類的構造函數和父類一樣
❺ php繼承一個父類,如何自動執行父類方法
你在父類寫一個成員函數 然後子類繼承 創建子類對象的時候 可以點出來父類的成員函數
比如
Student zs = new Student();
zs.SayHello() //點出來的是從父類的繼承來的成員函數
輸出結果為父類的->我是人類
publicclassPerson
{
publicvoidSayHello()//這只是父類的SayHello
{
echo"我是人類";
}
}
publicclassStudent:Person//已經繼承了Person父類
{
//我什麼都沒寫
}
❻ php 子類沒有構造函數會調用父類構造函數嗎
會調用的,試試下面的代碼:
<?php
class f
{
function f()
{echo 'in f';}
}
class z extends f
{
function show()
{echo 'in z';}
}
$z=new z;
$z->show();
?>
❼ PHP子類能否繼承父類的構造方法
1. new son 這個類的時候,會先調用 基類 father 的構造函數2.基類構造函數 又調用 init(); 所以輸出father3.private 只能限制son 不能直接訪問father類 init,但是不能限制 基類調用 自身的private 方法
❽ PHP怎麼在子類用父類的魔術方法
父類的魔術方法:
function __construct()
{
echo '我是父類的構造函數(魔術方法)';
}
function __unset()
{
echo '我是父類的銷毀方法(魔術方法)';
}
子類調用
function index()
{
parent::__construct();
parent::__unset();
}
輸出:
我是父類的構造函數(魔術方法)
我是父類的銷毀方法(魔術方法)
❾ php中子類有構造函數如何調用父類中的構造函數,最好能舉個簡單的例子
class A{
function __contruct($num){
echo "aaa";
}
}
class B extends A{
function __contruct(){
echo "bbb";
A:: __contruct($num) //第一種調用父類構造函數的方法
parent:: __contruct($num) //第二種調用父類構造函數的方法
}
}
❿ 在php中,子類extends繼承了父類,當子類和父類同時存在構造函數__construct先執行哪一個呢
1、如果父類和子類中都沒有顯式的定義__construct,在實例化子類對象時,只會隱含的調用子類自己的構造方法。
2、如果父類中有顯式的構造方法__construct,而子類中沒有定義__construct,在實例化子類對象時,就會調用父類中的構造方法。
3、如果父類和子類中都顯式的定義了__construct,在實例化子類對象時,只會調用子類自己的構造方法(這就像是子類重構了父類的構造方法),而如果也想要調用父類的構造方法的話,就需要在子類的__construct 方法中顯式的調用,(如 __construct(){ parent::_construct();})。
(10)php子類父類構造方法擴展閱讀
子類的構造函數名與子類名相同。
在子類里父類的構造函數不會自動執行。
要在子類里執行父類的構造函數,必須執行類似以下語句:
$this->[父類的構造函數名()]
類的構造函數統一命名為__construct()。
子類的構造函數名也是__construct()(也是廢話)。
在子類里父類的構造函數會不會執行,分兩種情況:
1、如子類不定義構造函數 __construct(),則父類的構造函數默認會被繼承下來,且會自動執行。
2、如子類定義了構造函數 __construct(),因為構造函數名也是__construct(),所以子類的構造函數實際上是覆蓋(override)了父類的構造函數。這時執行的是該子類的構造函數。
這時如果要在子類里執行父類的構造函數,必須執行類似以下語句:parent::__construct();