Объявление класса::сохранить() должно быть совместимо с объявлением класса::сохранить()


Я расширяю класс MongoCollection и получаю это сообщение.

Объявление Db\Mongo\Collection::save() должно быть совместимо с объявлением MongoCollection::save()

Я понимаю, что обычно это объявление о пропуске матча в детской коляске.

Php.net говорит, что коляски такие:

Публичное смешанное сохранение (массив|объект $a [, параметры массива $=массив()])

Я попробовал все следующее, чтобы исправить это проблема:

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())

И многие другие, и я, похоже, не могу соответствовать этому типу.

Есть ли у кого-нибудь идеи о том, как исправить эту ошибку? Как объявить детскую коляску как массив|объект?

Author: RonSper, 2014-03-13

2 answers

Я получил эту ошибку

Строгие стандарты: Объявление mymongocollection::save() должно быть совместимо с MongoCollection::save($array_of_fields_or_object, массив $options=NULL)

Поэтому я попробовал:

class MyMongoCollection extends MongoCollection {

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

    }

}

И это работает.

 2
Author: Luca Rainone, 2014-03-26 16:21:48

Интересно, можете ли вы получить какую-либо информацию о методе MongoCollection::save(), используя ReflectionClass:

$reflection = new ReflectionClass( 'MongoCollection' );

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

Чтобы получить недостающие части, в случае, если документация не обновлена?

Ps: это слегка измененный пример кода, взятый из этого билета.

Похоже, что существуют аналогичные проблемы с расширением update метода MongoGridFS расширения класса MongoCollection:

Проблема с переопределением MongoCollection::обновление

 2
Author: birgire, 2017-05-23 10:31:48