Jump to content


Photo

Desvantagens $Globals


  • Faça o login para participar
4 replies to this topic

#1 Enzo Henrique

Enzo Henrique

    Novato no fórum

  • Usuários
  • 2 posts
  • Sexo:Masculino
  • Localidade:Joinville - SC

Posted 27/02/2012, 07:56

Bom dia galera!

Estou desenvolvendo um projeto que pretendo que seja robusto.
Por este motivo, venho perguntar a vocês, quais as desvantagens de utilizar objetos dentro de $GLOBALS?
Alguém ja utilizou este recurso?

O uso mais comum de globals é com variáveis simples:

<?php
$GLOBALS["var"] = "123";
?>


Mas por um momento me ocorreu de jogar uma instância de objeto em globals:

<?php
$GLOBALS["database"] = new Database();
?>


Funciona perfeitamente, creio que usando $_SESSION o resultado seria o mesmo, mas para deixar cada coisa em seu lugar, optei por colocar objetos em globals;
E agora? Confiável? Viável? Ou seria desperdício de memória / processamento server-side?

\o
<?php
$this->me->peagapar();
?>

#2 LeoB

LeoB

    Super Veterano

  • Usuários
  • 1876 posts
  • Sexo:Masculino
  • Interesses:Programação

Posted 27/02/2012, 14:12

Parece que você não está entendendo o que é o $GLOBALS. Ele é só uma forma de se referir a variáveis globais. Melhor mostrar com código:

<?php

$bd = new Database();

?>

<?php

$GLOBALS['bd'] = new Database();

?>

É a mesma coisa, porque $bd e $GLOBALS['bd'] são a mesma coisa.

<?php

$x = '8';

function printx(){
global $x;
echo $x;
}

?>

<?php

$x = '8';

function printx(){
echo $GLOBALS['x'];
}

?>

De novo, as duas funções são a mesma coisa.

Edição feita por: LeoB, 27/02/2012, 14:14.


#3 Enzo Henrique

Enzo Henrique

    Novato no fórum

  • Usuários
  • 2 posts
  • Sexo:Masculino
  • Localidade:Joinville - SC

Posted 27/02/2012, 14:25

Parece que você não está entendendo o que é o $GLOBALS. Ele é só uma forma de se referir a variáveis globais. Melhor mostrar com código:

<?php

$bd = new Database();

?>

<?php

$GLOBALS['bd'] = new Database();

?>

É a mesma coisa, porque $bd e $GLOBALS['bd'] são a mesma coisa.

<?php

$x = '8';

function printx(){
global $x;
echo $x;
}

?>

<?php

$x = '8';

function printx(){
echo $GLOBALS['x'];
}

?>

De novo, as duas funções são a mesma coisa.


Então eu não preciso declarar explicitamente?
<?php
global $variavel;
?>


Apenas declaro fora do escopo de classe e função, e posso referenciá-la por meio de $GLOBALS["nome_da_var"]?
Mais uma pergunta, é uma má prática de programação utilizar um objeto como global? Seria recomendado passar sempre uma cópia (ou referência se preferir otimização de memória)?
<?php
$this->me->peagapar();
?>

#4 LeoB

LeoB

    Super Veterano

  • Usuários
  • 1876 posts
  • Sexo:Masculino
  • Interesses:Programação

Posted 27/02/2012, 15:06

Apenas declaro fora do escopo de classe e função, e posso referenciá-la por meio de $GLOBALS["nome_da_var"]?

Isso.

Mais uma pergunta, é uma má prática de programação utilizar um objeto como global? Seria recomendado passar sempre uma cópia (ou referência se preferir otimização de memória)?

Pois então... Nunca li nada a respeito especificamente para PHP, mas em outras linguagens costuma realmente o uso de uma variável global sair mais caro do que a passagem por parâmetro. Mas acho que esse tipo de problema é cada vez menos significativo, porque o poder de processamento dos servidores de hoje compensa isso. Só vale a pena se preocupar se sua aplicação precisar ter um desempenho muito alto mesmo ou se você achar que este tipo de prática está prejudicando o código.

#5 looners

looners

    Novato no fórum

  • Usuários
  • 16 posts
  • Sexo:Feminino
  • Localidade:danmark

Posted 14/03/2012, 06:30

Ele é só uma forma de se referir a variáveis globaisPosted Image




0 user(s) are reading this topic

0 membro(s), 0 visitante(s) e 0 membros anônimo(s)

IPB Skin By Virteq