nueva clase es una subclase del objeto original¿Cómo copiar un objeto PHP en un tipo de objeto diferente
Tiene que ser php4 compatibles
Respuesta
que podría tener su clases instanciadas vacías y luego cargadas por cualquier cantidad de métodos. Uno de estos métodos podrían aceptar una instancia de la clase padre como un argumento y, a continuación, copiar los datos desde allí
class childClass extends parentClass
{
function childClass()
{
//do nothing
}
function loadFromParentObj($parentObj)
{
$this->a = $parentObj->a;
$this->b = $parentObj->b;
$this->c = $parentObj->c;
}
};
$myParent = new parentClass();
$myChild = new childClass();
$myChild->loadFromParentObj($myParent);
me podría imaginar que habría tiene que inventar algún tipo de "constructor de copia". Entonces solo crearías un nuevo objeto de subclase mientras pasabas el objeto original.
El mejor método sería crear un método clone en la Subclase de manera que se podía hacer:
$myvar = $subclass->clone($originalObject)
Alternativamente parece que usted podría mirar en el patrón decorador php example
No va para PHP4, a menos que implemente clonar yo mismo –
Un objeto PHP no es mucho diferente de una matriz, y puesto que todos los objetos de PHP 4 las variables son públicas, puede hacer algunas cosas desordenado como esto:
function clone($object, $class)
{
$new = new $class();
foreach ($object as $key => $value)
{
$new->$key = $value;
}
return $new;
}
$mySubclassObject = clone($myObject, 'mySubclass');
no es bonita, y su claro que no es lo que yo consideraría como una buena práctica, pero es reutilizable, y es bastante limpio .
Puedes hacerlo con un poco de magia negra, aunque en serio preguntaría por qué tienes este requisito en primer lugar. Sugiere que hay algo muy mal con su diseño.
No obstante:
function change_class($object, $new_class) {
preg_match('~^O:[0-9]+:"[^"]+":(.+)$~', serialize($object), $matches);
return unserialize(sprintf('O:%s:"%s":%s', strlen($new_class), $new_class, $matches[1]));
}
Esto está sujeto a las mismas limitaciones que serialize en general, lo que significa que las referencias a otros objetos o recursos se pierden.
En serio, funciona. ¡¿Pero cómo?! – Alfa
- 1. Cómo deserializar un objeto persistido en un db ahora cuando el objeto tiene un serialVersionUID diferente
- 2. ¿Cómo convertir un objeto en su tipo?
- 3. Manera pitónica de copiar un objeto iterable
- 4. Copiar objeto en otro
- 5. cómo emitir dinámicamente un objeto de tipo string a un objeto de tipo T
- 6. objeto de acceso desde un hilo diferente
- 7. ¿Cómo "clonar" un objeto en un objeto de subclase?
- 8. Usando un nuevo operador para copiar un objeto en un montón sin conocer su tipo
- 9. Cómo recorro un objeto SimpleXML en PHP
- 10. ¿Cómo encontrar un objeto de cierto tipo en un NSArray?
- 11. ¿Cómo puedo copiar profundamente un objeto arbitrario en GWT?
- 12. Cómo copiar todas las propiedades de un objeto a otro objeto, en Python?
- 13. ¿Cómo reemplazar una instancia en __init __() con un objeto diferente?
- 14. PHP: Cuente un objeto stdClass
- 15. php - restablecer/borrar un objeto?
- 16. Agregar atributo a un objeto en PHP
- 17. ¿Cómo puedo obtener un objeto HDC de un objeto CDC?
- 18. Determinación del nombre de un objeto PHP
- 19. cómo convertir un json a un objeto php en symfony2?
- 20. ¿Es una matriz un tipo primitivo o un objeto (o algo completamente diferente)?
- 21. Explore un objeto COM en PHP
- 22. Conseguir tipo subyacente de un objeto proxy
- 23. Depurar un objeto DOMDocument en PHP
- 24. ¿Cómo verificar el tipo de un objeto en C++/CLI?
- 25. PHP: Obtener datos de un objeto
- 26. ¿Cómo convierto un objeto String en un objeto Hash?
- 27. cómo convertir un objeto timedelta en un objeto datetime
- 28. PHP: Destruye un objeto desde dentro del objeto?
- 29. Sesión de PHP con un objeto incompleto
- 30. C++ Copiar Constructor + Objeto Puntero
Esto es más o menos mi solución actual. Supongo que no puedo esperar otra magia para hacer esto. –