Class :: save()的声明应该与Class :: save()的声明兼容

时间:2014-03-13 18:32:38

标签: php mongodb extending

我正在扩展MongoCollection类,我收到了这条消息。

  

Db \ Mongo \ Collection :: save()的声明应该与MongoCollection :: save()的声明兼容

据我所知,这通常是一个婴儿车宣言未命中。

Php.net说婴儿车是:

  

public mixed save(array | object $ a [,array $ options = array()])

我已尝试以下所有方法来解决此问题:

public function save(array &$a, array $options = array())
public function save($a, array $options = array())
public function save(&$a, array $options = array())
public function save($a, $options = array())
public function save($a = array(), $options = array())

还有很多其他人,我似乎无法匹配这种类型。

有没有人对如何修复此错误有任何想法?你如何将一个婴儿车声明为数组对象?

2 个答案:

答案 0 :(得分:3)

我想知道您是否可以使用ReflectionClass获取有关MongoCollection::save()方法的任何信息:

$reflection = new ReflectionClass( 'MongoCollection' );

foreach ( $reflection->getMethod('save')->getParameters() as $param )
{ 
    var_dump( $param->getName(), $param->isArray(), $param->isOptional() ); 
}

获取缺失的部分,如果文档不是最新的?

ps:这是一个略微修改的代码示例,取自this ticket

updateMongoGridFS扩展的MongoCollection方法似乎存在类似的问题:

Issue with overriding MongoCollection::update

答案 1 :(得分:3)

我收到了这个错误

  

严格标准:MyMongoCollection :: save()的声明应该是   兼容MongoCollection :: save($ array_of_fields_OR_object,   array $ options = NULL)

所以我试过了:

class MyMongoCollection extends MongoCollection {

    public function save($arr_obj, array $options= null) {

    }

}

它有效。