2013-06-01 130 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') ... 
} 
相关问题