Ver Mensaje Individual
  #1 (permalink)  
Antiguo 13/09/2011, 20:56
grescafe
 
Fecha de Ingreso: septiembre-2011
Mensajes: 12
Antigüedad: 12 años, 7 meses
Puntos: 1
Sonrisa include vs include_once en clase

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