Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/297.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 如何访问类外定义的常量?_Php_Class_Constants_Global - Fatal编程技术网

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_*常量,请确保在尝试实例化/使用class
Auth
之前包含这两个文件


另外,定义的常量不是变量。不能使用
全局常量\u名称以这种方式,您不需要这样做-所有常量都是全局的,并且在定义它们之后的任何地方都可用。一个简单的测试证明了这一点:


嗯。这对解决这个问题没有任何作用,因为类不识别在类范围之外设置的变量。所有这些都是用完全相同的结果重新组织信息。@Joseph常量不是变量,它们确实可以在定义之后执行的任何函数/方法中识别。这是一个有效的答案,可能确实回答了这个问题have@Ashley正如您所看到的,您可以访问类中定义的。您是正确的,我很谦卑。我的代码中肯定还有其他错误。如果您遇到了该错误,那么调用该方法时肯定没有定义define。
define ('MY_CONST', 3);

class Test {
    function __construct() { echo MY_CONST; }
}

$x = new Test(); // outputs 3