Foros del Web » Programando para Internet » PHP »

Scope de las funciones en classes

Estas en el tema de Scope de las funciones en classes en el foro de PHP en Foros del Web. Tengo una clase que necesita unas cuantas variables, y algunas vienen definidas en un archivo que incluyo en todas las páginas. Esto hace que algunas ...
  #1 (permalink)  
Antiguo 22/04/2003, 05:21
Avatar de Cain  
Fecha de Ingreso: enero-2002
Ubicación: Catalunya
Mensajes: 6.459
Antigüedad: 15 años, 11 meses
Puntos: 17
Scope de las funciones en classes

Tengo una clase que necesita unas cuantas variables, y algunas vienen definidas en un archivo que incluyo en todas las páginas. Esto hace que algunas variables queden definidas fuera de la clase.

Ejemplo simplificado:
Código PHP:
<?
$tres 
3;

class 
miclase{
  var 
$uno 1;
  var 
$dos 2;

 function 
calcula() {
 return 
$uno+$dos+$tres;
}

}
?>
Teóricamente, la función calcula debería devolver 3 (1+2) puesto que la variable $tres ha sido definida fuera de la clase y, por lo tanto, no es accesible desde dentro de la clase, con lo que evaluaría a 0.

Sin embargo, me encuentro con que la función calcula() está devolviendo 6 (1+2+3), con lo que la función $tres está siendo accedida desde dentro de la clase.

Entonces, yo me pregunto ¿es esto normal? ¿debe haber algo configurado extrañamente en el php.ini?
__________________
M a l d i t o F r i k i
  #2 (permalink)  
Antiguo 22/04/2003, 05:27
Ex Colaborador
 
Fecha de Ingreso: junio-2002
Mensajes: 9.091
Antigüedad: 15 años, 5 meses
Puntos: 16
Hola,

Curioso, ¿que version tienes? Porque yo tengo entendido (y creo que viene en el manual) que para acceder a las variables miembro (propiedades) de la clase debes hacerlo a traves de $this:
Código PHP:
$this->uno
Voy a mirarlo en el manual.

[Editado]Pues en el manual pone lo de $this. Haber donde has metido mano, Cain.[/Editado]

Saludos.
__________________
Josemi

Aprendiz de mucho, maestro de poco.

Última edición por josemi; 22/04/2003 a las 05:31
  #3 (permalink)  
Antiguo 22/04/2003, 05:29
Avatar de Cain  
Fecha de Ingreso: enero-2002
Ubicación: Catalunya
Mensajes: 6.459
Antigüedad: 15 años, 11 meses
Puntos: 17
PHP Version 4.1.2

Era una clase que venia hecha, y lo que he hecho ha sido quitar unas cuantas variables de la clase porque las había definido antes. No comprendo como es posible que funcione
__________________
M a l d i t o F r i k i

Última edición por Cain; 22/04/2003 a las 05:32
  #4 (permalink)  
Antiguo 22/04/2003, 06:30
Avatar de Cain  
Fecha de Ingreso: enero-2002
Ubicación: Catalunya
Mensajes: 6.459
Antigüedad: 15 años, 11 meses
Puntos: 17
Esto... ¿Oyeron hablar del proxy de Telefonica?

He ctrl+actualizado la página y ya no funciona. Ahora ya puedo seguir trabajando normal
__________________
M a l d i t o F r i k i
  #5 (permalink)  
Antiguo 22/04/2003, 08:42
Avatar de epplestun  
Fecha de Ingreso: octubre-2001
Mensajes: 1.621
Antigüedad: 16 años, 1 mes
Puntos: 5
jejje :) mu bien

El caso es, en PHP5 se añaden las PPP, private, public y protected, son tipos de variables o funciones, es deicr puedes dar niveles de acceso a las funciones y a las variables de la clase como en c++ o java.

En cuanto a tu code .... pos lo que dijo Josemi, $this-> o sino con el nombre de la clase.

Código PHP:
clase::variable 2
El caso es, no puedes trabajar con variables externas a la clase, una solucion es definiendo el valor de la variable, es decir:

Código PHP:
define("tres",3);

class 
clase
{
var 
$uno 1;
function 
calcula()
{
return (
$this->uno+tres);
}
}

$ob = new clase;
echo 
$ob->calcula(); 
Eso te devolvera 4.

Es una solución chapuzera pero weno ....
__________________
Usuario registrado de Linux #288725
  #6 (permalink)  
Antiguo 22/04/2003, 09:17
Avatar de Cain  
Fecha de Ingreso: enero-2002
Ubicación: Catalunya
Mensajes: 6.459
Antigüedad: 15 años, 11 meses
Puntos: 17
O así, ¿no?:

Código PHP:
<?
$tres 
3;

class 
miclase{
  var 
$uno=1;
  var 
$dos=2;

 function 
calcula() {
 return 
$this->uno+$this->dos+$this->$GLOBALS["tres"];
 }
}
?>
__________________
M a l d i t o F r i k i
  #7 (permalink)  
Antiguo 22/04/2003, 09:24
Ex Colaborador
 
Fecha de Ingreso: junio-2002
Mensajes: 9.091
Antigüedad: 15 años, 5 meses
Puntos: 16
Tal como lo has puesto:
Código PHP:
 return $this->uno+$this->dos+$this->$GLOBALS["tres"]; 
equivale a
Código PHP:
 return $this->uno+$this->dos+$this->3
($GLOBALS['tres'] se sustituye por su valor).

Lo que quieres es poner sin el $this:
Código PHP:
 return $this->uno+$this->dos+$GLOBALS["tres"]; 
Aunque yo sinceramente pasaria el valor externo a la clase como parametro.

Saludos.
__________________
Josemi

Aprendiz de mucho, maestro de poco.
  #8 (permalink)  
Antiguo 22/04/2003, 12:12
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
Deberías pasar los varlores que requierean tus funciones como parámetro (ya sea referencia o no ..).

Usar $GLOBLAS .. creo q hecha por tierra la filosofia de "objetos" .. usando el objeto (classe) como si fuera solo un montón de funciones agrupadas ... y no con todo el tema de herencias y afines ...

Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.
  #9 (permalink)  
Antiguo 23/04/2003, 02:59
Avatar de Cain  
Fecha de Ingreso: enero-2002
Ubicación: Catalunya
Mensajes: 6.459
Antigüedad: 15 años, 11 meses
Puntos: 17
Estoy empezando recién con las clases y me hago mucho lío. Estoy mirando la documentación de php.net y no me aclaro, he estado mirando http://www.phpbeginner.com y con eso ya voy tirando.

¿Sabéis de algún tutorial sobre clases para principiantes?
__________________
M a l d i t o F r i k i
  #10 (permalink)  
Antiguo 23/04/2003, 04:09
 
Fecha de Ingreso: agosto-2002
Ubicación: Colón - Entre Rios - Argentina
Mensajes: 647
Antigüedad: 15 años, 3 meses
Puntos: 8
Yo aprendi con el de zonaphp.com. Un consejo sobre este manual: se te hace muuuucho mas fácil si lo estudias desde el link de "version para imprimir" que tenes en el top de la pagina.
Claro que después lo vas complementando con lo que hay en php.net.

Saludos.
  #11 (permalink)  
Antiguo 23/04/2003, 04:26
Avatar de Cain  
Fecha de Ingreso: enero-2002
Ubicación: Catalunya
Mensajes: 6.459
Antigüedad: 15 años, 11 meses
Puntos: 17
Pues ya lo revisaré. Gracias
__________________
M a l d i t o F r i k i
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 20:36.