Foros del Web » Programando para Internet » PHP »

Librerías, funciones y variables

Estas en el tema de Librerías, funciones y variables en el foro de PHP en Foros del Web. Buenas! Tengo un problema, a ver si me podeis ayudar (y si me explico bien). Mirad, yo tengo una página principal en php donde incluyo ...
  #1 (permalink)  
Antiguo 23/01/2005, 20:19
 
Fecha de Ingreso: junio-2004
Mensajes: 23
Antigüedad: 13 años, 5 meses
Puntos: 0
Pregunta Librerías, funciones y variables

Buenas!
Tengo un problema, a ver si me podeis ayudar (y si me explico bien). Mirad, yo tengo una página principal en php donde incluyo una librería (sólo hay esto, la declaración de la librería). En esa librería tengo unas funciones declaradas con el contenido de la página (en html), y dentro del mismo contenido tengo algunas variables (las que tendré que modificar más a menudo) que me gustaría añadir a partir de otra librería, para tener solo que modificar ésta segunda.
He provado de incluirla en la página principal, y en los sitios donde creo que podría llamarla en la primera librería (antes de declarar las funciones, después, antes de las variables (dentro del html)...), pero nada... Es como si las variables de la primera librería no tubieran valor (o no lo pillaran de la segunda libería), y se me quedaran en blanco (el resto de la pájina sí se ve).
Alguien me dijo que debía importar las variables, pero no sé ni como hacerlo ni si lo debo hacer de la segunda a la primera librería, o de la primera a la página principal... Además, para importar variables solo he visto dos métodos: el Get para pasarlas por URL (cosa que creo que para mi no sirve, ya que los valores de las variables son muy largos), y el Post para formularios, que no es mi caso.
Me podeis echar un cable por favor? Gracias!
PD: Queda claro que mi conocimiento de PHP, por ahora, es limitado... Lo siento!
  #2 (permalink)  
Antiguo 24/01/2005, 02:05
Ex Colaborador
 
Fecha de Ingreso: junio-2002
Mensajes: 9.091
Antigüedad: 15 años, 5 meses
Puntos: 16
Hola,

Desde dentro de una funcion no puedes acceder directamente a las variables definidas fuera de la funcion, y mucho menos a las definidas en otra funcion.

En http://www.php.net/manual/en/languag...bles.scope.php tienes una explicacion mas detallada.

de todas formas, yo lo que haria seria usar parametros para las llamadas a esas funciones.

Salduos.
__________________
Josemi

Aprendiz de mucho, maestro de poco.
  #3 (permalink)  
Antiguo 24/01/2005, 05:12
 
Fecha de Ingreso: junio-2004
Mensajes: 23
Antigüedad: 13 años, 5 meses
Puntos: 0
A qué te refieres con "usar parámetros para las llamadas a esas funciones"?
Vamos, hago un esquema para que así me podais indicar mejor donde y qué debo poner, si no os importa, vamos...

indice.php:
<html><head><title></title></head>
<body>
<? include("libreria1.php");
c1();?>
</body></html>

libreria1.php:
<?function c1()
{$v1="<div>hola, me llamo <?php echo $a;?></div>";
echo $v1;}?>

libreria2.php:
<?php $a="josepet";?>

A ver si así me lo podeis especificar mejor. Gracias! ;)

Última edición por Fol2DTiS; 24/01/2005 a las 06:17
  #4 (permalink)  
Antiguo 24/01/2005, 06:17
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
Si tienes una función como "c1()" que usa una variable tipo $a que NO está definida en la función .. debes declararla como global o pasarla como parámetro:

Ejemplo declarando como global:

libreria1.php:
Código PHP:
<?
function c1(){
 global 
$a;
$v1="<div>hola, me llamo <?php echo $a;?></div>"
echo 
$v1;
}
?>
Ejemplo pasando como parámetro:
libreria1.php:
Código PHP:
<?
function c1($a){
$v1="<div>hola, me llamo <?php echo $a;?></div>"
echo 
$v1;
}
?>
Y hay otra más .. "como referencia":
Código PHP:
<?
function c1(&$a){
$v1="<div>hola, me llamo <?php echo $a;?></div>"
echo 
$v1;
}
?>
Un saludo,
  #5 (permalink)  
Antiguo 24/01/2005, 07:08
 
Fecha de Ingreso: junio-2004
Mensajes: 23
Antigüedad: 13 años, 5 meses
Puntos: 0
Ok, pero solo una preguntita más: y la segunda librería donde la incluyo? En la página índice o en la primera librería? Pq lo he estado provando con el mismo ejemplo que he puesto, y el nombre sigue sin aparecer. Entiendo que, si incluyo bien la segunda librería, y pasando la variable $a como parámetro en la función donde se encuentra ya me tendría que aprecer, no?
Gracias!
  #6 (permalink)  
Antiguo 24/01/2005, 08:55
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
Piensa en un "include()" como a llamar código que se añadirá al script "padre" que hace esas llamadas y todo junto va a ejecutar un sólo código que será la suma y desde donde lo uses.

Puedes tener tu libreria1.php y que esta llame por otro include() a la libreria2.php .. o por separado en el index.php llamas a tu libreria1,php y 2 por el include() correspondiente.

Eso sí .. el trabajo con las funciones será el mismo tanto si usas un "include" o si pones el código por completo en el script que corresponda. El "ambito" de las variables afecta a donde puedes llamarlas .. por eso requieres que en la función las declares como globales o bien las pases como parámetro/referencia en ella.

Un saludo,
  #7 (permalink)  
Antiguo 24/01/2005, 17:40
 
Fecha de Ingreso: junio-2004
Mensajes: 23
Antigüedad: 13 años, 5 meses
Puntos: 0
Bueno, más o menos ya he conseguido lo que quería, y la verdad es que al final ha sido bastante más sencillo. Mirad:

indice.php ->
<html><head><title></title></head>
<body>
<? include("libreria1.php");
c1();?>
</body></html>

libreria1.php ->
<? function c1()
{ include("libreria2.php"); $v1="<div>hola, me llamo $a </div>";
echo $v1;}?>

libreria2.php ->
<? $a="josepet" ?>

Vamos, que he incluido directamente la segunda librería en la función de la primera, y la variable dentro de la función está puesta tal cual, sin estar entre <? ?>
Si ponía la variable como global también servía, pero había leído que era mejor no hacerlo así.
Supongo que lo he hecho bien pues, no? Bueno, muchas gracias por vuestra ayuda! ;)
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 01:33.