[英]How to access constant defined outside class?
我定义了一些常量,例如:
define('DB_HOSTNAME', 'localhost', true);
define('DB_USERNAME', 'root', true);
define('DB_PASSWORD', 'root', true);
define('DB_DATABASE', 'authtest', true);
现在当我尝试这样做时:
class Auth{
function AuthClass() {
$this->db_link = mysql_connect(DB_HOSTNAME, DB_USERNAME, DB_PASSWORD)
or die(mysql_error());
}
}
我收到一个错误。 为什么这是我需要做什么?
请参阅,我已尝试使用(例如) global DB_HOSTNAME
但此操作失败并显示错误。
我得到的错误是:
未知的MySQL服务器主机'DB_HOSTNAME'(1)
脚本运行时,应包括常量和类定义。
例如
constants.php.inc
define('DB_HOSTNAME', 'localhost', true);
define('DB_USERNAME', 'root', true);
define('DB_PASSWORD', 'root', true);
define('DB_DATABASE', 'authtest', true);
Auth.php.inc
class Auth{
function AuthClass() {
$this->db_link = mysql_connect(DB_HOSTNAME, DB_USERNAME, DB_PASSWORD)
or die(mysql_error());
}
}
script.php的
include "constants.php.inc";
include "Auth.php.inc";
//do stuff
只要在AuthClass()
运行之前定义了常量, AuthClass()
应该工作。 如果它们与Auth
类不在同一个文件中,您首先需要将它们包含在Auth
所在的文件中,以便它们可以看到它们:
include("the_file_that_has_those_constants_in_it.php");
那它应该工作。 常量已经是全局的,因此不需要使用global
关键字。
听起来你在实例化类Auth
之前没有定义常量。 当您以这种方式使用未定义的常量时,PHP将发出警告并将其转换为字符串。 如果问题确实没有定义您的常量,那么您的代码将被有效地解释为:
$this->db_link = mysql_connect('DB_HOSTNAME', 'DB_USERNAME', 'DB_PASSWORD');
鉴于你得到的错误( 未知的MySQL服务器主机'DB_HOSTNAME' ),我假设这是正在发生的事情。
正如其他答案所述,请确保在尝试调用Auth::AuthClass
之前定义常量。 如果类和DB_ *常量在不同的文件中定义,请确保在尝试实例化/使用类Auth
之前包含这两个文件。
另外,定义的常量不是变量。 您无法使用global CONSTANT_NAME;
通过这种方式,您不需要 - 所有常量始终是全局的,并且在定义它们之后的任何地方都可用。 一个简单的测试证明了这一点:
define ('MY_CONST', 3);
class Test {
function __construct() { echo MY_CONST; }
}
$x = new Test(); // outputs 3
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.