ya tengo localizado el problema que he tenido dias atrás sobre el funcionamiento de una clase. tengo problema y solucion, pero como a parte de hacerlo, me gusta saber y aprender el porqué, lo expongo puesto que así seguro que me podréis ayudar.
Primero un poco de código con una pequeña maqueta que he hecho:
index1.php
Código PHP:
<?php
include_once("clase1.php");
$inst1 = new clase1();
$inst1->imprimir();
$inst2 = new clase1();
$inst2->imprimir();
$inst2->imprimir();
?>
Código PHP:
<?php
class clase1
{
private $var1;
private $var2;
function __construct()
{
include("variable.php");
$this->var1=$var1;
$this->var2=null;
echo ("<br> Estoy en constructor.");
echo ("<br> El valor de var1 es: " . $this->var1 . "<br>");
}
public function imprimir()
{
echo ("Hago algo por hacer");
}
function __destruct()
{
unset($this->var1);
unset($this->var2);
echo ("<br> Estoy en destructor.");
}
}
Código PHP:
<?php
$var1=("hola");
?>
Código HTML:
Estoy en constructor. El valor de var1 es: hola Hago algo por hacer Estoy en constructor. El valor de var1 es: hola Hago algo por hacerHago algo por hacer Estoy en destructor. Estoy en destructor.
Código HTML:
Estoy en constructor. El valor de var1 es: hola Hago algo por hacer Notice: Undefined variable: var1 in /var/www/web0.home/clase1.php on line 10 Estoy en constructor. El valor de var1 es: Hago algo por hacerHago algo por hacer Estoy en destructor. Estoy en destructor.
- si usamos un include, "incluimos" el contenido del archivo "dentro" del código donde lo estamos importando. No podemos incluir dos veces el miso archivo (si contiene funciones) puesto que no se permite.
- si usamos un include_once, al igualque el anterior se "incluye" el contenido, pero con la diferencia que solo se carga si no estuvo cargado previamente, por lo que podemos hacer 20 include_once del mismo archivo, se ejecutaria/cargaria el primero y el resto se "omitirian" puesto que ya está cargado lo que toca.
Si solo contiene variables, se puede usar include sin problemas, pero, porque no include_once en mi ejemplo? no lo he cargado ya y está en memoria? Ademas, no he entrado en el "destructor" y por tanto todavía no he destruido las variables y su contenido, o estoy en un error?
Esperando vuestros comentarios para ver si así puedo entender el porqué de la cuestion.
Muchas gracias