Как получить доступ к постоянному определенному внешнему классу?

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

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)

9
задан Brian Tompsett - 汤莱恩 27 November 2015 в 16:46
поделиться

3 ответа

При запуске сценария должны быть включены определения константы и класса.

например.

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
11
ответ дан 4 December 2019 в 14:26
поделиться

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

include("the_file_that_has_those_constants_in_it.php");

Затем это должно просто работать. Константы уже являются глобальными, поэтому нет необходимости использовать ключевое слово global.

2
ответ дан 4 December 2019 в 14:26
поделиться

Похоже, что ваши константы не определены до того, как вы создадите экземпляр класса 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
1
ответ дан 4 December 2019 в 14:26
поделиться
Другие вопросы по тегам:

Похожие вопросы: