【问题标题】:PHP syntax error, "unexpected T_VARIABLE" - isQuestion($query) [closed]PHP 语法错误,“意外的 T_VARIABLE”-isQuestion($query) [关闭]
【发布时间】:2012-08-25 00:30:03
【问题描述】:

代码:

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;
}

错误:

解析错误:语法错误,第 7 行 /Applications/XAMPP/xamppfiles/htdocs/ai/application/models/question_model.php 中的意外 T_VARIABLE

问题发生在:

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

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

我有一些函数,如 isQuestion1isQuestion2isQuestion3 等...我调用另一个 函数 getAllQuestions,它将以数组的形式返回所有问题的编号,例如 1,2,3,4,5...

然后我使用上面的代码来检查每个函数是否是基于查询的问题。

【问题讨论】:

  • 用大括号括起来$this->isQuestion{$q}($query)

标签: php syntax-error


【解决方案1】:

问题在于您的方法isQuestion$q

$ 表示变量的开头,会混淆解释器。

这样写:

isQuestion{$q}

花括号允许您将变量插入字符串(或任何具有字符串表示形式的内容)。阅读Curly braces in string in PHP了解更多信息。

【讨论】:

  • 链接是关于错误的事情。这与双引号字符串无关。不幸的是,这种大括号(在双引号字符串之外)的用法在 PHP 手册中或多或少没有记录。比较PHP curly brace syntax for member variable,它也给出了错误的链接。 -- PHP Variable Names: Curly Brace Madness
  • @hakra 事实上,这是补充信息,因为我假设 OP 还没有遇到花括号。我在 PHP 文档中也找不到任何内容。
【解决方案2】:

好吧,以下是无效的语法:

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

试试这个:

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

【讨论】:

  • $mehtod 周围的方括号是多余的,不需要:codepad.org/joagmyXQ - 还有一个带有 foreach 的数组,如果您只是在成功时尽早返回,则不需要先检查计数。我为此编辑了问题。
  • @hakra 我同意if( $result = blah( ) ) { return $result; } 不过,我会保留方括号:它变得 much 更明显的是你正在调用一个动态命名的函数,所以我'为了清楚起见添加了它。不过,你的进步似乎很稳固。
  • 井变量函数在 PHP 中很常见 - 并已记录在案。但他们需要以$ 开头。或者您现在像在编辑中一样使用方括号。变量函数在这里仅供参考:php.net/manual/en/functions.variable-functions.php
  • @hakra 我完全清楚这一点,但它是 $this->{$method}()$this->$method()。两者同样有效,但我认为第一个更明显的是正在调用动态函数。未来的我总是感谢我。最后,这只是风格问题。
  • 是的,您应该远离不需要的东西。例如。对于完整的动态字符,您可以执行$this->{"$method"}() (字符串用法是已知的,对吗?!;))甚至更多。恕我直言,这不是一个好主意。但是风格问题需要时间来解决,所以我希望有一天能在少即是多的营地见到你;)
【解决方案3】:

如果您需要调用具有动态名称的函数,请查看http://de2.php.net/manual/en/function.call-user-func-array.phphttp://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 与要询问的 Question 实例。

【讨论】:

    猜你喜欢
    • 2012-02-26
    • 1970-01-01
    • 2014-02-17
    • 1970-01-01
    • 2013-01-14
    • 1970-01-01
    • 2013-03-10
    • 2012-04-27
    • 1970-01-01
    相关资源
    最近更新 更多