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,但是还是会有正确结果哟