Anche se onestamente non riesco a vedere il motivo per cui ci si vuole fare questo (array associativi sono in essenza di soli dati-oggetti) ma se insistete:
Invece di lanciare ogni singolo array, su ogni singolo livello per un oggetto, è possibile utilizzare il seguente "trucco/hack" :
$object = json_decode(
json_encode(
array('some'=>array('multi'=>'Dimensional'),
'array'=>'that',
'you' => array('want' => 'to',
'turn' => 'into'),
'an' => 'object')));
Converte tutti gli array in istanze dello stdClass
, che credo sia quello che volevi.
Ancora una volta, devo dire: PHP è non JavaScript e gli oggetti sono molto più costosi (relativamente parlando) in lingue come PHP, quindi sono in JS. Ti consiglio vivamente di continuare ad usare gli array assoc se non hai bisogno di un oggetto.
Come gli oggetti, gli array possono essere tipo accennato: function foo (array $argument){}
Se davvero si vuole trasformarli in una particolare istanza di una classe, perché non cambiare il costruttore, a che fare con una matrice:
class My_Object extends stdClass
{
public function __construct(array $params = null)
{
if (!empty($params))
{
foreach ($params as $name => $value)
{
$this->{$name} = $value;//set everything
}
}
}
}
E andare avanti per aggiungere qualsiasi metodo che si desidera aggiungere al lotto
fonte
2012-11-16 13:29:02
Perché si desidera utilizzare un oggetto quando lo si crea come un array in ogni modo? – Peon
Non riesco a capire la tua necessità di lanciarlo in quel modo. – NappingRabbit
è possibile eseguire l'aggiornamento a php 5.4 e utilizzare la sintassi dell'array breve; questo renderà il tuo codice più ordinato. Sono con @DainisAbols però; Non sono sicuro di cosa stia cercando di ottenere con il casting del tipo. Che vantaggio vedi di usare gli oggetti rispetto agli array in questo contesto? – SDC