Hola de nuevo:
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();
?>
clase1.php
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.");
}
}
variable.php
Código PHP:
<?php
$var1=("hola");
?>
Y ahora el resultado
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.
Ahora bien, si pongo en vez de "include", un "include_once" en clase1.php, el resultado que obtengo es el siguiente:
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.
Hasta donde yo se que no es mucho y hablando de una forma rapida, una de las diferencias principales es que,
- 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