【问题标题】:Using a define (or a class constant) to call a variable method?使用定义(或类常量)调用变量方法?
【发布时间】:2012-11-10 06:58:27
【问题描述】:

有没有可能:

define('DEFAULT_METHOD', 'defaultMethod');

class Foo
{
    public function defaultMethod() { }
}

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

或者我必须:

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

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

【问题讨论】:

  • 为什么是常量? $foo->defaultMethod() 不是更容易吗?
  • 我需要这样做,但我不确定人们是否会希望我粘贴我的整个代码并解释整个故事,所以我只保留了解释我需要知道的内容的最低要求。

标签: php variables methods call


【解决方案1】:

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

$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'}();

【讨论】:

  • 谢谢!不知道这个。有一天可能会派上用场 :) EDIT :我的意思是类常量:class Foo { const BAR = 'Baz'; }
  • 很好的解释!这看起来像一个赢家:)
【解决方案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();
?>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-03-19
    • 2013-12-21
    • 2015-08-03
    • 1970-01-01
    • 1970-01-01
    • 2011-04-20
    • 1970-01-01
    相关资源
    最近更新 更多