Уровень звукового давления PHP:Охватывают ли его интерфейсы, связанные с массивами, все свойства массива?

StackOverflow https://stackoverflow.com/questions/145376

  •  02-07-2019
  •  | 
  •  

Вопрос

Можно ли написать класс, практически неотличимый от реального массива PHP, реализовав все необходимые интерфейсы SPL?Упускают ли они что-нибудь критичное?

Мне хотелось бы создать более продвинутый объект Array, но я хочу быть уверенным, что не сломаю существующее приложение, которое повсюду использует массивы, если заменю их собственным классом Array.

Это было полезно?

Решение

Единственные проблемы, о которых я могу думать, это функции gettype() и is_array().Проверьте свой код на

gettype($FakeArray) == 'array' 
is_array($FakeArray)

Потому что, хотя вы можете использовать объект как массив, он все равно будет идентифицирован как объект.

Другие советы

В дополнение к вышесказанному, вы не сможете заставить подсказки типов массивов в пользовательском пространстве работать с экземплярами вашего класса.Например:

<?php
function f(array $a) { /*...*/ }

$ao = new ArrayObject();
f($ao); //error
?>

Выход:

Catchable fatal error: Argument 1 passed to f() must be an array, object given 

Другие отличия включают оператор «+» для массивов (слияние) и отказ всего array_* функции, включая часто используемые array_merge и array_shift.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top