2012-09-23 31 views
1

甲PHP常数的定义如下:分配变量值的恒定

define('const_name','const_value'); 

尝试这样的:

define('const_name', $variable_name); 

为什么呢?因为我是一个初学者,我想如果这个工程:

define('const_name', 50); 

我的版本也将工作。它没有。它应该工作,而不是因为我误打错了什么,或者我的企图只是愚蠢的?

注意:我的变量内部是从MySQL数据库中提取的Google Analytics代码。只是一个像这样的字符串UA-XXXXX-Y,没有更多。

+4

*“它不起作用”* [没有解释问题](http://stuck.include-once.org/#help3)就够了。您需要详细说明您的输入,预期结果和实际结果,或详细说明错误消息。 – mario

+0

你在做什么应该可以工作,所以是的,要么你输错了一些东西,要么你的变量内容不是你认为的那样。如果您没有收到错误消息,请确保您打开了错误报告。 – octern

+0

@mario。我有一个条件,说如果定义了该常量,则会用ID跟踪Google跟踪代码,否则不会完全显示跟踪代码。但是ID在DB内部,所以我没有正确提取它。我做错了,我只是想知道是否是这样。 – Raul

回答

4
$myVariable="what up"; 
define('myConstant',"$myVariable"); 
echo myConstant; 

真的不过,为什么定义一个变量为一个常数?这不是一个好习惯。

+0

我有这样的$ info ['google_id']来自数据库,我需要把它放在一个常量内。我可以这样做:define('const_name','$ info ['google_id']')? – Raul

+0

如果你把它放在这样的单引号中,那么你将分配字符串值'$ info ['google_id']'而不是该变量的值。假设$ info ['google_id']实际上包含一个字符串或其他有效的数据类型,摆脱外部的一对单引号,它应该工作...再次。 – octern

+1

另外,这似乎是使用变量定义常量的完美理由。只有当你不确定价值将来自哪里,或者当你使用一个变量时,这只是一个问题,因为价值会在以后发生变化。 – octern

8

documentation

恒定的值; 只允许标量和空值。标量值是整数,浮点数,字符串或布尔值。可以定义资源常量,但不推荐使用,可能会导致不可预知的行为。

您从数据库中检索的值可能不是字符串,而只是具有__toString()方法的对象。为了保证恒定的值是一个字符串,尽量明确casting the variable to string

define('const_name', (string)$varible_name); 
+0

+1 - 这是常常遇到的常见问题。对象和数组无法先存储在常量中,而无需先序列化它们。 –

+0

我不敢相信我从未意识到我可以通过序列化将数组存储在常量中。 [cries] – octern