2017-08-17 75 views
0

所以我試圖在Linux實例上設置php的網絡套接字,並有兩個文件。這兩個文件都在我的/ var/www/html目錄中。第一個被稱爲Chat.php,包含以下代碼:找不到php類文件,儘管它存在

<?php 
namespace MyApp; 
use Ratchet\MessageComponentInterface; 
use Ratchet\ConnectionInterface; 

class Chat implements MessageComponentInterface { 
    public function onOpen(ConnectionInterface $conn) { 
    } 

    public function onMessage(ConnectionInterface $from, $msg) { 
    } 

    public function onClose(ConnectionInterface $conn) { 
    } 

    public function onError(ConnectionInterface $conn, \Exception $e) { 
    } 
} 

?> 

第二個叫chat-server.php和包含此代碼:

<?php 
use Ratchet\Server\IoServer; 
use MyApp\Chat; 

require dirname(__DIR__) . '/html/vendor/autoload.php'; 

$server = IoServer::factory(
    new Chat(), 
    8084 
); 

$server->run(); 

?> 

當我嘗試運行chat-server.php我收到以下錯誤信息:

PHP Fatal error: Class 'MyApp\Chat' not found in /var/www/html/chat-server.php on line 8

很明顯,它不喜歡它,當我嘗試啓動一個new Chat(),因爲它沒有找到類。爲什麼不?

+0

因爲該類不在'chat-server.php'中,所以它在'Chat.php'中。您需要將'Chat.php'包含到'chat-server.php'中,以便它知道類的定義。 –

+0

是不是'使用MyApp \ Chat;'在做什麼? –

+0

不,這只是讓你可以在實例化時將該類稱爲「聊天」而不是「MyApp \ Chat」的絕對名稱。你仍然需要類似'include「Chat.php」;'。 –

回答

0

我建議你重新生成作曲自動加載磁帶機(autoload.php),之後你先加入類似的autoLoad屬性在以下編輯composer.json文件:

"psr-4": {"MyApp\\": "/"} 

這將定義一個新的命名空間與目錄之間的映射。 然後,重新生成自動加載腳本,只需鍵入:

composer dumpautoload -o 

此外,需要自動加載磁帶機應置於頂部腳本。 有關更多詳細信息,請查看作曲家關於自動加載的官方文檔:https://getcomposer.org/doc/01-basic-usage.md#autoloading

相關問題