1

次のことは可能ですか?

define('DEFAULT_METHOD', 'defaultMethod');

class Foo
{
    public function defaultMethod() { }
}

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

または、私はしなければなりません:

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

そして、 define の代わりにクラス定数はどうですか?

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

You could set it to a variable first as in your example :)

Example: 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 に答える