Intereting Posts
exec не работает в php-скрипте (WAMP Server) Записан У этого пользователя есть подпись, которая отображается под каждым сообщением, но вы не можете ее просматривать. Моя почта SMTP продолжает поступать как Junk Каков наилучший способ создания файла XLS в PHP? Доступ к php-коду вне папки public_html PHP API Youtube Uploads, исключение: Не удалось запустить возобновляемую загрузку, загрузка должна быть отправлена ​​на URL-адрес загрузки PHP preg_split игнорирует escape-последовательность Какие системные файлы должны находиться в закрытой среде для правильной работы php-fpm на ubuntu? Двустороннее шифрование БД безопасно даже от администратора Получить исходный URL-референт с PHP? Вызов неопределенной функции oci_connect, php_oci8_11g.dll, windows 10, php5.6.24 Как получить доступ к элементу массива в многомерном массиве? Таблицы блокировки запросов mysql PHP – json_encode объект-генератор (с использованием yield) Считывает ли время ожидания времени выполнения?

Класс не найден, используя include_once в пространстве имен

Я пытаюсь использовать один из моих классов в моем пространстве имен, но получаю ошибку класса, не найденную:

PHP Fatal error: Class 'ChatManager' not found in /var/www/soFitTest/chat/src/MyApp/Chat.php on line 17 

Вот код:

 namespace MyApp; use Ratchet\MessageComponentInterface; use Ratchet\ConnectionInterface; include_once __DIR__.'/ChatMananger.php'; class Chat implements MessageComponentInterface { protected $clients; public function __construct() { $this->clients = new \SplObjectStorage; echo "new server is running"; $chatManager = new \ChatMananger(1, 1); } } 

Моя файловая структура:

Код, который я разместил в верхней части страницы, находится в Chat.php

Класс ChatMananger находится в ChatMananger.php

введите описание изображения здесь

Файл ChatMananger.php :

 <?php require_once 'DBConnection.php'; class ChatMananger { const DEFAULT_CHAT_SIZE = 5; const DEFAULT_CHAT_TYPE = 1; private $dbConnection; private $chatId; private $senderId; private $receiverId; private $type = ChatManager::DEFAULT_CHAT_TYPE; public function __construct($senderId, $receiverId) { $this->dbConnection = DBConnection::getDBConnection(); $this->senderId = $senderId; $this->receiverId = $receiverId; } public function getDBConnection() { return $this->dbConnection; } } 

РЕДАКТИРОВАТЬ

У меня есть вещи, работающие в __construct

 <?php namespace MyApp; use Ratchet\MessageComponentInterface; use Ratchet\ConnectionInterface; include_once __DIR__.'/ChatMananger.php'; include_once __DIR__.'/ChatConsts.php'; require_once '/var/www/libs/DBConnection.php'; class Chat implements MessageComponentInterface { protected $clients; public function __construct() { $this->clients = new \SplObjectStorage; echo "new server is running"; new ChatMananger(1, 1); } public function onOpen(ConnectionInterface $conn) { // Store the new connection to send messages to later $querystring = $conn->WebSocket->request->getQuery(); foreach ($querystring as $key => $value) { //echo PHP_EOL."key ".$key." value ".$value; if($key == "senderId") $conn->senderId = $value; else if($key == "receiverId") $conn->receiverId = $value; } $chatManager = new ChatMananger($conn->senderId, $conn->receiverId); $conn->chatId = $chatManager->getChatId(); $this->clients->attach($conn, $conn->chatId); echo PHP_EOL."New connection! ({$conn->resourceId}) chatId ({$conn->chatId})"; } public function onMessage(ConnectionInterface $from, $msg) { $numRecv = count($this->clients) - 1; echo sprintf('Connection %d sending message "%s" to %d other connection%s' . "\n" , $from->resourceId, $msg, $numRecv, $numRecv == 1 ? '' : 's'); } public function onClose(ConnectionInterface $conn) { // The connection is closed, remove it, as we can no longer send it messages $this->clients->detach($conn); echo "Connection {$conn->resourceId} has disconnected\n"; } public function onError(ConnectionInterface $conn, \Exception $e) { echo "An error has occurred: {$e->getMessage()}\n"; $conn->close(); } } 

ChatMananger.php

 namespace MyApp; require_once '/var/www/libs/DBConnection.php'; class ChatMananger { const DEFAULT_CHAT_SIZE = 5; const DEFAULT_CHAT_TYPE = 1; private $dbConnection; private $chatId; private $senderId; private $receiverId; private $type = self::DEFAULT_CHAT_TYPE; public function __construct($senderId, $receiverId) { $this->dbConnection = \DBConnection::getDBConnection(); $this->senderId = $senderId; $this->receiverId = $receiverId; } public function getDBConnection() { return $this->dbConnection; } } 

Теперь моя проблема в том, что в методе onOpen я использую:

 $chatManager = new ChatMananger($conn->senderId, $conn->receiverId); 

Для этого кода я получаю эту ошибку:

 PHP Fatal error: Class 'ChatMananger' not found in /var/www/soFitTest/chat/src/MyApp/Chat.php on line 37 

Сначала импортируйте ChatManager ( используя пространства имен в PHP ):

 include_once __DIR__.'/ChatMananger.php'; use MyApp\ChatManager; 

И позже используйте его вот так:

 $chatManager = new ChatMananger(1, 1); 

Основная проблема заключается в следующем:

 private $type = ChatManager::DEFAULT_CHAT_TYPE; 

Измените его на:

 private $type = self::DEFAULT_CHAT_TYPE; 

Также:

 $chatManager = new \ChatMananger(1, 1); 

должно быть:

 $chatManager = new MyApp\ChatManager(1, 1); 

(если я правильно понимаю вашу структуру пространства имен)


Аналогично, ваш класс ChatManager должен объявить над ним пространство имен (для согласованности). Полный файл выглядит следующим образом:

 <?php namespace MyApp; require_once 'DBConnection.php'; class ChatManager { const DEFAULT_CHAT_SIZE = 5; const DEFAULT_CHAT_TYPE = 1; private $dbConnection; private $chatId; private $senderId; private $receiverId; private $type = self::DEFAULT_CHAT_TYPE; public function __construct($senderId, $receiverId) { $this->dbConnection = DBConnection::getDBConnection(); $this->senderId = $senderId; $this->receiverId = $receiverId; } public function getDBConnection() { return $this->dbConnection; } }