Ошибка синтаксиса php, неожиданный T_VARIABLE

код:

public function isQuestion($query){

    $questions = $this->getAllQuestions();

    if (count($questions)){
            foreach ($questions as $q){
                if ($this->isQuestion$q($query)){
                    return $this->isQuestion$q($query);
                }
            }
        }

    return false;
}

Ошибка:

Parse error: syntax error, unexpected T_VARIABLE in /Applications/XAMPP/xamppfiles/htdocs/ai/application/models/question_model.php on line 7

проблема возникает на

if ($this->isQuestion$q($query)){

return $this->isQuestion$q($query);

У меня есть некоторые функции, такие как isQuestion1, isQuestion2, isQuestion3 и т.д.... и я вызываю еще одну функцию * getAllQuestions *, который вернет мне все числа вопросов в массиве вроде 1,2,3,4,5..., затем я использую приведенный выше код, чтобы проверить, является ли каждая функция вопросом на основе запроса

Ответы

Ответ 1

Ну, следующий недопустимый синтаксис:

if ($this->isQuestion$q($query)){

Попробуйте это вместо:

foreach ($questions as $q) {
    if ($result = $this->{'isQuestion' . $q}()) {
        return $result;
    }
}
return false;

Ответ 2

Проблема заключается в вашем методе isQuestion$q.

$ обозначает начало переменной и путает интерпретатор.

Напишите его так:

isQuestion{$q}

Кудрявые фигурные скобки позволяют вставлять переменную в строку (или что-либо со строковым представлением). Подробнее читайте фигурные скобки в строке в PHP.

Ответ 3

Если вам нужно вызвать функцию с динамическим именем, посмотрите http://de2.php.net/manual/en/function.call-user-func-array.php или http://de2.php.net/manual/en/function.call-user-func.php

Возможно, вы захотите убедиться, что этот метод действительно существует, чтобы избежать фатальных ошибок: http://de2.php.net/manual/en/function.method-exists.php

Также проверьте, хотите ли вы заменить

if ($this->isQuestion$q($query)){
    return $this->isQuestion$q($query);
}

с

if ($this->isQuestion$q($query)){
    return true;
}

В общем случае может быть лучше создать interface Question и провести array с запросами вопроса.