是否有可能 :
define('DEFAULT_METHOD', 'defaultMethod');
class Foo
{
public function defaultMethod() { }
}
$foo = new Foo();
$foo->DEFAULT_METHOD();
还是我必须:
$method = DEFAULT_METHOD;
$foo->$method();
那么类常量而不是定义呢?
如果使用变量或常量作为方法名,则必须将其放入大括号中:
$foo->{DEFAULT_METHOD}();
相同的技术适用于变量,包括静态类属性:
class Foo {
public static $DEFAULT_METHOD = 'defaultMethod';
public function defaultMethod() { echo "Cool!\n"; }
}
$foo = new Foo();
$foo->{FOO::$DEFAULT_METHOD}();
事实上,几乎可以使用任何产生有效方法名称的表达式:
$foo->{'default'.'Method'}();
您可以先将其设置为变量,如您的示例中所示:)
示例:http ://codepad.org/69W4dYP1
<?php
define('DEFAULT_METHOD', 'defaultMethod');
class Foo {
public function defaultMethod() { echo 'yay!'; }
}
$foo = new Foo();
$method = DEFAULT_METHOD;
$foo->$method();
?>