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

index.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ますが、渡すものはタイプCore\Model\Postです。

namespace Core\Model\Mapper;

interface PostMapperInterface
{

    public function save(Post $post);
}

最初に、現在 namespace 内にいると述べているため、メソッド宣言でCore\Model\Mapperを参照するときは、その namespace に対して相対的です。これが、 type のインスタンスが必要な理由です。PostPost Core\Model\Mapper\Post

次のようにコードを変更する必要があります。

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