function_exists返回false但声明抛出错误

时间:2012-02-16 17:38:08

标签: php oop function fatal-error

在PHP 5.3.6中,我有一个类,其方法如下:

public function chunkText()
{
  if(!function_exists('unloadChunkText')) {
     function unloadChunkText() {
        . . .
     }
  }
  . . .
}

其中unloadChunkText是chunkText的辅助方法。问题是每当我调用$ obj-> chunkText()时,我都会收到此错误:

  

无法重新声明诊断\ question \ unloadChunkText()(之前   声明   file.php:的 34 )   在file.php中   在线 34

为什么function_exists不告诉我这个功能已经存在?

3 个答案:

答案 0 :(得分:2)

您正在检查全局函数unloadChunkText,而不是特定于命名空间的函数diagnostic\question\unloadChunkText。但我怀疑你的方法存在缺陷。

如果您的方法chunkText()有辅助函数,请使用以下两种方法之一进行定义:

作为闭包:

public function chunkText()
{
  $unloadChunkText = function () {
    // . . .
  };
  // . . .
  // Call it like $unloadChunkText()
}

作为对象的私有方法:

private function unloadChunkText ()
{
  // . . .
}

public function chunkText()
{
  // . . .
  // Call it like $this->unloadChunkText()
}

将其定义为私有方法可能更有意义,因此每次拨打chunkText()时都不会浪费时间重新定义它。

答案 1 :(得分:2)

function_exists()

中提供范围
function_exists('diagnostic\question\unloadChunkText')

答案 2 :(得分:0)

使用function_exists的东西是你不能为它提供范围。请尝试使用is_callable,而回调将是array($this, 'unloadChunkText')

或者,method_exists是另一种可能性。 method_exists($this, 'unloadChunkText')