2012-02-16 95 views
1

在PHP 5.3.6我有这样的一个方法的类:function_exists返回false但声明抛出错误

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

哪里unloadChunkText是chunkText一个辅助方法。问题是,每当我调用$ obj-> chunkText()我给出的这个错误:

Cannot redeclare diagnostic\question\unloadChunkText() (previously declared in file.php:34) in file.php on line 34

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

+0

你确定这不是一个变量要么? – 2012-02-16 17:41:32

+2

如果使用'function_exists('diagnostic \ question \ unloadChunkText')'会发生什么? – 2012-02-16 17:44:46

+0

@idiqual是的,积极的不是。 – 2012-02-16 17:46:53

回答

2

您正在检查全局函数unloadChunkText,而不是名称空间专用函数diagnostic\question\unloadChunkText。但我怀疑你在这里的做法是有缺陷的。

作为一个封闭:

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

作为对象的私有方法:

如果你有你的方法chunkText()一个辅助功能,在以下两种方式之一定义它

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

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

将其定义为私有方法可能会使更有意义,所以每次拨打电话chunkText()时都不用浪费时间重新定义。

0

function_exists的事情是你不能为它提供一个范围。尝试使用is_callable代替,其中回调为array($this, 'unloadChunkText')

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

1

提供内function_exists()范围:

function_exists('diagnostic\question\unloadChunkText') 
+0

是否有文档可以通过这种方式指向我为'function_exists'提供范围的方法?我不知道这是可能的! – 2012-02-16 17:50:54

+0

@kavisiegel我也好!这是基于错误信息在黑暗中拍摄的..我在function_exists的手册中找不到有关范围的任何内容。 – 2012-02-16 17:52:02

+0

这回答了我的问题,谢谢。但是,为了简洁起见,最终最终使用DaveRandom的答案修改了我的代码。 – 2012-02-16 17:58:35

相关问题