PSR-0 参数通过

  • 本文关键字:参数 PSR-0 php psr-0
  • 更新时间 :
  • 英文 :

Catchable fatal error: Argument 1 passed to CoreModelMapperPostMapper::save() must be an instance of CoreModelMapperPost, instance of CoreModelPost given, called in C:wampwwwTestindex.php on line 16 and defined in C:wampwwwTestCoreModelMapperPostMapper.php on line 15

索引.php

<?php
require_once 'Core/Library/SplClassLoader.php';
$loader = new SplClassLoader('Core', '');
$loader->register();
use CoreModelPost,
    CoreModelMapperPostMapper;
$db = false;
$postMapper = new PostMapper($db);
$post = new Post;
$postMapper->save($post);

PostMapper接口和PostMapper确实有"Post"

<?php
namespace CoreModelMapper;
interface PostMapperInterface
{
    public function save(Post $post);
}

我不明白为什么它抱怨不是"帖子"

这是一个Post,但不是它正在寻找的Post

您似乎对命名空间感到困惑。在一个场合,Post指的是CoreModelMapperPost,但你传递的是CoreModelPost型。

namespace CoreModelMapper;
interface PostMapperInterface
{
    public function save(Post $post);
}

首先声明您现在位于命名空间CoreModelMapper 内,因此当您在方法声明中引用Post时,Post相对于该命名空间,这就是为什么它想要一个 CoreModelMapperPost 类型的实例。

您需要像这样更改代码:

public function save(CoreModelPost $post);

最新更新