代码之家  ›  专栏  ›  技术社区  ›  Mazatec

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

  •  9
  • Mazatec  · 技术社区  · 16 年前

    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 但这失败了,出现了一个错误。

    我得到的错误是:

    3 回复  |  直到 10 年前
        1
  •  11
  •   Artefacto    16 年前

    当脚本运行时,常量和类定义都应该包括在内。

    常量.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());
        }
    }
    

    脚本.php

    include "constants.php.inc";
    include "Auth.php.inc";
    
    //do stuff
    
        2
  •  2
  •   alexantd    16 年前

    只要您之前定义了常量,它就应该可以工作 AuthClass() Auth 类,则首先需要将它们包含在 认证 驻留在中以便可以看到它们:

    include("the_file_that_has_those_constants_in_it.php");
    

    那就行了。常量已经是全局的,因此不需要使用 global 关键字。

        3
  •  1
  •   user229044    16 年前

    Auth . 当您以这种方式使用未定义的常量时,PHP将发出警告并将其转换为字符串。如果问题确实是没有定义常量,那么代码将被有效地解释为:

    $this->db_link = mysql_connect('DB_HOSTNAME', 'DB_USERNAME', 'DB_PASSWORD');
    

    未知的MySQL服务器主机“DB\u HOSTNAME”

    正如其他答案所述,在尝试调用之前,请确保您正在定义常量 Auth::AuthClass 认证 .


    另外,定义的常量是 不 变量。你不能使用 global CONSTANT_NAME; 通过这种方式,您不需要这样做—所有常量都是全局的,并且在定义它们之后的任何地方都可用。一个简单的测试证明了这一点:

    define ('MY_CONST', 3);
    
    class Test {
        function __construct() { echo MY_CONST; }
    }
    
    $x = new Test(); // outputs 3
    
    推荐文章