导航:首页 > 编程语言 > php调用父类的方法吗

php调用父类的方法吗

发布时间:2023-03-15 06:58:04

‘壹’ 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子类可以继承和访问父类的私有属性和方法吗

你这样理解也可以,当父类有私有的方法和属性,子类是继承不到的,所以子类不能访问父类的私有方法和属性。java
特性,private:类中只要限定为private的成员,只能被这个类本身访问

‘叁’ PHP子类怎么调用父类的属性

父类的Pname

private
类型,也就是私有的只能父类自己的
函数调用
,子类以及外部是无法调用的。
如果这个变量只允许本类方法调用
应该用
private
方式调用,如果允许本类以及子类调用应该用
protected
保护)修饰,如果希望外部调用则应该用
public
公开修饰。这三个关键词对函数同样有效。
我把php.net关于这个的说明放在下面参考资料里面了,你可以仔细看下。

‘肆’ php继承一个父类,如何自动执行父类方法

你在父类写一个成员函数 然后子类继承 创建子类对象的时候 可以点出来父类的成员函数


比如

Student zs = new Student();

zs.SayHello() //点出来的是从父类的继承来的成员函数

输出结果为父类的->我是人类

publicclassPerson
{
publicvoidSayHello()//这只是父类的SayHello
{
echo"我是人类";
}
}

publicclassStudent:Person//已经继承了Person父类
{
//我什么都没写
}


‘伍’ PHP 静态方法怎么调用父类非静态方法

子类的静态方法里面实例化父类,然后调用父类的非静态方法。
因为子类的静态方法调用父类的方法需要使用parent::函数名()或有可能是self::函数名(),子类的静态方法使用parent::函数名()或有可能是self::函数名()时这个函数名()必须是父类里面的一个静态方法,如果不是静态方法,会报错Strict Standards: Non-static method parentClass::b() should not be called statically,但是还是会有正确结果哟

阅读全文

与php调用父类的方法吗相关的资料

热点内容
为什么要编译源代码 浏览:819
输入法freetype交叉编译 浏览:436
电阻单片机代号 浏览:469
来画app怎么添加对话框 浏览:318
python序列化分布式 浏览:107
域名服务器是什么形式 浏览:681
rsa加密解密速度快 浏览:924
mac电脑如何单片机开发 浏览:547
纪念日app怎么用小插件 浏览:331
如何更改安卓手机所在地区 浏览:217
程序员负债120万 浏览:80
阶层pdf 浏览:380
linuxgit安装配置 浏览:319
用源码搭建app要改什么 浏览:42
密码学教程pdf 浏览:3
亚马逊做的加密货币 浏览:81
怎么搭建云播服务器 浏览:867
网站客服机器人源码 浏览:317
2021程序员的出路 浏览:547
发行与承销pdf 浏览:945