• Revista PROGRAMAR: Já está disponível a edição #53 da revista programar. Faz já o download aqui!

MROverclock

variaveis e funcoes

9 mensagens neste tópico

boas,

ando a fazer um pequeno projecto pessoal em php.

estava tudo a decorrer mt bem (devagarinho e tal) até que de repente surgiu um problema:

uma variável declarada e atribuído um valor numa função está disponível dentro da função que chamou a 1ª função?

dou um exemplo feito a pressao para mostrar o que quero:

function ola(){
$Tola = "ola!";
}

function TextOla(){
ola();
echo $Tola . " Como estás?";
}
TextoOla();

eu tenho a impressao que já tive isto a funcionar, mas de repente deixou de funcionar. se mandar imprimir as variáveis elas estão vazias. e não é o nome que está errado. isso foi logo a 1ª coisa que verifiquei.

Um abraço e obrigado.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Posso dar-te uma sugestão? Para o que queres fazer (ir buscar um valor a uma função, é preferível fazes isto:

function ola(){
return "ola!";
}

function textola(){
$tola = ola();
echo $tola." como estas?";
}

textola();

Anyway, se tu queres é definir numa função uma variável que pode depois ser usada em qq sítio, fazes assim:

function ola(){
global $tola; // aqui é que está o truque
$tola = "ola!"; // como definiste na linha acima a variável $tola como global, ela vai ter esse valor em qq lado
}

function textola(){
global $tola; // mas este é o senão: sempre que quiseres usar uma variável global numa função, tens que escrever esta linha.
echo $tola." como estas?";
}

textola();

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

hum.. é isso mesmo que eu preciso. eu nao uso o return pk preciso "retornar" mais do que uma vriavel :D

mais em promenor:

o que estou a fazer é uma função que me vai iniciar o "sistema" todo. a várias variaveis vão ser atribuidos valores que veem em POST de outra página, etc.... e depois essas variaveis são usadas em várias funções. Vou aplicar essa cena do global e já ca meto um feedback

Brigadão pela resposta rápida :)

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

hum.. é isso mesmo que eu preciso. eu nao uso o return pk preciso "retornar" mais do que uma vriavel :D

Usas uma array por exemplo:

function ola(){
return array($var1, $var2, $var3, $varn);
}

//e depois:
$lol = ola();
echo $lol[0]; // $var1 lá em cima.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

héhé!!! já está a funcionar!!!

Brigadão man!! salvaste-me a noite de programação! :)

até usei:

global $var1, $var2, var3;

que funcionou tal como queria

Abraço

EDIT: Neste caso não me dá mt jeito usar arrays..  :D

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

héhé!!! já está a funcionar!!!

Brigadão man!! salvaste-me a noite de programação! :D

até usei:

global $var1, $var2, var3;

que funcionou tal como queria

Abraço

EDIT: Neste caso não me dá mt jeito usar arrays..  :D

LOL! :D De nada :)

Epá, o global dá jeito, mas eu como não sei o que ias fazer em concreto, dei o exemplo de passares uma array :)

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

fizeste bem, até pk eu nao me lembrava dessa hipotese e de certeza que me vai dar jeito um pouco mais a frente! :D

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

o ideal era passares as variáveis por referencia

o global, pode ser algo manhoso e dificultar um pouco a legibilidade em projectos grandes

o return em array é uma opção se o usares em conjunto com o list, tens a variaveis todas declaradas e assignadas numa linha

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

A sugestão do sven de passar as variáveis por referencia também é boa porque evita-se alguns problemas que as variáveis declaradas como globais podem causar.. vou deixar aqui um pequeno exemplo a partir do primeiro exemplo do MROverclock

<?php
function ola( &$Tola ){
         $Tola = "ola!";
}

function TextOla(){
         ola( $Tola );
         echo $Tola . " Como estás?";
}
TextOla();
?>

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!


Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.


Entrar Agora