2009-10-20 35 views
2

我有以下代碼:PHP包含與多個奇怪行爲包括

if (include_once(dirname(__FILE__).'/file.php') 
    || include_once(dirname(__FILE__).'/local/file.php') 
    ) 
{ 

因爲PHP試圖包括"1"(大概dirname(__FILE__).'/file.php' || dirname(__FILE__).'/local/file.php'

注出第二行使得這項工作作爲這將導致一個錯誤打算,除了它不會使用第二個文件的事實。我真的需要在這裏使用elseif和代碼重複,還是有辦法讓這個工作?

$ PHP --version
PHP 5.2.6-3ubuntu4.2用了Suhosin貼片0.9.6.2(CLI)(建:2009年8月21日19點14分44秒)
版權所有(C)1997年 - 2008 PHP集團
Zend引擎V2.2.0,版權所有(C)1998-2008 Zend技術

回答

4

集團include聲明:

if ((include_once dirname(__FILE__).'/file.php') 
     || 
    (include_once dirname(__FILE__).'/local/file.php') 
    ) 

example #4在手冊頁:

<?php 
// won't work, evaluated as include(('vars.php') == 'OK'), i.e. include('') 
if (include('vars.php') == 'OK') { 
    echo 'OK'; 
} 

// works 
if ((include 'vars.php') == 'OK') { 
    echo 'OK'; 
} 
?> 
+0

這是......反直覺的,至少可以說。一千個關於PHP的'語言結構'的詛咒。 –

+0

的確,但這是PHP的主要特徵之一:)。無論如何,我只是將語句的返回值賦給一些臨時變量,並將其用於'if'測試中。 –

+0

好吧,我不禁要問:哪一個是PHP的主要特徵之一?是違反直覺的,還是使用語言結構而不是實際的功能? –

0

嘗試使用括號制服運算符優先級。

if ((include_once('xml.php')) || (include_once('xml.php'))) { 
    echo 'bah'; 
}