Autor Tema: PHP definir una clase estática static que no requiera creación de objetos  (Leído 3381 veces)

gatoher

  • Principiante
  • **
  • APR2.COM
  • Mensajes: 86
    • Ver Perfil
   Hola a todos, estoy explorando el como crear un constructor en PHP  que admita varios tipos de parametros y sin tener en cuenta el orden de ellos cuando son enviados para crear las propiedades.

   He visto soluciones de o bien con el método __clone o creando un método que segun el número de parámetros  recividos mandaba a un constructor o a otro.

Eso esta bien pero siempre no puedes alterar el orden de los parámetros y poniendo null si un parámetro intermedio no quieres darle valor.

   Yo he hecho esto que me parece una solución pero no me acaba de satisfacer del todo y a ver si alguién tiene otro modo de hacerlo.

Código: [Seleccionar]
<?php/*     Created on : 20-mar-2016, 20:25:15    Author     : carlos*/class Objeto{    private $id;    private $nombre;    private $email;    /*    function __construct($id, $nombre, $email) {        $this->id = $id;        $this->nombre = $nombre;        $this->email = $email;    }  */          public function constructor($arrayPropiedades){        foreach ($arrayPropiedades as $key =>$value){        if(property_exists(__CLASS__, $key)){            $this->$key = $value;        } else{            echo "No existe el atributo $var";        }    }    }        public function __get($var){        if(property_exists(__CLASS__, $var)){            return $this->$var;        } else {            return  null;        }    }    //clase    }//Esto es lo que no me gusta, //tener que instanciar un objeto vacío primero// para poder acceder al método.$obj = new Objeto(); $obj2 = $obj->constructor(array('id' => 1,               'nombre' => 'carlos'));//funcionaecho 'Id: '.$obj->id;echo "Nombre: ".$obj->nombre;

   He intentado crear un método static para acceder a él mediante el nombre de la clase. Pero claro, entonces da error en el $this del método constructor().
   ¿Alguién tiene una solución mas #compiGoguy?
« Última modificación: 22 de Marzo 2016, 16:45 por César Krall »

César Krall

  • Moderador Global
  • Experto
  • *******
  • Mensajes: 2077
  • No vales por lo que dices, sino por lo que haces
    • Ver Perfil
    • aprenderaprogramar.com
Hola!

En programación orientada a objetos para poder acceder a un objeto primero tienes que crear una instancia del objeto. La línea $obj = new Objeto(); sirve aquí para instanciar un objeto. Sin crear una instancia de un objeto no se puede acceder a él.

La otra opción sería una clase donde definas métodos y funciones estáticas. En ese caso no necesitarás crear una instancia del objeto previamente (pero por otro lado te estarás alejando de lo que se supone es la programación orientada a objetos).

Ejemplo:

Código: [Seleccionar]
<?phpclass Hello{    private static $greeting = 'Hola a todos';    private static $initialized = false;    private static function initialize()    {    	if (self::$initialized)    		return;        self::$greeting .= ' amigos!';    	self::$initialized = true;    }    public static function greet()    {    	self::initialize();        echo self::$greeting;    }}Hello::greet(); // Hola a todos amigos!?>


Saludos!
Responsable de departamento de producción aprenderaprogramar.com

 

Sobre la educación, sólo puedo decir que es el tema más importante en el que nosotros, como pueblo, debemos involucrarnos.

Abraham Lincoln (1808-1865) Presidente estadounidense.

aprenderaprogramar.com: Desde 2006 comprometidos con la didáctica y divulgación de la programación

Preguntas y respuestas

¿Cómo establecer o cambiar la imagen asociada (avatar) de usuario?
  1. Inicia sesión con tu nombre de usuario y contraseña.
  2. Pulsa en perfil --> perfil del foro
  3. Elige la imagen personalizada que quieras usar. Puedes escogerla de una galería de imágenes o subirla desde tu ordenador.
  4. En la parte final de la página pulsa el botón "cambiar perfil".