Autor Tema: PHP definir una clase estática static que no requiera creación de objetos  (Leído 2453 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'));
//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?
« Última modificación: 22 de Marzo 2016, 16:45 por César Krall »

César Krall

  • Moderador Global
  • Experto
  • *******
  • Mensajes: 2078
  • 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]
<?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!
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".