Foros del Web » Programando para Internet » PHP »

PHP OO include vs include_once en clase

Estas en el tema de include vs include_once en clase en el foro de PHP en Foros del Web. 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 ...
  #1 (permalink)  
Antiguo 13/09/2011, 20:56
 
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
  #2 (permalink)  
Antiguo 13/09/2011, 21:14
Avatar de Triby
Mod on free time
 
Fecha de Ingreso: agosto-2008
Ubicación: $MX->Gto['León'];
Mensajes: 10.106
Antigüedad: 15 años, 8 meses
Puntos: 2237
Respuesta: include vs include_once en clase

Lo que pasa es que puedes hacer include varias veces sobre el mismo archivo, incluso si tiene funciones declaradas, siempre y cuando se cargue en diferentes ambitos

$inst1, es una instancia y ambito diferente de $inst2, precisamente por eso con include_once $var1 no esta definida al crear la segunda instancia.

Por otra parte, se supone que en una clase deberias definir todas las variables (propiedades) y funciones (metodos) que requieras, a menos que estes cargando, por ejemplo, un archivo de cache o el contenido cambie cada vez... de otra forma no tendria sentido ese include.
__________________
- León, Guanajuato
- GV-Foto
  #3 (permalink)  
Antiguo 14/09/2011, 18:54
 
Fecha de Ingreso: septiembre-2011
Mensajes: 12
Antigüedad: 12 años, 7 meses
Puntos: 1
Respuesta: include vs include_once en clase

Hola Triby y demás:


Lo primero gracias por la respuesta,

Primero, te indico que esto es una "maqueta" de mi consulta. En realidad mi idea es declarar una o varias clases, y que las variables/propiedades (que pueden variar de un proyecto a otro) centralizarlas en un archivo. Entonces tocando solo en un lugar aplicaria cambios en todo el proyecto en sus distintos lugares.

Por otro lado, al igual que con include, si son ambitos e instancias diferentes, con include_once "detectaria" igualmente que el archivo no esta cargado y lo cargaria, no? Supongo que tendrá alguna explicacion lógica,,,,, o tal vez no, es así sin mas!

un saludo
  #4 (permalink)  
Antiguo 14/09/2011, 23:42
Avatar de Triby
Mod on free time
 
Fecha de Ingreso: agosto-2008
Ubicación: $MX->Gto['León'];
Mensajes: 10.106
Antigüedad: 15 años, 8 meses
Puntos: 2237
Respuesta: include vs include_once en clase

Supongo que PHP no toma en cuenta el ambito, sino que simplemente el archivo ya fue incluido por el interprete y no lo volvera a incluir.

Revisa este comentario http://mx2.php.net/manual/es/functio...once.php#84108, menciona algo similar.
__________________
- León, Guanajuato
- GV-Foto
  #5 (permalink)  
Antiguo 15/09/2011, 15:24
 
Fecha de Ingreso: septiembre-2011
Mensajes: 12
Antigüedad: 12 años, 7 meses
Puntos: 1
De acuerdo Respuesta: include vs include_once en clase

Hola:

Muchas gracias por la informacion y link. Era algo similar a lo que suponia. Así se que no estoy en un error y voy por el camino.

Un saludo y gracias
  #6 (permalink)  
Antiguo 15/09/2011, 15:31
Avatar de CesarHC  
Fecha de Ingreso: junio-2011
Ubicación: localhost
Mensajes: 566
Antigüedad: 12 años, 10 meses
Puntos: 56
Respuesta: include vs include_once en clase

Cita:
Iniciado por Triby Ver Mensaje
Lo que pasa es que puedes hacer include varias veces sobre el mismo archivo, incluso si tiene funciones declaradas, siempre y cuando se cargue en diferentes ambitos
A que te refieres con diferentes ambitos no entendi?.
__________________
Solo la práctica no te traicionara ¡¡¡¡¡¡

Seguir el camino tu debes PHP The Right Way.
  #7 (permalink)  
Antiguo 15/09/2011, 18:37
Avatar de Genetix  
Fecha de Ingreso: febrero-2002
Ubicación: Lima - Perú
Mensajes: 1.600
Antigüedad: 22 años, 2 meses
Puntos: 45
Respuesta: include vs include_once en clase

Hola
Cita:
Iniciado por grescafe Ver Mensaje
En realidad mi idea es declarar una o varias clases, y que las variables/propiedades (que pueden variar de un proyecto a otro) centralizarlas en un archivo. Entonces tocando solo en un lugar aplicaria cambios en todo el proyecto en sus distintos lugares.
un saludo
Al margen de los includes
Si deseas lograr eso puedes usar un archivo de configuración (.ini, xml, etc) u otro, donde inicialices las variables con los valores que necesites. porque de esa manera estas violando muchas leyes de la OOP y a la larga no es funcional

Saludos!
__________________
"El conocimiento nos hace responsables."
twitter: @benjamingb
blog personal: http://codigolinea.com
ZF Manual en español http://manual.zfdes.com
  #8 (permalink)  
Antiguo 15/09/2011, 19:12
Avatar de Triby
Mod on free time
 
Fecha de Ingreso: agosto-2008
Ubicación: $MX->Gto['León'];
Mensajes: 10.106
Antigüedad: 15 años, 8 meses
Puntos: 2237
Respuesta: include vs include_once en clase

CesarHC, te recomiendo leer sobre programacion orientada a objetos (OOP) y tambien sobre nombres de espacio, te aseguro que eso aclarara tus dudas.
__________________
- León, Guanajuato
- GV-Foto

Etiquetas: clase, include, include_once, poo
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 18:56.