调用不存在的方法时重定向到其他方法

时间:2011-06-07 16:39:20

标签: php class methods

如果我调用$object->showSomething()并且showSomething方法不存在,则会出现fata错误。没关系。

但是我有一个show()方法接受一个参数。我可以以某种方式告诉PHP在遇到show('Something');时致电$object->showSomething()吗?

3 个答案:

答案 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';