2012-12-16 63 views
2
include ($_GET['p'] == 'home') ? 'pages/home.php' : NULL; 

給出了錯誤:三元操作員錯誤include()函數

Notice: Undefined index: p in /var/www/index.php on line 38
Warning: require(): Filename cannot be empty in /var/www/index.php on line 38
Fatal error: require(): Failed opening required '' (include_path='.:/usr/share/php:/usr/share/pear') in /var/www/index.php on line 38

我明白未定義的索引,但爲什麼我得到其他錯誤?此行:

include (!isset($_GET['p'])) ? 'pages/home.php': NULL; 

工作正常。請注意,第一個代碼將在if語句中正常工作(除了我明白的未定義索引外)

+0

通知是非常低的水平。大多數人不理會他們,或者如果他們得到一對夫婦(我贊成或反對),他們不會感到困擾。致命的錯誤是問題所在。 –

+0

錯誤說需要,你的代碼包含。請解決你的問題,顯然是提供了錯誤的信息。此外,錯誤信息非常清晰。我想知道哪些部分對你來說是不可理解的。很高興知道給出更好的答案。我們還在網站上提供了一些可能對您有用的參考資料:[參考 - 這個錯誤在PHP中意味着什麼?](http://stackoverflow.com/q/12769982/367456) - 它還涵蓋了您擁有的所有消息給出。 – hakre

+0

感謝您的鏈接。我正在使用include,不需要 - 即使輸出的錯誤與require有關。 – tgun926

回答

6

include需要一個字符串,表示要包含的文件的路徑。所以NULL will get converted to string that results in an empty string。因此,包含由空字符串引用的文件會導致警告。

只需使用一個if代替:

if (!isset($_GET['p'])) { 
    include 'pages/home.php'; 
} 
+0

哦,所以PHP中的三元運算符會在繼續之前檢查兩個案例嗎?謝謝 – tgun926

+0

@helpabeginner編號這主要是因爲條件表達式返回'null',以防''_GET ['p'] =='home''條件錯誤。這將導致你觀察到的情況。 – Gumbo

+0

這很有道理,謝謝! – tgun926

0

請不要那樣做!嘗試這樣的代替:

(isset($_GET['p']) && $_GET['p'] === 'home') ? include 'pages/home.php' : ''; 
+0

這段代碼沒有很好的理由,對評估表達式'''有無用的副作用。 –

+0

@Jack我通常會同意你的觀點,然而OP顯然希望他的代碼在一行上。否則,他們不會使用三元語句來完成簡單的if語句。 – PhearOfRayne

+0

這段代碼不起作用,'include'不是一個函數。 – hakre