PHP: считать объект ArrayAccess без Countable

Поэтому я работаю с некоторым внешним PHP-кодом, для которого у меня нет полного исходного кода. Я использую рефлексию для разработки вызываемых методов и т. Д.

У них есть такой класс:

class SpecialArray implments \ArrayAccess
{
public function offsetExists($index){}
public function offsetGet($index){}
public function offsetSet($index, $value){}
public function offsetUnset($index){}
}

Так логично я могу foreach(SpecialArray), Все в порядке.

Однако в коде я могу как-то сделать count(SpecialArray) и получите правильное количество, например, если в SpecialArray есть 5 элементов count(SpecialArray) вернется 5!

Однако нет count метод в классе, и класс не реализует Countable
призвание SpecialArray->count() также не удается с Call to undefined method

У кого-нибудь есть идеи, как они могут делать это волшебство вуду ??

Полный \ReflectionClass::export()

Class [  class ThirdParty\SpecialArray implements ArrayAccess ] {

- Constants [0] {
}

- Static properties [1] {
Property [ public static $_metadata ]
}

- Static methods [1] {
Method [  static public method &getMetadata ] {

- Parameters [0] {
}
}
}

- Properties [0] {
}

- Methods [5] {
Method [  public method offsetExists ] {

- Parameters [1] {
Parameter #0 [  $index ]
}
}

Method [  public method offsetGet ] {

- Parameters [1] {
Parameter #0 [  $index ]
}
}

Method [  public method offsetSet ] {

- Parameters [2] {
Parameter #0 [  $index ]
Parameter #1 [  $value ]
}
}

Method [  public method offsetUnset ] {

- Parameters [1] {
Parameter #0 [  $index ]
}
}

Method [  public method fetch ] {

- Parameters [1] {
Parameter #0 [  $index ]
}
}
}
}

1

Решение

После тестирования вашего кода я получил возвращаемое значение 1. Позвольте мне процитировать руководство по PHP count():

Возвращает количество элементов в array_or_countable. Когда
параметр не является ни массивом, ни объектом с реализованным счетным
интерфейс, 1 будет возвращен.
Есть одно исключение, если
Аргумент array_or_countable имеет значение NULL, 0 будет возвращено.

Начиная с PHP 7.2, пытаясь использовать count() на что-то неисчислимое предупреждение выдаст, например

Параметр должен быть массивом или объектом, реализующим Счетное

демонстрация https://3v4l.org/G0pR3

2

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]