找不到php类文件,即使它存在
Posted
技术标签:
【中文标题】找不到php类文件,即使它存在【英文标题】:php class file not found, even though it exists 【发布时间】:2017-08-17 05:38:30 【问题描述】:所以我正在尝试在 linux 实例上使用 php 设置 Web 套接字,并且有两个文件。这两个文件都在我的 /var/www/html 目录中。第一个名为Chat.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()
时它不喜欢它,因为它找不到类。为什么不呢?
【问题讨论】:
因为课程不在chat-server.php
,所以在Chat.php
。您需要将 Chat.php
包含到 chat-server.php
中,以便它知道类定义。
这不是use MyApp\Chat;
在做什么吗?
不,这只是为了让您在实例化它时可以将类称为Chat
而不是MyApp\Chat
的绝对名称。你仍然需要像include "Chat.php";
这样的东西。
也就是说,没有use MyApp\Chat
,您需要使用new MyApp\Chat()
而不仅仅是new Chat()
。但无论哪种情况,您仍然需要包含/要求它。
好的,现在当我运行文件时,它说 PHP 致命错误:Interface 'Ratchet\MessageComponentInterface' not found in /var/www/html/Chat.php on line 6
【参考方案1】:
我建议你重新生成 Composer 自动加载器(autoload.php),在你第一次编辑 composer.json 文件后,在 autoload 属性下添加如下内容:
"psr-4": "MyApp\\": "/"
这将定义命名空间到目录之间的新映射。 然后,要重新生成自动加载脚本,只需键入:
composer dumpautoload -o
此外,要求自动加载器应放在脚本的顶部。 更多详情请查看 composer 官方关于自动加载的文档:https://getcomposer.org/doc/01-basic-usage.md#autoloading
【讨论】:
以上是关于找不到php类文件,即使它存在的主要内容,如果未能解决你的问题,请参考以下文章
即使文件存在,Composer 也找不到 composer.json 文件
CSS 模块在 Codesandbox 中不起作用 - 即使它们存在也找不到文件