2012-08-30 58 views
-1

代碼: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); 

我有一些功能,如isQuestion1isQuestion2isQuestion3等等......我調用另一個功能 * getAllQuestions *將返回我的問題,所有的數字陣列中的像1,2,3,4,5 ...然後我用上面的代碼檢查每個函數是否是基於查詢的問題

+1

將它換成大括號'$ this-> isQuestion {$ q}($ query)' –

回答

1

好了,下面是無效的語法:

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

試試這個:

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

'$ mehtod'周圍的方括號是多餘的,並且不需要:http://codepad.org/joagmyXQ - 也是一個foreach數組,如果你只是在成功時返回,那麼你不需要檢查數組。我編輯了這個問題。 – hakre

+0

@hakra我同意'if($ result = blah()){return $ result; }儘管如此,我仍然會保留方括號:它變得更加明顯,因爲你調用了一個動態命名的函數,所以爲了清晰起見,我添加了它。儘管如此,你的改善似乎很穩固 –

+0

好的變量函數在PHP中很常見 - 並且有文檔記錄。但他們需要以'$'開頭。或者您現在使用編輯中的方括號。變量函數在這裏僅供參考:http://php.net/manual/en/functions.variable-functions.php – hakre

2

問題出在您的方法isQuestion$q

$表示變量的開始並使解釋器混淆。

寫像這樣:

isQuestion{$q}

大括號允許你插入一個變量爲一個字符串(或任何與字符串表示)。閱讀Curly braces in string in PHP瞭解更多信息。

+0

鏈接是關於錯誤的東西。這不是關於雙引號的字符串。不幸的是,大括號(雙引號字符串之外)的這種用法或多或少沒有在PHP手冊中記錄。比較[成員變量的PHP大括號語法](http://stackoverflow.com/questions/1147937/php-curly-brace-syntax-for-member-variable),它也給出了錯誤的鏈接。 - [PHP Variable Names:Curly Brace Madness](http://cowburn.info/2008/01/12/php-vars-curly-braces/) – hakre

+0

@hakra事實上,它是補充信息,因爲我假設OP還沒有遇到大括號。我也無法在PHP文檔中找到任何內容。 –

0

如果您需要致電與動態命名功能,看看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 true; 
} 

更換

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

一般來說它可能是更好的創建interfaceQuestion,並與問題的情況下,一個array要問。

相關問題