我的问题是这个,我有一个存储在数组中的函数,该数组是类的一部分。我想使用call_user_func()
从这个数组调用一个函数,但我似乎无法弄清楚如何写这个。
从类不在类中的数组调用函数可以这样做。
$thearray = array( 0 => 'funcone', 1 => 'functwo');
call_user_func($thearray[0]);
然而,当我尝试对一个类中的数组执行此操作时,它确实发送了工作,我想是因为我需要以某种方式引用该类。我知道你可以从这样的类调用函数:
call_user_func(array($myclass, 'funcone'));
但我的问题是如何通过使用call_user_func()
来调用类中的一个函数?我希望有人可以帮助我,我有一种感觉,这只是它的写作方式。
答案 0 :(得分:2)
假设班级中的数组是公开的,你可以这样做:
call_user_func(array($myclass, $myclass->thearray[0]));
这回答了你的问题吗?
更新:
我尝试了以下内容并且有效:
<?php
class Foo {
public function bar() {
echo "quux\n";
}
public $baz = array('bar');
}
$foo = new Foo();
call_user_func(array($foo, $foo->baz[0]));
shell$ php userfunc.php
quux
答案 1 :(得分:0)
答案 2 :(得分:0)
请耐心等待,因为它会有点长。 :)
嗯,我认为我们可以通过PHP的overloading
概念实现这一点,正如大多数人所知,这与其他面向对象语言完全不同。
从PHP手册的重载页面 - Overloading in PHP provides means to dynamically "create" properties and methods. These dynamic entities are processed via magic methods one can establish in a class for various action types.
(http://www.php.net/manual/en/language.oop5.overloading.php)
这种重载魔法的大部分依赖于PHP的magic methods
如果您看到魔术方法列表,那么可以帮助我们的方法是__call()
每次调用不存在的类方法时,都会调用魔术方法__call。
这有助于我们防止丢失任何错误/设置任何自定义消息。所以,这是一个我们可以用来解决上述问题的例子。
<?php
class Test
{
private $arr = array( 'funcone', 'functwo' );
public function __call( $func_name, $func_args ) {
echo "Method called: " . $func_name . "\n";
echo "Arguments passed: " . $func_args . "\n";
// this will call the desired function.
call_user_func( array( $this, $this->arr[ $func_args ] ) );
}
}
$obj = new Test;
// run the first function in the array
$obj->runTest(0);
?>
希望有所帮助。如果这不起作用,我相信它可以通过一些试验和错误进行调整。 (现在,我说的是PHP,对吗?调整......;))