繁体   English   中英

如何访问常量定义的外部类?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM