Foros aprenderaprogramar.com

Aprender a programar => C, C++, C#, Java, Visual Basic, HTML, PHP, CSS, Javascript, Ajax, Joomla, MySql y más => Mensaje iniciado por: gatoher en 20 de Marzo 2016, 21:39

Título: PHP definir una clase estática static que no requiera creación de objetos
Publicado por: gatoher en 20 de Marzo 2016, 21:39
   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?
Título: Re:PHP definir una clase estática static que no requiera creación de objetos
Publicado por: César Krall en 22 de Marzo 2016, 16:45
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!