Ver Mensaje Individual
  #9 (permalink)  
Antiguo 15/01/2009, 15:40
GermanBsAs
 
Fecha de Ingreso: septiembre-2004
Mensajes: 252
Antigüedad: 20 años, 1 mes
Puntos: 0
Respuesta: ¿Redeclarar un clase?

Cita:
Iniciado por enriqueplace Ver Mensaje
Ojo, una cosa es "requerir una clase" y otra "redefinir una clase", pero si lo que realmente necesita es tener una clase "A" con distintos códigos, la verdad, sí me parece desprolijo.
Jamas puse nada de requerir clases que yo sepa se requieren ficheros ( si el fichero contiene o no una clase, no me interesa). Y El thread no habla de necesitar redefinir clases

digamos que
clase A
esta definida en el fichero
CA.class.php


y que clase B siendo una derivada de a requiere el fichero en donde esta declarada la clase A

Código PHP:
/**
 *  Filename: CB.class.php
 */
require 'CA.class.php';
Class 
extends A{} 
Y por alguna otra razon hay una segunda clase derivada de A llamada clase C


Código PHP:
/**
 *  Filename: CC.class.php
 */
require 'CA.class.php';
Class 
extends A{} 
para invocar un objeto de la clase B un script cliente de esa clase debe invocar al fichero CB.class.php


Código PHP:
require 'CB.class.php';
$actorB= new B
Donde se invoca al fichero 'CB.class.php'; y este mismo invoca al fichero 'CA.class.php';
Todavia vamos bien , asi que no hay problema hasta ahora


Ahora digamos que hay otro script que requiere un objeto de la clase B y C al mismo tiempo

Código PHP:
require 'CB.class.php';
require 
'CC.class.php';
$actorB= new B;
$actorC= new C
Donde 'CB.class.php'; y este mismo invoca al fichero 'CA.class.php'; y 'CC.class.php'; y este mismo invoca al fichero 'CA.class.php';
o osea que en algun momento de ejecucion de ese script va a dar un error dde redefinicion de clases.

Encapsulando la clase definiendo una constante si ya fue instanciada una vez evita ese error.
Código PHP:
if(!defined("MICLASE"))
{
   
define("MICLASE"1);
   

   class 
miClase
   
{
          public function 
__construct()
          {
          }
   }

Es tambien una metodologia muy comun en C++
Código:
#ifndef A_H_
#define A_H_

class A {
public:
	A();
	virtual ~A();
};

#endif /* A_H_ */

Última edición por GermanBsAs; 15/01/2009 a las 16:03