php父类调用子类属性,PHP怎么在父类方法中调用子类private属性

在PHP编程中,尝试从父类调用子类的私有(private)方法会导致错误,因为私有方法仅在定义它的类内部可见。尽管method_exists函数确认了方法的存在,但权限限制阻止了实际调用。这段代码示例展示了这一问题,当尝试通过魔术方法__get访问私有属性时,服务器返回500错误。理解类的访问修饰符和方法调用规则对于避免此类错误至关重要。
摘要由CSDN通过智能技术生成

我想在父类中调用子类的private属性,但是报500错误。

class A

{

public function __get($name)

{

$getter = 'get' . $name;

if (method_exists($this, $getter))

{

return $this->$getter();

}

}

}

class B extends A

{

private function getname()

{

return 'karly';

}

}

$b = new B();

echo $b->name;

这段代码运行后服务器报500错误,为什么调用method_exists返回结果是true了,还是不能return该方法?谢谢。

回复内容:

我想在父类中调用子类的private属性,但是报500错误。

class A

{

public function __get($name)

{

$getter = 'get' . $name;

if (method_exists($this, $getter))

{

return $this->$getter();

}

}

}

class B extends A

{

private function getname()

{

return 'karly';

}

}

$b = new B();

echo $b->name;

这段代码运行后服务器报500错误,为什么调用method_exists返回结果是true了,还是不能return该方法?谢谢。

首先按照php官方文档的说法:

public 表示全局,类内部外部子类都可以访问;

private表示私有的,只有本类内部可以使用;

protected表示受保护的,只有本类或子类或父类中可以访问;

其次method_exists的意义为在测试是否存在,问题是人家真的存在,只是没有权限而已,这并没有什么问题。

综上你这里应该用protected

private的成员方法貌似只能自身调用

相关标签:php

本文原创发布php中文网,转载请注明出处,感谢您的尊重!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值