【问题标题】:What is the proper syntax to call a global variable function from within a class?从类中调用全局变量函数的正确语法是什么?
【发布时间】:2015-12-27 08:56:56
【问题描述】:

我正在尝试从一个类中调用一个全局函数。函数的名称包含在类的公共属性之一中。我遇到了一个我设法解决的小语法问题,但我认为解决方法(一个中间变量)不优雅,我正在寻找一种更合适的方法来解决这个问题。

考虑以下代码sn-p:

class Foo {

  public $theFuncName = '';

  public function bar () {
    if ($this->theFuncName != '') {
      $theFuncName = $this->theFuncName;
      $theFuncName ();
    }
  }

}

function myGlobalFunc () {
  echo "This is myGlobalFunc\n";
}

$foo = new Foo ();
$foo->theFuncName = 'myGlobalFunc';
$foo->bar ();

我在 bar() 中使用中间变量 $theFuncName 因为直接引用 $this->theFuncName() 意味着Foo 类包含一个方法 theFuncName,但事实并非如此。

在没有中间变量的情况下调用 $this->theFuncName 的内容所引用的函数的正确语法是什么?

【问题讨论】:

  • 封装的目的是什么?为什么不直接拨打myGlobalFunc()

标签: php function class syntax global


【解决方案1】:

使用call_user_func():

class Foo 
{
    public $theFuncName = '';

    public function bar () 
    {
        if (is_callable($this->theFuncName)) {
            call_user_func($this->theFuncName);
        }
    }
}

参考见

【讨论】:

    猜你喜欢
    • 2016-12-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-12-08
    • 1970-01-01
    • 1970-01-01
    • 2020-02-16
    相关资源
    最近更新 更多