php - 实现接口(interface)问题

标签 php oop interface

我在构造函数中有一个类型提示,但由于某种原因我得到了

Catchable fatal error: Argument 1 passed to Log::__construct() must be an instance of TestInterface, instance of Log\Handler given, called in 

测试接口(interface).php

namespace Log;  
    interface TestInterface
    {
      public function log();
    }

处理程序.php

namespace Log;

require_once 'TestInterface.php';

use Log\TestInterface;

    class Handler implements TestInterface 
    {
      public function log() 
      {
        //some logic goes here 
      }
    }

日志.php

require_once 'Handler.php';

use Log\Handler;
class Log 
{
  public function __construct(TestInterface $handler)
  {
    $handler->log('test');
  }
}

$obj = new Log(new Handler());

那么为什么我会收到此错误?我认为当我实现 TestInterface 时,Handler 类的实例将通过 Log 构造函数传递。

最佳答案

您必须将 use Log\TestInterface; 添加到 Log.php 的顶部,因为 TestInterface 在全局命名空间中未定义。您返回的根本不是有用的错误消息,但这应该可以做到:

require_once 'Handler.php';

use Log\Handler;
use Log\TestInterface;

class Log 
{
  public function __construct(TestInterface $handler)
  {
    $handler->log('test');
  }
}

$obj = new Log(new Handler());

关于php - 实现接口(interface)问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25310269/

相关文章:

php - 如何将列表回显到文本区域?

php - 如何使用 MySQL 查询选择 WordPress 中的所有类别?

c# - 如何使用包含空格的枚举项目名称?

objective-c - @interface 多重继承?

php - 在 Woocommerce 结帐页面中显示添加费用的复选框

php - 如何从 PHP 回显接收数据以使用 AJAX 显示?

java - 如何将数据存储在对象而不是类中

PHP - 用不同数量的参数覆盖函数

java - 正确使用 Java 接口(interface)

spring - Spring 的外观、服务接口(interface)和事务代理