Почему я не могу создать экземпляр этого класса при использовании имени класса и пространства имен? - PullRequest
0 голосов
/ 08 ноября 2019

У меня есть следующий код:

<?php
namespace Assessment;
class Database {

        private $server;
        private $username;
        private $password;
        private $database;

        public $conn;

        public function __construct()
        {           
            $this->server = "localhost";
            $this->username = "root";
            $this->password = "Museum2013";
            $this->database = "rest_test";

            $this->conn = mysqli_connect("$this->server","$this->username","$this->password","$this->database");

            if(!$this->conn)
            {
                echo "Database connection failed : " . mysqli_connect_error();;
            } 
        }
}

$database = new Assessment\Database;

?>

Когда я запускаю код с пространством имен, он не работает. Но когда я удаляю пространство имен сверху и в объекте, код работает нормально. Я также хочу использовать пространство имен в дочернем классе, но я не знаю, что не так с моим кодом.

1 Ответ

1 голос
/ 08 ноября 2019

Это ваша проблема:

$database = new Assessment\Database;

Поскольку имя класса существует в файле с объявленным пространством имен (ваше объявление пространства имен вверху), имена классов относительно относительно пространства именфайла (если вы не объявите их с полным именем класса).

Это утверждение было эквивалентом попытки создания экземпляра Assessment\Assessment\Database.

Так что вы можете просто сделать:

$database = new Database();

И это сработает, поскольку это будет эквивалентно созданию экземпляра Assessment\Database.

Если вы хотите сохранить полное имя класса, просто добавьте \, чтобы сделать de pathначать с корневого пространства имен:

$database = new \Assessment\Database();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...