PHP SPL:هل تغطي واجهاتها التي تتضمن صفائف جميع خصائص المصفوفة؟

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