2013-05-18 6 views
16

Ho usato PHP da un po 'di tempo, ma non sono mai stato un programmatore avanzato. Mi sento come se questa è la domanda stupida, ma non ha mai capito il motivo per cui alcuni valori di matrice possono essere recuperati utilizzando diversi metodi:PHP che recupera i valori dell'array usando la freccia del trattino "->"

questo:

$array->value 

piuttosto che normale:

$array['value'] 

Il $ array di serie [ 'value'] funziona sempre, ma quello che usa il metodo -> non lo fa a volte. Perché?

Ecco un esempio. Sto usando Zend Framework 2 e posso prendere un valore di sessione utilizzando il -> Metodo:

$this->session->some_value 

Tuttavia, non posso se faccio un nuovo, normale array:

$array = array('some_value' => 'myvalue'); 
$array['some_value']; // works!! 
$array->some_value; // does not work :(

In Zend La maggior parte degli array 1 del framework 1 funzionerebbe bene in questo modo, e in ZF2 sempre di più, mi imbatto in problemi in cui ho bisogno di cambiare il modo in cui ottengo quel valore. Ha senso? Apprezzo sicuramente qualsiasi aiuto. Grazie, Greg

+0

Grazie a tutti per le grandi risposte. Stai bene su quello che stavo cercando. Voitcus (sotto) aveva la chiave per aiutarmi a capire meglio. Grazie a tutti, per l'aiuto! – gregthegeek

risposta

19

Come affermato in precedenza in altre risposte, utilizzando -> significa che si accede a un oggetto, non un array.

Tuttavia, a volte è possibile che un oggetto sarà trattato come un array. È quando sta implementando l'interfaccia ArrayAccess. Il programmatore può fare in modo tale che ad es. chiamare $object->field equivale a $object['field'], ma lui/lei non deve.

Inoltre, è possibile considerare un array come un oggetto (vedere to the manual), tuttavia in questo caso non è un array ma un oggetto ed è lo stesso come sopra.

+1

Questo è quello che pensavo ed è esattamente quello che stavo cercando, semplicemente non conoscevo le ragioni esatte. L'ArrayObject di PHP, penso, è ciò che ha causato la mia confusione quando si utilizza ZF 1 o 2, poiché gli oggetti per lo più sembravano e si comportavano come gli array. Ora capisco! Sìì! Dopo aver letto il tuo commento e il documento collegato, ho trovato questa pagina che ha aiutato anche la mia comprensione. Grazie!! [http://codingexplained.com/coding/php/zend-framework/using-sessions-in-zend-framework-2](http://codingexplained.com/coding/php/zend-framework/using-sessions -in-zend-framework-2) – gregthegeek

2

Le variabili che consentono di ottenere le proprietà con -> sono in realtà oggetti, non matrici. Consentono la sintassi ['some_key'], ma ciò non significa che siano array. Non sono.

Puoi leggere di più su oggetti on this page of the PHP manual.

1

Quelli non sono gli array, sono objects.

1

Questo perché non è un array è una variabile di oggetti.

Ad esempio;

class MyObject{ 

    var $myVariable = 'test'; 

} 

$MyObject = new MyObject(); 
echo $MyObject->myVariable; // Would return 'test' 
Problemi correlati