2013-06-01 49 views
-1

在php中,可以隨時定義常量。這些年來,我只用它們來存儲數據庫登錄信息。它們被放置在一個從未被觸摸過的文件中。可以即時定義常量嗎?

但它是確定的,如果我做的:

if ($userName == $dbUserName) { 
define('userName', 'myUserNameHere'); 
} 

則:

myFunk(); 

    function myFunk() 
//I'm actually trying to avoid tons of arguments here. 
     If it's a constant, it's available without having to use global or pass it through args. 
      { 
      echo userName; 
      } 
+0

爲什麼你需要存儲在第一時間常量數據庫憑據。您通常只需要每個請求創建一個單一連接。 – PeeHaa

+0

我不這麼認爲。從我知道php如果第一次評估條件,然後執行命令,但在條件字符串尚未定義。 – Gimmy

+0

如果我正確地讓你..那麼爲什麼不會議? – alwaysLearn

回答

1

一般情況下,是的,但你應該確保你總是定義默認值。

if ($condition == true) 
{ 
    define('FOO', $foo); 
} 
else 
{ 
    define('FOO', null); 
} 

此外,按照慣例,常量是全部大寫。

但是,過度依賴任何類型的全局變量通常會導致難以維護,難以維護的代碼。

+0

在這種情況下,它只會是三個。 userName,userStaus,userCountry – Norman

+1

但是這真的是一個'User'對象:'$ user-> name','$ user-> status','$ user-> country',它將成爲控制器的一部分(如果使用MVC模式)根據需要注入各種功能。所以理論上,我支持我的回答,但在您的特定用例中,我並不認爲這是它的正確應用。 – Matthew

-1

如果我是你,我會做這樣的:

<?php 

function test() 
{ 
    echo $GLOBALS['username']; 
} 


$username = 'foo'; 

test(); // echo 'foo'; 

用戶名聽起來很像一個動態的變量。恆定暗示的名稱是具有平均到整個所有的程序

+0

這將是測試/維護/調試的「痛苦」。讓我們說,在某些時候,代碼變得瘋狂,你必須找出爲什麼/這個變量發生了什麼變化。祝你好運調試。 – PeeHaa

+0

你是對的。除非它只是由一個編碼器維護的幾段代碼。在那種情況下,它會做到這一點。 – user544262772

+1

不是。作爲項目中唯一的開發者意味着什麼。從現在開始,你不會知道一個月會發生什麼。地獄我不知道我上週寫的所有東西。 – PeeHaa

0

是恆定的值,你可以創建定義有條件

if (i_am_debugging()) define('DEBUG', 'Level7'); 

否則創建一無所獲。

再後來,你很容易或檢查它是否沒有定義感謝PHP 定義功能

if (defined('DEBUG')) { 
    if (DEBUG == 'Level1') ... 
} 
相關問題