PHP-_call()混乱
我对PHP-_call()混乱,php,Php,我对\u call()有些困惑,我搜索到的所有信息都告诉我它应该可以工作 <?php class A { abstract public function C(); private function B(){ echo "B"; } public function __call($method,$arguments){ if(method_exists("C", $method)) { $thi
\u call()
有些困惑,我搜索到的所有信息都告诉我它应该可以工作
<?php
class A {
abstract public function C();
private function B(){
echo "B";
}
public function __call($method,$arguments){
if(method_exists("C", $method)) {
$this->B();
return call_user_func_array(array("C",$method),$arguments);
}
}
}
class B extends A{
public function C(){
echo "C";
}
}
$b = new B();
$b->C();
//the result I get:
// C
//the result I want;
// BC
?>
所以,我想要的结果是,我调用函数C
,但是B
首先得到它的回声。它在某个时候起了作用,甚至,我真的对正在发生的事情感到困惑。php手册对此也不是很清楚,至少不是我想做的
注意:最令人困惑的是,上面的调用方法不再是responsive,如果我在其中执行测试消息,就不会打印它
正如我所说的,我在某个神奇的时刻让它发挥作用。有人能指出我做错了什么吗,或者有可能吗?(随着时间的推移,我已经更改了一些内容,因此这可能会改变场景。\u call()仅在函数未指定/不可访问时调用。)--
见:
你不能做你想做的事。我认为你混淆了
\uu call
的作用。这是用于不可访问的方法。所以让我们看A
class A {
abstract public function C();
private function B(){
echo "B";
}
public function __call($method,$arguments){
if(method_exists("C", $method)) {
$this->B();
return call_user_func_array(array("C",$method),$arguments);
}
}
}
现在,您的B()
是private
,但您孩子的C()
不是
class B extends A{
public function C(){
echo "C";
}
}
问题是您的代码从未触及B()
方法。您正在调用B()
类
$b = new B();
$b->C();
要让\u呼叫工作,您需要执行以下操作
$b = new B();
$b->B(); // invokes __call()
请显示您实际调用这些的代码functions@Machavity我已经添加了您要求的内容,这就是我的场景。\u call()在对象上下文中调用不可访问的方法时被触发。
您的C()没有任何不可访问的内容
method@MarkBaker我现在明白了,有没有可能用其他方法实现我想要的?好的,谢谢。根本不可能实现我想要的吗?我的意思是没有其他方法吗?好的,好的,我可以用这个!谢谢,因为滴度已经表明我对这个方法有点困惑。