Как получить доступ к константе, определенной вне класса? - PullRequest
9 голосов
/ 11 июня 2010

Я определил некоторые константы, например:

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)

Ответы [ 3 ]

11 голосов
/ 11 июня 2010

Когда скрипт выполняется, должны быть включены как константа, так и определения классов.

например,

constants.php.inc

define('DB_HOSTNAME', 'localhost', true);
define('DB_USERNAME', 'root', true);
define('DB_PASSWORD', 'root', true);
define('DB_DATABASE', 'authtest', true);

Auth.phpinc

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
2 голосов
/ 11 июня 2010

Это должно работать до тех пор, пока вы определили константы до запуска AuthClass().Если они не находятся в том же файле, что и ваш Auth класс, вам сначала необходимо включить их в файл, в котором находится Auth, чтобы он мог их видеть:Работа.Константы уже глобальные, поэтому нет необходимости использовать ключевое слово global.

1 голос
/ 11 июня 2010

Похоже, ваши константы не определены до того, как вы создадите экземпляр класса 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...