0
Catchable fatal error: Argument 1 passed to Core\Model\Mapper\PostMapper::save() must be an instance of Core\Model\Mapper\Post, instance of Core\Model\Post given, called in C:\wamp\www\Test\index.php on line 16 and defined in C:\wamp\www\Test\Core\Model\Mapper\PostMapper.php on line 15

索引.php

<?php
require_once 'Core/Library/SplClassLoader.php';

$loader = new SplClassLoader('Core', '');
$loader->register();

use Core\Model\Post,
    Core\Model\Mapper\PostMapper;

$db = false;

$postMapper = new PostMapper($db);

$post = new Post;

$postMapper->save($post);

PostMapper 接口和 PostMapper 确实有“Post”

<?php
namespace Core\Model\Mapper;

interface PostMapperInterface
{

    public function save(Post $post);
}

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

4

1 回答 1

1

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

您似乎对命名空间感到困惑。在一个场合,Post指的是Core\Model\Mapper\Post,但你传递的是 type Core\Model\Post

namespace Core\Model\Mapper;

interface PostMapperInterface
{

    public function save(Post $post);
}

您首先声明您现在位于 namespace 内Core\Model\Mapper,因此当您Post在方法声明中引用时,它Post 是相对于该 namespace,这就是它想要一个 type 的实例的原因Core\Model\Mapper\Post

您需要像这样更改代码:

public function save(\Core\Model\Post $post);
于 2012-12-08T18:08:42.433 回答