在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不告诉我这个功能已经存在?
答案 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')