SPL di PHP: le sue interfacce che coinvolgono gli array coprono tutte le proprietà dell'array?

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

  •  02-07-2019
  •  | 
  •  

Domanda

Sarebbe possibile scrivere una classe praticamente indistinguibile da un vero array PHP implementando tutte le interfacce SPL necessarie? Manca qualcosa che sarebbe critico?

Vorrei creare un oggetto Array più avanzato, ma voglio assicurarmi di non rompere un'app esistente che utilizza array ovunque se li sostituissi con una classe Array personalizzata.

È stato utile?

Soluzione

Gli unici problemi che mi vengono in mente sono le funzioni gettype () e is_array (). Controlla il tuo codice per

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

Perché sebbene sia possibile utilizzare l'oggetto proprio come un array, verrà comunque identificato come oggetto.

Altri suggerimenti

Oltre ai punti sopra indicati, non saresti in grado di far funzionare i suggerimenti del tipo di array dello spazio utente con le istanze della tua classe. Ad esempio:

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

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

Output:

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

Altre differenze includono l'operatore '+' per le matrici (unione) e il fallimento di tutte le funzioni array_ * , inclusi gli array_merge e array_shift comunemente usati .

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top