Foros del Web » Programando para Internet » PHP » Frameworks y PHP orientado a objetos »

Saber si una clase ha sido instanciada

Estas en el tema de Saber si una clase ha sido instanciada en el foro de Frameworks y PHP orientado a objetos en Foros del Web. Buenas, me gustaria saber si existe la manera de saber si una clase ha sido instanciada o no...
  #1 (permalink)  
Antiguo 13/11/2012, 03:35
 
Fecha de Ingreso: octubre-2012
Ubicación: Austria
Mensajes: 47
Antigüedad: 11 años, 6 meses
Puntos: 7
Saber si una clase ha sido instanciada

Buenas, me gustaria saber si existe la manera de saber si una clase ha sido instanciada o no
  #2 (permalink)  
Antiguo 13/11/2012, 10:11
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 17 años, 11 meses
Puntos: 2135
Respuesta: Saber si una clase ha sido instanciada

Puedes usar instanceof para probar si una variable es una instancia de una clase en específico:
Código PHP:
Ver original
  1. if ($persona instanceof Persona) {
  2.        // bingo!
  3. }
  #3 (permalink)  
Antiguo 13/11/2012, 13:39
Avatar de abimex
Colaborador
 
Fecha de Ingreso: marzo-2007
Ubicación: ~
Mensajes: 751
Antigüedad: 17 años, 1 mes
Puntos: 137
Respuesta: Saber si una clase ha sido instanciada

creo que se refiere a si la clase se instancio, pues puedes hacer en el construct que logee algo
Código PHP:
Ver original
  1. class Carro{
  2.     public function __construct(){
  3.         // nueva instancia, a quien le digo??
  4.     }
  5. }
te recomiendo leer del patron observer
Saludos
  #4 (permalink)  
Antiguo 14/11/2012, 19:10
 
Fecha de Ingreso: octubre-2012
Ubicación: Austria
Mensajes: 47
Antigüedad: 11 años, 6 meses
Puntos: 7
Respuesta: Saber si una clase ha sido instanciada

Al final lo hize con el patron singleton, simplemente queria comprobar si habia una conexion de base de datos iniciada, este es el codigo

Código PHP:
class database {
    private 
$host;
    private 
$user;
    private 
$password;
    private 
$database;
    private 
$resultsql;
    public static 
$instance;
    public static 
$connectlink;


    private function 
__construct() { }

    public static function 
getInstance() {
        if (!isset(
self::$instance)) {
            
$db __CLASS__;
            
self::$instance = new $db;
        }
        return 
self::$instance;
    }
    public function 
connect($host,$user,$password,$database){
        
$this->host $host;
        
$this->user $user;
        
$this->password $password;
        
$this->database $database;

        
self::$connectlink mysql_connect($this->host,$this->user,$this->password) or DIE(mysql_error());

        if(!
self::$connectlink) {
            
trigger_error('A db connection is needed'E_USER_ERROR);
        }
        else {
            
mysql_select_db($this->database);
        }
    }
    
    public function 
disconnect() {
        @
mysql_close($this->connectlink);
    }
    public function 
__clone() {
        
trigger_error('Clone are not allowed'E_USER_ERROR);
    }


y para saber si la conexion esta inciada o no en ota clase uso esto:

Código PHP:
    public function __construct() {
        if (!isset(
database::$connectlink)) {
            
trigger_error('A db connection is needed for instance this class'E_USER_ERROR);

        }
    } 
Agradeceria muxo si me dijerais que fallos de disenio he cometido, puesto q estoy empezando con programacion orientada a objetos y patrones.

Muchas Gracias
  #5 (permalink)  
Antiguo 14/11/2012, 19:22
Avatar de abimex
Colaborador
 
Fecha de Ingreso: marzo-2007
Ubicación: ~
Mensajes: 751
Antigüedad: 17 años, 1 mes
Puntos: 137
Respuesta: Saber si una clase ha sido instanciada

Te recomendaría usar excepciones para lanzar los errores, así es más fácil atraparlos después, todo lo demás muy bien ;)
Saludos
  #6 (permalink)  
Antiguo 14/11/2012, 19:25
 
Fecha de Ingreso: octubre-2012
Ubicación: Austria
Mensajes: 47
Antigüedad: 11 años, 6 meses
Puntos: 7
Respuesta: Saber si una clase ha sido instanciada

Lo acabo de probar y tienes razon, va de lujo, muchas gracias!!!

Etiquetas: clase
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 16:22.