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'));
//funciona
echo '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]
<?php

class 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!