1

是否有可能 :

define('DEFAULT_METHOD', 'defaultMethod');

class Foo
{
    public function defaultMethod() { }
}

$foo = new Foo();
$foo->DEFAULT_METHOD();

还是我必须:

$method = DEFAULT_METHOD;
$foo->$method();

那么类常量而不是定义呢?

4

2 回答 2

3

如果使用变量或常量作为方法名,则必须将其放入大括号中:

$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'}();
于 2012-11-21T22:40:39.673 回答
2

您可以先将其设置为变量,如您的示例中所示:)

示例:http ://codepad.org/69W4dYP1

<?php
  define('DEFAULT_METHOD', 'defaultMethod');

  class Foo {
      public function defaultMethod() { echo 'yay!'; }
  }

  $foo = new Foo();
  $method = DEFAULT_METHOD;
  $foo->$method();
?>
于 2012-11-21T22:40:25.993 回答