Jump to content

[Resolvido] PHP erro de scope(?)


coxosclassic
 Share

Recommended Posts

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 by coxosclassic

Cumps,

cc

Link to comment
Share on other sites

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:

  1. global;
  2. parametro por referência;
  3. parametro (com return).

Espero ter ajudado

Edited by tiagotavares

Tiago Tavares

Link to comment
Share on other sites

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

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 by tiagotavares

Tiago Tavares

Link to comment
Share on other sites

...

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 by coxosclassic

Cumps,

cc

Link to comment
Share on other sites

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 account

Sign in

Already have an account? Sign in here.

Sign In Now
 Share

×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.