PHP'nin SPL: dizilişlerini arayüzler Tüm dizi özelliklerini kapsıyor mu?

3 Cevap php

Tüm gerekli SPL arabirimleri uygulayarak gerçek bir PHP dizi neredeyse farksız bir sınıf yazmak mümkün olur muydu? Onlar kritik olacağını şey eksik?

Ben daha gelişmiş bir Array nesnesi kurmak istiyorum, ama ben özel bir Array sınıfının onları ikame eğer her yerde dizileri kullanan varolan bir uygulama kırmak olmazdı emin olmak istiyorum.

3 Cevap

The only problems i can think of are the gettype() and the is_array() functions. Check your code for

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

Eğer sadece bir dizi gibi nesneyi kullanabilirsiniz çünkü rağmen, hala bir nesne olarak tespit edilecektir.

Yukarıda yapılan noktalara ek olarak, kullanıcı-uzay dizi tipi ipuçları sınıfın örnekleri ile iş yapmak mümkün olmaz. Örneğin:

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

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

Çıktı:

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

Diğer farklar sık ​​kullanılan array_merge ve array_shift dahil diziler için '+' operatörünü (birleştirme) ve tüm 'array_ *' fonksiyonları başarısızlık içerir.