2016-03-24 18 views
5

Sto provando a creare un array contenente più oggetti.Come trasmettere più elementi di matrice all'oggetto

ho scritto questo codice (è un membro di una classe esistente)

public static $Roles = [ 
    (object) ['code' => 'SO', 'name' => 'Socio'], 
    (object) ['code' => 'RESP', 'name' => 'Responsabile zona'], 
    (object) ['code' => 'AMM', 'name' => 'Amministratore'], 
]; 

ma ottengo questo errore:

syntax error, unexpected '(object)' (object) (T_OBJECT_CAST), expecting ')'

sulla seconda riga.

Ho pensato che questo dovrebbe funzionare, perché ho già usato la stessa sintassi getto di definire elementi di un array associativi:

return view('edit-headquarter', [ 
    'hq' => (object)['name' => '', 'id' => 0], 
    'submitAction' => 'insert' 
]); 

che sto facendo qualcosa di sbagliato?

EDIT: Sto utilizzando PHP 5.4.45

Non sono sicuro, ma this can be related come suggerito da Martin Persson

+0

penso che questo abbia a che fare con la vostra versione di PHP. Se non funziona, puoi pensare di dichiarare un oggetto Stdclass o, ancora meglio, implementare una funzione che restituisce un oggetto stdclass dalla matrice fornita. (inoltre, un altro trucco possibile è json_decode a json_encode (array)) – briosheje

+0

@ user340764, dove funziona correttamente? https://3v4l.org/pXo2o – Federkun

+0

Qual è il punto? Si convertono gli array in oggetti 'stdClass' che sono solo array con meno funzioni e una sintassi diversa. Non forniscono alcuna funzionalità OOP utile. È meglio creare un 'Role' di classe e passare i valori di' code' e 'name' come argomenti al suo costruttore. Non c'è più bisogno di conversioni ed è possibile aggiungere ulteriori funzionalità quando necessario. – axiac

risposta

3

Se si utilizza la versione di PHP sotto v5.6, allora si avrà non è consentito avere un'espressione come valore predefinito per i membri della classe. A parte questo, non vedo nulla di sbagliato nel modo in cui l'hai dichiarato.

+0

Ho estratto l'espressione in una variabile e ho usato quella variabile come valore predefinito. L'oggetto ora crea proprio bene. Ricevo un errore durante la definizione della proprietà dichiarante. –

+0

Ok, come suggerito da Federico, non posso nemmeno usare una variabile come inizializzatore. Ha senso ... Grazie a tutti! –

0

per lanciare un array associativo di opporsi è possibile utilizzare un po 'sporca, ma ampiamente utilizzato

$obj = json_decode(json_encode($arr));

Problemi correlati