coxosclassic Posted June 12, 2012 at 04:13 PM Report Share #462294 Posted June 12, 2012 at 04:13 PM (edited) Olá a todos, Tenho um problema em relação a variáveis (globais e locais) em php tenho o seguinte codigo: $arr = array(); init(); function init() { array_push($arr, 1, 2); echo $arr; } dá-me o erro de null com o array $arr... Pelo que consegui perceber ate agora, nao consigo aceder ao array (que inicializei como global) dentro da funcao init (?) Alguém me pode dar aqui uma luz sobre o assunto? cumps, cc Edited June 12, 2012 at 05:16 PM by coxosclassic Cumps, cc Link to comment Share on other sites More sharing options...
tiagotavares Posted June 12, 2012 at 04:24 PM Report Share #462300 Posted June 12, 2012 at 04:24 PM (edited) Boas, O que se está a passar é que está a trabalhar com uma variavel dentro da função NULL(não inicializada como array), ou seja o que $arr que está fora da função não é o mesmo que está dentro. experimenta assim: $arr = array(); init(); function init() { global $arr; array_push($arr, 1, 2); echo $arr; } ou seja está a usar a variavel que se encontra declarada fora da função. Outra maneira é passares por referencia em parametro da função ou simplesmente passares por parametro e returnares. $arr = array(); init($arr); function init(&$arr) { array_push($arr, 1, 2); echo $arr; } OU $arr = array(); $arr = init($arr); function init($arr) { array_push($arr, 1, 2); echo $arr; return $arr; } Resumindo 3 MANEIRAS: global; parametro por referência; parametro (com return). Espero ter ajudado Edited June 12, 2012 at 04:37 PM by tiagotavares Tiago Tavares Link to comment Share on other sites More sharing options...
mjamado Posted June 12, 2012 at 04:29 PM Report Share #462303 Posted June 12, 2012 at 04:29 PM Pelo que consegui perceber ate agora, nao consigo aceder ao array (que inicializei como global) dentro da funcao init (?) Repara que PHP não é C. Pode ter a sintaxe parecida, mas as semelhanças não vão muito mais além disso. No caso em concreto, as funções não acedem ao escopo global assim por dá cá aquela palha, até para preservar o escopo interior. Se for num contexto OOP, as variáveis de classe podem ser acedidas pelo operador $this; neste contexto, tens de declarar que a variável que vais usar é global, através da keyword global: $arr = array(); init(); function init() { global $arr; array_push($arr, 1, 2); echo $arr; } "Para desenhar um website, não tenho que saber distinguir server-side de client-side" - um membro do fórum que se auto-intitula webdesigner. Temo pelo futuro da web. Link to comment Share on other sites More sharing options...
tiagotavares Posted June 12, 2012 at 04:38 PM Report Share #462305 Posted June 12, 2012 at 04:38 PM (edited) Repara que PHP não é C. Pode ter a sintaxe parecida, mas as semelhanças não vão muito mais além disso. No caso em concreto, as funções não acedem ao escopo global assim por dá cá aquela palha, até para preservar o escopo interior. Se for num contexto OOP, as variáveis de classe podem ser acedidas pelo operador $this; neste contexto, tens de declarar que a variável que vais usar é global, através da keyword global: $arr = array(); init(); function init() { global $arr; array_push($arr, 1, 2); echo $arr; } Bem já aprendi a colocar o código todo bonito aqui no forum 😄 Edited June 12, 2012 at 04:39 PM by tiagotavares Tiago Tavares Link to comment Share on other sites More sharing options...
coxosclassic Posted June 12, 2012 at 05:11 PM Author Report Share #462318 Posted June 12, 2012 at 05:11 PM (edited) ... Espero ter ajudado Ajudaste e muito 🙂 Repara que PHP não é C. Pode ter a sintaxe parecida, mas as semelhanças não vão muito mais além disso. Era mesmo isso que me estava a falhar (pensei que pudesse ser a mesma coisa) 👍 andava aqui a atrofiar com este problema, mas assim ja o tenho resolvido. Obrigado! 🙂 cc Edited June 12, 2012 at 05:15 PM by coxosclassic Cumps, cc Link to comment Share on other sites More sharing options...
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now