Foros del Web » Programando para Internet » PHP » Frameworks y PHP orientado a objetos »

POO, variables globales y require. ¿Alcance de variables?

Estas en el tema de POO, variables globales y require. ¿Alcance de variables? en el foro de Frameworks y PHP orientado a objetos en Foros del Web. Veran tengo una clase con una funcion que contiene algo asi Código PHP: $this -> Controller -> add ( 'PagesController' ,  'pages.php' ); $result  =  ...
  #1 (permalink)  
Antiguo 05/07/2011, 13:45
Avatar de Carlmycol  
Fecha de Ingreso: diciembre-2007
Ubicación: Los Teques, Venezuela
Mensajes: 240
Antigüedad: 17 años
Puntos: 3
POO, variables globales y require. ¿Alcance de variables?

Veran tengo una clase con una funcion que contiene algo asi

Código PHP:
$this->Controller->add('PagesController''pages.php');
$result $this->Controller->Extensions['PagesController']->Index($p);
$bname $this->Controller->Extensions['PagesController']->block;
$this->View->addBlock($bname$result); 
Lo que hace, esencialmente, es añadir al controlador un modulo, lo ejecuta y este le pide al modelo que le devuelva los resultados, Ok. Luego esos resultados se los paso a la vista.

A la hora de cargar el template, la vista crea una variable con todos los datos recogidos por el controlador, de esta forma:
$var['nombre'] .. Nombre de la página
$var['posts'] .. Array asociativa con los posts de la página, etc..

Luego de esto hace un require al template, de esta forma, el template puede usar $var para hacer de las suyas. La cosa es la siguiente, quiero cambiar un echo $var['nombre'] ṕor algo como app_name(), sin embargo no hallo donde colocar estas funciones, si en la vista, el controlador, o en ¿donde?

Intenté colocarla fuera de todas las clases asi
Código PHP:
function app_name() { global $var; echo $var['name']; } 
(Aunque no sé que tan conveniente sería usar global)

Resultó un desastre, no se si logré explicarme, agradecería cualquier ayuda aquí

Saludos
  #2 (permalink)  
Antiguo 05/07/2011, 14:39
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años, 6 meses
Puntos: 2135
Respuesta: POO, variables globales y require. ¿Alcance de variables?

¿Que Framework estas usando?
  #3 (permalink)  
Antiguo 05/07/2011, 15:35
Avatar de Carlmycol  
Fecha de Ingreso: diciembre-2007
Ubicación: Los Teques, Venezuela
Mensajes: 240
Antigüedad: 17 años
Puntos: 3
Respuesta: POO, variables globales y require. ¿Alcance de variables?

Es un framework creado, bastante sencillo..
  #4 (permalink)  
Antiguo 05/07/2011, 15:48
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años, 6 meses
Puntos: 2135
Respuesta: POO, variables globales y require. ¿Alcance de variables?

Pues, global no es muy recomendable usarlo porque es complicar luego un sistema al no saber de donde viene exactamente el valor, o donde se definió...

Lo mejor es usar en ese caso algo como el patrón Registry donde puedes almacenar variables y luego consultarlas.

Saludos.
  #5 (permalink)  
Antiguo 08/07/2011, 08:31
Avatar de Carlmycol  
Fecha de Ingreso: diciembre-2007
Ubicación: Los Teques, Venezuela
Mensajes: 240
Antigüedad: 17 años
Puntos: 3
Globales vs Sesiones ( vs Constantes? ) en POO

Verán, tengo una clase Vista como la siguiente.

Código PHP:
Ver original
  1. class View
  2. {
  3.     private $Template;
  4.     private $File;
  5.     private $VARS;
  6.    
  7.     public function SetTemplate($path = 'default/' )
  8.     {
  9.         $this->Template = TEMPLATES_PATH . $path;
  10.     }
  11.    
  12.     public function AddBlock($s, $n)
  13.     {
  14.         $this->VARS[$s] = $n;
  15.     }
  16.    
  17.     public function SetFile($file)
  18.     {
  19.         $this->File=$file;
  20.     }
  21.    
  22.     public function Renderize()
  23.     {
  24.         ${APP_VARS_NAME}=$this->VARS;
  25.         require_once($this->Template.$this->File);
  26.     }
  27.    
  28. }

Bien, la vista al ejecutar Renderize, crea una variable con el nombre de la constante APP_VARS_NAME, y hace require el file indicado por el controlador. EL inconveniente es el siguiente:

El view crea un arreglo como este
$VARS['products']
$VARS['site]['name'] .. etc.. etc..

Yo quiero cambiar ese echo $VARS['products'] por show_products() en la template, se me ocurrió hacer la función dentro del View, pero esto sería casi extremadamente rudimentario (No se que pensaran ustedes), así que pensé, puedo crear la variable global y el View simplemente trabaja sobre esa global (las funciones como show_products() pueden acceder a esas variables globales $GLOBAL), pero no se que tan conveniente sería usar globales, he leído que es poco conveniente en cuanto eficiencia, podría utilizar también sesiones para guardar la información, pero no estoy seguro. ¿Cual sería la mejor solución?

Saludos
  #6 (permalink)  
Antiguo 08/07/2011, 08:42
Avatar de abimaelrc
Colaborador
 
Fecha de Ingreso: mayo-2009
Ubicación: En el planeta de Puerto Rico
Mensajes: 14.734
Antigüedad: 15 años, 6 meses
Puntos: 1517
Respuesta: Globales vs Sesiones ( vs Constantes? ) en POO

Lo primero que para crear constantes en una clase lo haces así http://www.php.net/manual/en/languag....constants.php

¿Y porque no creas unos helpers? Ejemplos de uso http://devzone.zend.com/article/3350
__________________
Verifica antes de preguntar.
Los verdaderos amigos se hieren con la verdad, para no perderlos con la mentira. - Eugenio Maria de Hostos
  #7 (permalink)  
Antiguo 08/07/2011, 09:08
Avatar de Carlmycol  
Fecha de Ingreso: diciembre-2007
Ubicación: Los Teques, Venezuela
Mensajes: 240
Antigüedad: 17 años
Puntos: 3
Respuesta: Globales vs Sesiones ( vs Constantes? ) en POO

Buenas, ¿de que forma los helpers ayudarían en este caso?

Porque si los aplico, ¿como los llamaría dentro del template? ¿Como $this->getHelper('products')->product_name()?

PD: Ahora que lo pienso, la primera pregunta es algo irónica.

Saludos, muchas gracias por responder.
  #8 (permalink)  
Antiguo 08/07/2011, 10:53
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años, 6 meses
Puntos: 2135
Respuesta: POO, variables globales y require. ¿Alcance de variables?

Temas unidos por favor NO dupliques temas.

Etiquetas: globales, php, poo, require, sesiones, variables
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 10:21.