如果我调用$object->showSomething()
并且showSomething
方法不存在,则会出现fata错误。没关系。
但是我有一个show()
方法接受一个参数。我可以以某种方式告诉PHP在遇到show('Something');
时致电$object->showSomething()
吗?
答案 0 :(得分:8)
尝试这样的事情:
<?php
class Foo {
public function show($stuff, $extra = '') {
echo $stuff, $extra;
}
public function __call($method, $args) {
if (preg_match('/^show(.+)$/i', $method, $matches)) {
list(, $stuff) = $matches;
array_unshift($args, $stuff);
return call_user_func_array(array($this, 'show'), $args);
}
else {
trigger_error('Unknown function '.__CLASS__.':'.$method, E_USER_ERROR);
}
}
}
$test = new Foo;
$test->showStuff();
$test->showMoreStuff(' and me too');
$test->showEvenMoreStuff();
$test->thisDoesNothing();
<强>输出强>:
StuffMoreStuff and me tooEvenMoreStuff
答案 1 :(得分:2)
不一定只是show....
方法,但任何方法,是的,使用__call。检查函数本身询问的方法。
答案 2 :(得分:1)
您可以使用method_exists()功能。例如:
class X {
public function bar(){
echo "OK";
}
}
$x = new X();
if(method_exists($x, 'bar'))
echo 'call bar()';
else
echo 'call other func';