2012-11-30 61 views
0

我很困惑。我已經建立了下面的代碼在我的index.php到XAMPP和服務器數據庫配置文件之間自動切換:php三元運算符解釋

define('ENVIRONMENT', isset($_SERVER['SERVER_NAME'])=='my_domain_name.com' ? 'production' : 'development'); 

    echo 'SERVER_NAME '.$_SERVER['SERVER_NAME']; // getting localhost 
    echo 'env '.ENVIRONMENT; // getting production. 

在XAMPP本地,我認爲這將導致環境不斷設置爲「發展」與$ _SERVER [ 'SERVER_NAME'] =本地。有人會介意解釋我在這裏做錯了嗎?

回答

3
define('ENVIRONMENT', isset($_SERVER['SERVER_NAME'])=='my_domain_name.com' ? 'production' : 'development'); 

在這裏,我們比較isset()'my_domain_name.com'結果;你將一個布爾值與一個字符串進行比較。

你想要的是檢查 「$_SERVER['SERVER_NAME']設置,並$_SERVER['SERVER_NAME']等於my_domain_name.com?」,具體如下:(或者只刪除isset()完全)

define('ENVIRONMENT', (isset($_SERVER['SERVER_NAME']) && $_SERVER['SERVER_NAME'] == 'my_domain_name.com') ? 'production' : 'development'); 

+0

這基本上是我的回答,與包圍在括號中的比較可讀性更好(我認爲這是爲什麼OP跑到雪視而不見)一起。但刪除'isset()'可以避免這種情況。 –

+0

@TimPost同意;總的來說,我對括號非常非常肛門化,我確實認爲這是可讀性問題的結果。我實際上會將這些parens添加到我的帖子中,很好的電話。 – Eric

+0

謝謝,它現在工作。 - Bill – user61629

1

在這種情況下您不需要使用isset(您知道它已設置):

define('ENVIRONMENT', 
    ($_SERVER['SERVER_NAME']) == 'my_domain_name.com' ? 'production' : 'development' 
); 
+0

絕對不應該在這裏使用'isset',因爲它的缺席應該被記錄下來。 – mario

+0

爲什麼圍繞'$ _SERVER ['SERVER_NAME']'的元素? – Phil

0

試試這個:

define('ENVIRONMENT', ((isset($_SERVER['SERVER_NAME']) && ($_SERVER['SERVER_NAME']=='my_domain_name.com')) ? 'production' : 'development'));