php調用父類變數
『壹』 php子類怎麼調用父類方法
<?php
classA{
staticpublic$m=1;
staticpublicfunctionm(){
echostatic::$m,'';
}
staticpublicfunctionn(){
static::n();
}
publicfunctionl(){
echo'父類方法';
}
}
classBextendsA{
staticpublic$m=111;
staticpublicfunctionm(){
parent::m();
}
staticpublicfunctionn(){
echoparent::$m,'';
}
}
B::m();
B::n();
$b=newB();
$b->l();
『貳』 PHP子類怎麼調用父類的屬性
父類的Pname
是
private
類型,也就是私有的只能父類自己的
函數調用
,子類以及外部是無法調用的。
如果這個變數只允許本類方法調用
應該用
private
方式調用,如果允許本類以及子類調用應該用
protected
保護)修飾,如果希望外部調用則應該用
public
公開修飾。這三個關鍵詞對函數同樣有效。
我把php.net關於這個的說明放在下面參考資料裡面了,你可以仔細看下。
『叄』 php取父類裡面的變數只能用$this嗎
這個要分的, 變數有兩種,還有一種是靜態變數。
如果像你說的訪問對象中的變數,就必須使用$this, 如果訪問靜態變數可以使用 [ :: ] (兩個冒號)
你看:
classP{
protected$name='Zhang';
}
classCextendsP{
functionget(){
return$this->name;//獲取本對象中的變數,如果沒有則從父類中獲取
}
}
如果獲取昌做靜態變數就不能使用 this 了,因為靜態方法中沒有實例,可以通過你說的方式來獲取
classP{
高核static$name='Zhang';
}
classCextendsP{
staticfunctionget(){
returnself::$name;//獲取本類中的name,如果沒有從父類中獲取
}
staticfunctionget2(){
returnparent::$name;//直接獲取父類中的name戚迅掘等價於:P::$name;
}
}
『肆』 php中子類有構造函數如何調用父類中的構造函數,最好能舉個簡單的例子
class A{
function __contruct($num){
echo "aaa";
}
}
class B extends A{
function __contruct(){
echo "bbb";
A:: __contruct($num) //第一種調用父類構造函數的方法
parent:: __contruct($num) //第二種調用父類構造函數的方法
}
}
『伍』 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 子類創建了個屬性如何調用父類屬性的值
classbextendsa{
扮敏轎public$b;
function__construct(){
$this->b=$this->attribute;
廳肆}
}
在屬性定義階拿廳段不能使用你說的那種語句,如果你想使用那種賦值語句的話可以放到構造函數裡面
『柒』 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子類調用父類的常量
<?php
classBase{
constMSG='hello,world!';
}
classSonextendsBase{
staticfunctionshowMsg(){
echoparent::MSG;
}
}
Son::showMsg();//output:hello,world!
『玖』 php怎麼獲取父類函數裡面的變數值
<?php
classA{public$a1='a1';protected$a2='a2';functiontest(){echo"hello!<hr/>";}}
classBextendsA{//若A類和B類不在同一文件中請包含後(include)再操作
public$a1='b1';functiontest2(){$this->test();parent::test();//子類調用父類方法}
functiontest()
{echo$this->a1.',';echo$this->a2.',';echo"b2_test_hello<hr/>";}}
$a=newB();$a->test();//b1,a2,b2_test_hello
$a->test2();//b1,a2,b2_test_hello//hello!
?>
方法的調用:$this->方法名();如果子類中有該方法則調用的是子類中的方法,若沒有則虛絕是調用父類滾豎中的
parent::則始終調用的是父類中的方法。
變數的調用:$this->變數名;如果子類中有該變大譽大量則調用的是子類中的,若沒有則調用的是父類中的
『拾』 PHP 靜態方法怎麼調用父類非靜態方法
子類的靜態方法裡面實例化父類,然後調用父類的非靜態方法。
因為子類的靜態方法調用父類的方法需要使用parent::函數名()或有可能是self::函數名(),子類的靜態方法使用parent::函數名()或有可能是self::函數名()時這個函數名()必須是父類裡面的一個靜態方法,如果不是靜態方法,會報錯Strict Standards: Non-static method parentClass::b() should not be called statically,但是還是會有正確結果喲