Php 如何访问类外定义的常量?
我定义了一些常数,例如:Php 如何访问类外定义的常量?,php,class,constants,global,Php,Class,Constants,Global,我定义了一些常数,例如: 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_conne
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\u主机名”(1)
脚本运行时,应同时包含常量和类定义 e、 g 常数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()
之前定义了常量,它就应该可以工作。如果它们与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\u HOSTNAME”),我假设发生了这种情况
正如其他答案所述,在尝试调用Auth::AuthClass
之前,请确保您正在定义常量。如果在不同的文件中定义了类和DB_*常量,请确保在尝试实例化/使用classAuth
之前包含这两个文件
另外,定义的常量不是变量。不能使用
全局常量\u名称代码>以这种方式,您不需要这样做-所有常量都是全局的,并且在定义它们之后的任何地方都可用。一个简单的测试证明了这一点:
嗯。这对解决这个问题没有任何作用,因为类不识别在类范围之外设置的变量。所有这些都是用完全相同的结果重新组织信息。@Joseph常量不是变量,它们确实可以在定义之后执行的任何函数/方法中识别。这是一个有效的答案,可能确实回答了这个问题have@Ashley正如您所看到的,您可以访问类中定义的。您是正确的,我很谦卑。我的代码中肯定还有其他错误。如果您遇到了该错误,那么调用该方法时肯定没有定义define。
define ('MY_CONST', 3);
class Test {
function __construct() { echo MY_CONST; }
}
$x = new Test(); // outputs 3