我现在已经把头撞到了墙上一天3/4,而且无法看到我的方式错误。
我正在创建(或尝试!)一个由几个类和一个接口组成的简单包。这是在https://github.com/dnorth98/victoropsnotifier
的github基本上,有以下目录结构:
victoropsnotifer
src
Signiant
VictorOpsNotifier
Transport.php
VictorOpsNotifier.php
运输非常简单:
<?php
namespace Signiant\VictorOpsNotifer;
interface Transport
{
// must POST the $message to the VictorOps REST endpoint
public function send(Messages\Message $message);
}
并且VictorOpsNotifier的开头是
<?php
namespace Signiant\VictorOpsNotifer;
use GuzzleHttp\Client;
class VictorOpsNotifer implements Transport
{
protected $endpoint_url;
:
:
当我尝试使用
实例化新对象时出现问题<?php
require_once 'vendor/autoload.php';
use Signiant\VictorOpsNotifier\Messages\CustomMessage;
use Signiant\VictorOpsNotifier\VictorOpsNotifier;
$voConfig = ['routing_key' => 'test',
'endpoint_url' => 'https://goo'];
$voHandle = new VictorOpsNotifier($voConfig);
我回来了
PHP Fatal error: Interface 'Signiant\VictorOpsNotifer\Transport' not found in /tmp/djn/tests/vendor/signiant/
victoropsnotifier/src/Signiant/VictorOpsNotifier/VictorOpsNotifier.php on line 8
PHP Stack trace:
PHP 1. {main}() /tmp/djn/tests/test.php:0
PHP 2. spl_autoload_call() /tmp/djn/tests/test.php:12
PHP 3. Composer\Autoload\ClassLoader->loadClass() /tmp/djn/tests/test.php:0
PHP 4. Composer\Autoload\includeFile() /tmp/djn/tests/vendor/composer/ClassLoader.php:301
PHP 5. include() /tmp/djn/tests/vendor/composer/ClassLoader.php:412
我错过了EARTH的内容? Composer从我的github repo中找到了ok包,每个都在vendor文件夹中,看起来没问题。它看起来像名称空间匹配......所以出于某种原因,它只是没有加载包含接口的Transport.php文件。
答案 0 :(得分:0)
class VictorOpsNotifer implements \Signiant\VictorOpsNotifer\Transport{}
尝试在界面前添加命名空间。
答案 1 :(得分:0)
这似乎只是一个错字:
namespace Signiant\VictorOpsNotifer;
^ no `i` in here
但
use Signiant\VictorOpsNotifier\VictorOpsNotifier;
^ but here it is
与班级名称相同。
另外,您将名称空间Signiant
声明为src/
,但它确实src/Signiant
顺便说一句,没有必要将此包声明为psr-0,最好使用psr-4 insetad。没什么大不了的,只是为了整合。
P.S。奇怪的是,它是在抱怨界面,虽然它不应该在它上课之前,但肯定不会在出现错字时上课。
P.P.S例如,您可以通过使用适当的IDE,PHPStorm轻松避免这些拼写错误。只要有拼写错误(并且我甚至不会开始讨论自动完成),它会突出显示该类的名称缺失。