¿Cómo obtengo una propiedad en un PHP basada en una cadena? Lo llamaré magic
. Entonces que es magic
?
$obj->Name = 'something';
$get = $obj->Name;
seria como...
magic($obj, 'Name', 'something');
$get = magic($obj, 'Name');
php
string
oop
properties
Daniel A. White
fuente
fuente
ArrayAccess
,Countable
y una de las interfaces de iterador, es casi imposible de distinguir de lo normalarray()
Si desea acceder a la propiedad sin crear una variable intermedia, use la
{}
notación:Eso también le permite construir el nombre de la propiedad en un bucle, por ejemplo:
fuente
$this->{$property}[$name]
, de lo contrario$this->$property[$name]
se generará un error$this->$property[$name]
realmente tenga éxito, aunque es probable que sea un error.$name
se lanza silenciosamente a un número entero. En el caso de una cadena no numérica, esto es0
. Entonces este índice de cadena del valor de$property
se usa como el nombre de la propiedad. Si$property
contiene el valor "abc", esto se referirá a la propiedad$this->a
(índice 0). Si existe tal propiedad, esto tendrá éxito.Lo que estás preguntando se llama Variable Variables . Todo lo que necesita hacer es almacenar su cadena en una variable y acceder a ella así:
fuente
¿Algo como esto? No lo he probado, pero debería funcionar bien.
fuente
Simplemente almacene el nombre de la propiedad en una variable y use la variable para acceder a la propiedad. Me gusta esto:
fuente
Puede haber respuestas a esta pregunta, pero es posible que desee ver estas migraciones a PHP 7
fuente: php.net
fuente
Es simple, $ obj -> {$ obj-> Name} los corchetes envolverán la propiedad como una variable variable.
Esta fue una búsqueda superior. Pero no resolvió mi pregunta, que estaba usando $ this. En el caso de mi circunstancia, usar el soporte rizado también ayudó ...
ejemplo con Code Igniter obtener instancia
en una clase de biblioteca de origen llamada algo con una instancia de clase padre
la clase de biblioteca que necesita obtener de otra clase también con la instancia de los padres
fuente
Solo como una adición: de esta manera puede acceder a propiedades con nombres que de otro modo serían inutilizables
(No es que debas hacerlo, pero en caso de que tengas que hacerlo).Si quieres hacer cosas aún más elegantes, debes mirar en la reflexión
fuente
En caso de que alguien más quiera encontrar una propiedad profunda de profundidad desconocida, se me ocurrió lo siguiente sin necesidad de recorrer todas las propiedades conocidas de todos los niños.
Por ejemplo, para encontrar $ Foo-> Bar-> baz, o $ Foo-> baz, o $ Foo-> Bar-> Baz-> dave, donde $ path es una cadena como 'foo / bar / baz'.
Y luego llame con algo como:
fuente
Aquí está mi intento. Tiene algunas comprobaciones comunes de 'estupidez' incorporadas, asegurándose de que no intente establecer u obtener un miembro que no esté disponible.
Puede mover esas verificaciones 'property_exists' a __set y __get respectivamente y llamarlas directamente dentro de magic ().
fuente
Lo que hace esta función es verificar si la propiedad existe en esta clase de cualquiera de sus hijos, y si es así, obtiene el valor, de lo contrario, devuelve nulo. Entonces ahora las propiedades son opcionales y dinámicas.
Uso:
fuente
por qué editar: antes: usando eval (evil) después: no eval en absoluto. ser viejo en este idioma
fuente