function_exists возвращает false, но объявление выдает ошибку - PullRequest
2 голосов
/ 16 февраля 2012

В 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 ]

2 голосов
/ 16 февраля 2012

Укажите область действия в пределах function_exists():

function_exists('diagnostic\question\unloadChunkText')
2 голосов
/ 16 февраля 2012

Вы проверяете глобальную функцию 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().

0 голосов
/ 16 февраля 2012

Функция function_exists заключается в том, что вы не можете предоставить область действия для нее. Попробуйте использовать is_callable вместо этого, где обратный вызов будет array($this, 'unloadChunkText')

Или, method_exists - это еще одна возможность. method_exists($this, 'unloadChunkText')

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...