Test Foro de elhacker.net SMF 2.1

Programación => Desarrollo Web => PHP => Mensaje iniciado por: N4X en 19 Enero 2010, 12:13 PM

Título: Duda con funcion dentro de funcion en un echo
Publicado por: N4X en 19 Enero 2010, 12:13 PM
Bueno, ayer programando unas cosillas me saltó este "problema"

que en realidad no es un problema, solo es incomodo....

tengo una web que carga un index, y según parametros carga una web u otra...
bien, el caso es que la página que carga tiene una función principal y dentro otras funciones

el code es algo así:

index.php
Código (php) [Seleccionar]

<?php
include_once('text.php');
include_once(
'functions/basic.php');

if (
$_GET['ac'] == 'news')
   include_once(
'news.php');

head(); //las 3 mas abajo
middle();
foot();
//no es exactamente así pero para que se entienda xD
?>


<?php
functions/basic.php
Código (php) [Seleccionar]

function head() {
      echo 'los heads y el inicio de una tabla';
}
function foot() {
     echo 'el final de la tabla y el pie de pagina';
} ?>


news.php
Código (php) [Seleccionar]

<?php

function middle() {

echo 
'la continuacion de la tabla'.funcion().'cierro celdas'//lo raro esta aqui
}
function 
funcion {
 echo 
'por ejemplo el contenido de la celda';

}
?>



que sucede? bueno... funcion() al ser llamada mostraria "por ejemplo el contenido de la celda" encima de la tabla que se creó y la celda donde deberia ir se veria mal...

como lo arreglo?

Código (php) [Seleccionar]

echo 'la continuacion de la tabla'; funcion() ; echo 'cierro celdas'; //lo raro esta aqui


es eficaz pero es mas molesto que poner un par de concatenaciones... alguien sabe porqué sucede esto? (si pongo un return y no un echo sucede lo mismo...

dejo un par de imagenes:
asi está mal:http://img130.imageshack.us/img130/9913/funcionesmal.jpg
así esta bien:http://img63.imageshack.us/img63/3640/funcionesbien.jpg

saludos
nax
Título: Re: Duda con funcion dentro de funcion en un echo
Publicado por: Castg! en 20 Enero 2010, 03:06 AM
proba asi:
Código (php) [Seleccionar]
function funcion() {
return 'por ejemplo el contenido de la celda';
}
Título: Re: Duda con funcion dentro de funcion en un echo
Publicado por: cassiani en 20 Enero 2010, 04:06 AM
si, con el return no debería tener problemas, aunque el menciona que le va igual.

saludos!!
Título: Re: Duda con funcion dentro de funcion en un echo
Publicado por: Castg! en 20 Enero 2010, 04:14 AM
entonces proba como te dije antes y esto mas:
Código (php) [Seleccionar]
echo 'la continuacion de la tabla';
echo funcion();
echo 'cierro celdas'; //lo raro no esta mas aqui :p
Título: Re: Duda con funcion dentro de funcion en un echo
Publicado por: ~ Yoya ~ en 21 Enero 2010, 00:29 AM
Cita de: cΔssiΔni en 20 Enero 2010, 04:06 AM
si, con el return no debería tener problemas, aunque el menciona que le va igual.

saludos!!
La función return, retorna un valor, mayormente se usa junto a funciones, pero en este caso no se quiere retornar un valor, si no que solo imprimirlo, las subrutinas se pueden usar para crear funciones o crear sub codigos que estan dentro del codigo principal.
Título: Re: Duda con funcion dentro de funcion en un echo
Publicado por: Castg! en 21 Enero 2010, 00:44 AM
es verdad, justo ahora estoy usando una bermuda de jean!

que flasheaste yoya?? jajajaj
a el le pasaban dos cosas:
1. si en la funcion la terminaba con
echo "cadena";

Código (php) [Seleccionar]
<?php
 
function middle() {
 
echo 
'la continuacion de la tabla'.funcion().'cierro celdas'
//aca iba a haber error, porq la cadena "cierro celdas" queda "descolgada",

}
function 
funcion {
 echo 
'por ejemplo el contenido de la celda';
 
}
echo 
'la continuacion de la tabla'funcion() ; echo 'cierro celdas'//aca no pasaria nada, porq no interviene con las otras dos funciones echo
?>




ahora:
2. si terminaba la funcion con return iba a pasar al revez,

asi que pruebemi codigo, me gustaria que respondas! un saludo grande
Título: Re: Duda con funcion dentro de funcion en un echo
Publicado por: N4X en 21 Enero 2010, 18:12 PM
con return funciona perfectamente...

debió ser un segundo fallo y no lo que yo creia en un principio...

luego depurando me di cuenta que el error no estaba ahí

perdonen la molestia y la tardansa de contestar  :)