get_object_vars for array php arrays

for - Objeto PHP como matriz



php object (9)

Mejora la capacidad de clase sin inconvenientes de funcionalidad

También puede usar ArrayAccess para acceder a una propiedad de matriz única en su clase y dejar que otras propiedades sean accedidas de forma POP. Sin embargo, todavía funcionará como usted solicitó.

class Foo implements /ArrayAccess { /** * mixed[] now you can access this array using your object * like a normal array Foo[''something''] = ''blablabla''; echo Foo[''something'']; ... and so on * other properties will remain accessed as normal: $Foo->getName(); */ private myArrayOptions = []; private $name = ''lala''; ... public function offsetExists($offset) { return isset($this->myArrayOptions[$offset]); } public function offsetGet($offset) { if ($this->offsetExists($offset)) { return $this->myArrayOptions[$offset]; } return null; // or throw the exception; } public function offsetSet($offset, $value) { $this->myArrayOptions[$offset] = $value; } public function offsetUnset($offset) { unset($this->myArrayOptions[$offset]); } public function getName() { return $this->name; } public function __set($offset, $value){ $this->myArrayOptions[$offset] = $value; } ... }

Lo anterior funcionará como esperabas.

$obj->foo = ''bar''; if($obj[''foo''] == ''bar''){ echo "WoWo"; }

También tenga en cuenta que Foo [''nombre''] ! == Foo-> getName () son dos variables diferentes

Necesito poder configurar mi objeto de esta manera:

$obj->foo = ''bar'';

luego, después de eso, tengo que hacer lo siguiente

if($obj[''foo''] == ''bar''){ //more code here }


Estás mezclando objetos y matrices. Puedes crear y acceder a un objeto así:

$obj = new stdClass; $obj->foo = ''bar''; if($obj->foo == ''bar''){ // true }

y una matriz como tal:

$obj = new Array(); $obj[''foo''] = ''bar''; if($obj[''foo''] == ''bar''){ // true }

Puede definir una clase y agregar implementos ArrayAccess si desea acceder a su clase como una matriz y una clase.

http://www.php.net/manual/en/language.oop5.php


Intenta extender ArrayObject

También necesitarás implementar un __get Método Mágico" como mencionó Valentin Golev.

Tu clase tendrá que ser algo como esto:

Class myClass extends ArrayObject { // class property definitions... public function __construct() { //Do Stuff } public function __get($n) { return $this[$n]; } // Other methods }


Puede acceder al objeto PHP como matriz PHP, pero de diferentes maneras. Prueba esto:

$obj->{''foo''}

Eso es similar con el acceso a una matriz como esta:

$arr[''foo'']

También puedes hacer esto:

$propertyName = ''foo''; $obj->$propertyName; // same like first example


Solo agregue implements ArrayAccess a su clase y agregue los métodos requeridos:

  • Función pública offsetExists ($ offset)
  • función pública offsetGet ($ offset)
  • función pública offsetSet ($ offset, $ valor)
  • función pública offsetUnset ($ offset)

Ver http://php.net/manual/en/class.arrayaccess.php


Su objeto debe implementar la interfaz ArrayAccess , luego PHP le permitirá usar los corchetes de esa manera.


También puedes lanzar el objeto como una matriz:

if((array)$obj[''foo''] == ''bar''){ //more code here }


Tendrá que implementar la interfaz http://php.net/manual/en/class.arrayaccess.php para poder hacer eso, lo que solo significa implementar algunos métodos simples (4 para ser exactos) :

Hay un ejemplo completo en la página del manual que señalé ;-)


ArrayObject implementa la interfaz ArrayAccess (y algunas más). Al utilizar el indicador ARRAY_AS_PROPS , proporciona la funcionalidad que está buscando.

$obj = new ArrayObject(array(), ArrayObject::ARRAY_AS_PROPS); $obj->foo = ''bar''; echo $obj[''foo''];

Alternativamente, puede implementar la interfaz ArrayAccess en una de sus propias clases:

class Foo implements ArrayAccess { public function offsetExists($offset) { return isset($this->$offset); } public function offsetGet($offset) { return $this->$offset; } public function offsetSet($offset , $value) { $this->$offset = $value; } public function offsetUnset($offset) { unset($this->$offset); } } $obj = new Foo; $obj->foo = ''bar''; echo $obj[''foo''];