Я определил некоторые константы, например:
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()
. Если они не находятся в том же файле, что и ваш класс 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