Frage

Wäre es möglich, eine Klasse zu schreiben, die praktisch nicht von einer tatsächlichen PHP-Array ist durch alle notwendigen SPL-Schnittstellen implementieren? Sind sie etwas vermissen, die kritisch sein würde?

Ich möchte eine erweiterte Array-Objekt bauen, aber ich möchte sicherstellen, dass ich würde eine bestehende App nicht brechen, die Arrays überall verwendet, wenn ich sie mit einem benutzerdefinierten Array-Klasse ersetzt.

War es hilfreich?

Lösung

Die einzigen Probleme, die ich denken kann, sind die gettype () und die is_array () Funktionen. Überprüfen Sie den Code für

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

Denn obwohl Sie das Objekt wie ein Array verwendet werden können, wird es noch als Objekt identifiziert werden.

Andere Tipps

Zusätzlich zu den oben genannten Punkten, würden Sie nicht in der Lage sein, die User-Space-Array-Typ Hinweise arbeiten mit Instanzen Ihrer Klasse. Zum Beispiel:

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

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

Ausgabe:

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

Weitere Unterschiede sind die ‚+‘ Operator für Arrays (Verschmelzung) und das Scheitern der gesamten array_* Funktionen, einschließlich der häufig verwendeten array_merge und array_shift.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top