2009-01-18 11 views
30

en JavaScript se puede crear fácilmente objetos y matrices de este modo:¿PHP tiene una sintaxis corta para objetos?

var aObject = { foo:'bla', bar:2 }; 
var anArray = ['foo', 'bar', 2]; 

son cosas similares posible en PHP?
Sé que puede crear fácilmente una matriz utilizando la función de matriz, que apenas es más trabajo que la sintaxis de JavaScript, pero ¿existe una sintaxis similar para crear objetos? ¿O debería usar matrices asociativas?

$anArray = array('foo', 'bar', 2); 
$anObjectLikeAssociativeArray = array('foo'=>'bla', 
             'bar'=>2); 

Para resumir:
¿El PHP tiene Javascript como la creación de objetos o debería sólo tiene que utilizar matrices asociativas?

+0

No es que yo sepa ... ¿Y por qué lo desea? Javascript es tan limitado en comparación? Los objetos se deben describir correctamente, y con alcance e insinuación, etc. – DreamWerx

+1

¿existe alguna posibilidad de que pueda cambiar la respuesta aceptada en este caso? la respuesta a esta pregunta ha cambiado en los últimos 6 años. :) – Kip

Respuesta

39

Para los objetos simples, puede utilizar la sintaxis de array asociativo y de fundición para obtener un objeto:

<?php 
$obj = (object)array('foo' => 'bar'); 
echo $obj->foo; // yields "bar" 

Pero mirando que pueda vea fácilmente cuán inútil es (simplemente lo dejaría como una matriz asociativa si su estructura fuera así de simple).

+0

Hmm, bien, bueno, puedo ver algunas situaciones en las que esto podría ser útil, ¡gracias! –

+0

Sí, en ese caso podría usar una matriz asociativa normal. –

+9

'$ goose-> foo' es mucho más bonito que' $ goose ['foo'] '. ∴ útil. – RyanM

36

Hubo un proposal to implement this array syntax. Pero fue rechazado.


actualización La sintaxis abreviada para las matrices se ha volverá a discutir, aceptado, y ahora está en la way be released with PHP 5.4.

Pero todavía no hay una abreviatura para los objetos. Es probable que necesite para convertir explícitamente a objeto:

$obj = (object) ['foo'=>'bla', 'bar'=>2]; 
+5

Para mal no lo hizo. –

+6

Esto se ha implementado en PHP 5.4. –

+0

@Tatu Ulemanen: Gracias, se lo añadieron. – Gumbo

2

No existe una abreviatura de objeto en PHP, pero puede usar la sintaxis exacta de Javascript, siempre que utilice las funciones json_encode y json_decode.

1

El método proporcionado por crescentfresh funciona muy bien pero tuve un problema al agregar más propiedades al objeto. para evitar este problema, implementé el spl ArrayObject.

class ObjectParameter extends ArrayObject { 
    public function __set($name, $value) { 
     $this->$name = $value; 
    } 

    public function __get($name) { 
     return $this[$name]; 
    } 
} 

//creating a new Array object 
$objParam = new ObjectParameter; 
//adding properties 
$objParam->strName = "foo"; 
//print name 
printf($objParam->strName); 
//add another property 
$objParam->strUser = "bar"; 

Hay mucho que puede hacer con este enfoque para hacer más fácil para usted para crear objetos, incluso de las matrices, espero que esto ayude.

2

Como la idea json_decode, escribió esto:

function a($json) { 
return json_decode($json, true); //turn true to false to use objets instead of associative arrays 
} 

//EXAMPLE 
$cat = 'meow'; 

$array = a('{"value1":"Tester", 
    "value2":"'.$cat.'", 
    "value3":{"valueX":"Hi"}}'); 

print_r($array); 
8

A partir de PHP 5.4, usted puede hacer esto:

$array = ['foo'=>'bla', 'bar'=>2]; 

No es mucho más corto, pero te agradecería que necesita utilizar muchas matrices anidadas codificadas (lo que no es poco común).

Si desea que un objeto, todavía tendría que emitir cada matriz:

$object = (object) ['foo'=>'bla', 'bar'=>2]; 
6

De acuerdo con las nuevas sintaxis de PHP,

Usted puede utilizar

$array = [1,2,3]; 

Y para asociativo matrices

$array = ['name'=>'Sanket','age'=>22]; 

Para los objetos puede encasillar la matriz al objeto

$object = (object)['name'=>'Sanket','age'=>22]; 
Cuestiones relacionadas