es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

¿Cuál es el equivalente en PHP de $.extend() de jQuery?

¿Existe algo equivalente en PHP para $.extend() de jQuery?

Quiero combinar/unir/extender de forma pragmática clases con otras clases y sus propiedades (incluyendo métodos) sin usar late static binding.

class a {}
class b {}
class c {}

$merged = combine(new a(), new b(), new c());

Esto no es lo que estoy buscando:

class a {}
class b extends a {}

$merged = new b();
Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Sí, hay una equivalencia en PHP para $.extend() de jQuery. En PHP, podemos usar la función integrada “class_alias()” y “array_merge()” para lograr la fusión, extensión y combinación de clases.

    Aquí hay un ejemplo:

    class a {
        public $prop1 = 'a';
    }
    class b {
        public $prop2 = 'b';
    }
    class c {
        public $prop3 = 'c';
    }
    
    class_alias('a', 'd');
    class_alias('b', 'e');
    class_alias('c', 'f');
    
    $merged = (object) array_merge((array) new d(), (array) new e(), (array) new f());
    
    var_dump($merged);
    

    Esto mostrará:

    object(stdClass)#1 (3) {
      ["prop1"]=>
      string(1) "a"
      ["prop2"]=>
      string(1) "b"
      ["prop3"]=>
      string(1) "c"
    }
    

    Aquí, estamos usando “class_alias()” para crear alias de nuestras clases para poder asignarlas dinámicamente a un nuevo objeto. Luego, estamos usando “array_merge()” para fusionar los arreglos de propiedades y crear un nuevo objeto. Finalmente, estamos convirtiendo el arreglo fusionado en un objeto para obtener un nuevo objeto que contenga todas las propiedades y métodos de las clases originales.

    Este enfoque nos permite fusionar cualquier número de clases sin usar enlace estático tardío.

Comments are closed.