New question

Question:

Date: 07-06-2018 11:16:27 (In Spanish)

Clases Anonimas en PHP[Unresolved]

Hola soy nuevo en esta comunidad soy estudiante de de ingenieria en sistemas
tengo 6 meses (I ciclo ) estudiando php la verdad no logro entender como funcionan las clases anonimas
ya manejo los conceptos de clase, herencia, Traits,encapsulamiento, etc
lo poco que he entendido de las clases anonimas es que se declaran asi:

$saludo = function() 
{
    return "Hola que tal";
};

echo $saludo();



pero no comprendo en que casos especificos utilizarla o cuales el beneficio que aporta
Tags: Concept - PHP - Question Votes: 2 - Answers: 3 - Views: 22 Share on: Google Facebook Twitter LinkedIn Link
 

Answers:

  • Date: 07-06-2018 12:14:57 Hola Juan Ochoa

    Fernando había realizado un aporte en la comunidad sobre CLOSURE / Funciones Anónimas en PHP.

    Te recomiendo que veas el siguiente aporte ¿Te gustaría aprender sobre Programación Funcional con PHP? de Mauro Chojrin donde prácticamente trata el tema en su webinario.

    Se realizó un desafío sobre el tema Fin de semana lúdico con PHP (Participa en este simple juego)

    Saludos
      Votes: 4 - Link answer
     
  • Date: 12-06-2018 03:16:40 Hola Juan:

    En realidad el código que estás mostrando corresponde a una función anónima, no a una clase. Como dice Walter (¡Muchas gracias por la mención!) puedes ver una explicación completa en este tema.

    Las clases anónimas en PHP también existen, un ejemplo sería:

    <?php
    
    $o = new class {
            public $p;
    };
    
    $o->p = 1;
    echo $o->p;


    Personalmente no le veo mucho sentido a esto, pero imagino que, como todo, algún caso de uso válido habrá :).

    Pregúntame cualquier duda que tengas!
      Votes: 2 - Link answer
     
  • Date: 12-06-2018 15:45:22 Buen aporte el de Mauro (se agradece!) sobre clases anónimas.

    En el ejemplo que expuso funciona a partir de PHP 7.1 si es que no estoy equivocado, en PHP 5.5 daría un mensaje como Parse error: syntax error, unexpected 'class' (T_CLASS)

    En un momento necesite crear un objeto al vuelo que no necesitaba tener una clase propiamente definida, me ha sido utili utilizar este tipo de clases.

    En PHP existe una clase predefinida en el lenguaje que se llama stdClass.
    ¿Y qué hace tan especial a esta clase? que no tiene ni propiedades, ni métodos, ni padre; es una clase vacía.

    ¿Y para qué queremos esta clase si no tiene nada? Podemos usar esta clase cuando necesitamos un objeto genérico al que luego le podremos añadir propiedades.

    El siguiente ejemplo es funcional para versiones 5.5.12 y 7.1.18 en la cuales he probado.

    <?php
    $web = new StdClass();
    $web->titulo = "PHPCentral | La comunidad del desarrollador PHP";
    $web->url = "https://www.phpcentral.com/";
    $web->descripcion = "PHPCentral es una comunidad online pensada para compartir conocimiento entre desarrolladores web de todas partes del mundo...";
    
    $web->site = function($dominio) {
                    return "URL: <a href=\"http://www.$dominio/\">$dominio</a>";
    };
    
    echo "<h1><a href=\"$web->url\">$web->titulo</a></h1>";
    echo "<p><em>$web->descripcion</em></p>";
    
    $site = $web->site; // asignar el método a una variable
    echo $site('phpcentral.com'); // pàsamos como argumento el dominio
    ?>
    



    Se obtiene como resultado:


    Con este código hemos creado un objeto al que luego le hemos añadido tres atributos. Esto nos puede servir cuando queremos tener un objeto que solo tenga datos y, por la razón que sea, no queremos crear una clase específica.


    Ahora jugando un poco con una clase anónima y array.

    <?php
    $datos = new StdClass();
    $datos->persona= (object)array('nombre'=>'Juan','apellido'=>'Perez', 'edad'=>30,'genero'=>'masculino');
    echo $datos->persona->apellido.', '.$datos->persona->nombre.' es del genero '.$datos->persona->genero.' y su edad es de '.$datos->persona->edad;
    

    Resultado:
    Perez, Juan es del genero masculino y su edad es de 30



    El próximo codigo es el mismo que el anterior pero no tan sintético para que se entienda un poco mejor.

    <?php
    $datos = new StdClass();
    $datos->persona= array('nombre'=>'Juan','apellido'=>'Perez', 'edad'=>30,'genero'=>'masculino');
    
    echo $datos->persona['nombre']; // Juan
    echo '<br>';
    //Convierto a Objeto usando un Cast de PHP 
    $objPersona = (object)$datos->persona; 
    echo $objPersona->apellido.', '.$objPersona->nombre.' es del genero '.$objPersona->genero.' y su edad es de '.$objPersona->edad;
    

    Resultado:
    Juan
    Perez, Juan es del genero masculino y su edad es de 30



    Espero que sea útil.

    Saludos
      Votes: 1 - Link answer
     
To actively participate in the community first must authenticate, enter the system.Sign In
 
frjcbbae garagebible.com