Ir para conteúdo
Fórum Script Brasil
  • 0

Variáveis Globais


Guest --Tiago --

Pergunta

Guest --Tiago --

Não estou conseguindo usar variáveis globais. Estou tentando programar PHP OO + MVC e estou tendo problemas quando declaro variáveis globais. Quando eu declaro as variáveis de forma local, funciona, mas global não.

class BancodeDados
{
    global $rede = "192.168.2.11";
    global $usuario = "root";
    global $senha = "newpassword";
    global $db = "publicador_rh";

    function conectaSelecionaBanco($rede,$usuario,$senha,$db)
    {
        $conexao = mysql_connect($rede, $usuario, $senha) or die(mysql_error());
        $banco = mysql_select_db($db, $conexao) or die(mysql_error());
        return $banco;
    }
}

Com este código aparece na tela: "Parse error: syntax error, unexpected T_GLOBAL, expecting T_FUNCTION in C:\xampplite\htdocs\Renato\atividades_rh\controlador.php on line 4"

E se eu tiro o global que vem antes da variável também dá erro: "Parse error: syntax error, unexpected T_VARIABLE, expecting T_FUNCTION in C:\xampplite\htdocs\Renato\atividades_rh\controlador.php on line 4" como que pedindo para eu colocar as variáveis dentro de uma função.

Aguém pode me ajudar ?

Link para o comentário
Compartilhar em outros sites

7 respostass a esta questão

Posts Recomendados

  • 0
Não estou conseguindo usar variáveis globais. Estou tentando programar PHP OO + MVC e estou tendo problemas quando declaro variáveis globais. Quando eu declaro as variáveis de forma local, funciona, mas global não.

class BancodeDados
{
    global $rede = "192.168.2.11";
    global $usuario = "root";
    global $senha = "newpassword";
    global $db = "publicador_rh";

    function conectaSelecionaBanco($rede,$usuario,$senha,$db)
    {
        $conexao = mysql_connect($rede, $usuario, $senha) or die(mysql_error());
        $banco = mysql_select_db($db, $conexao) or die(mysql_error());
        return $banco;
    }
}

Com este código aparece na tela: "Parse error: syntax error, unexpected T_GLOBAL, expecting T_FUNCTION in C:\xampplite\htdocs\Renato\atividades_rh\controlador.php on line 4"

E se eu tiro o global que vem antes da variável também dá erro: "Parse error: syntax error, unexpected T_VARIABLE, expecting T_FUNCTION in C:\xampplite\htdocs\Renato\atividades_rh\controlador.php on line 4" como que pedindo para eu colocar as variáveis dentro de uma função.

Aguém pode me ajudar ?

dentro de classes php, voce tem que definir as variaveis como public, protected ou private... não como global...

Link para o comentário
Compartilhar em outros sites

  • 0
Guest --Tiago --

Agora está assim:

class BancodeDados
{
    public $rede = "192.168.2.11";
    public $usuario = "root";
    public $senha = "newpassword";
    public $db = "publicador_rh";

    function conectaSelecionaBanco($rede,$usuario,$senha,$db)
    {
        $conexao = mysql_connect($rede, $usuario, $senha) or die(mysql_error()); // linha 11 (ERRO AQUI)
        $banco = mysql_select_db($db, $conexao) or die(mysql_error());
        return $banco;
    }
}

E deu esse erro: "Warning: mysql_connect() [function.mysql-connect]: Can't connect to MySQL server on 'localhost' (10061) in C:\xampplite\htdocs\Renato\atividades_rh\controlador.php on line 11

Can't connect to MySQL server on 'localhost' (10061)"

Link para o comentário
Compartilhar em outros sites

  • 0
Agora está assim:

class BancodeDados
{
    public $rede = "192.168.2.11";
    public $usuario = "root";
    public $senha = "newpassword";
    public $db = "publicador_rh";

    function conectaSelecionaBanco($rede,$usuario,$senha,$db)
    {
        $conexao = mysql_connect($rede, $usuario, $senha) or die(mysql_error()); // linha 11 (ERRO AQUI)
        $banco = mysql_select_db($db, $conexao) or die(mysql_error());
        return $banco;
    }
}
E deu esse erro: "Warning: mysql_connect() [function.mysql-connect]: Can't connect to MySQL server on 'localhost' (10061) in C:\xampplite\htdocs\Renato\atividades_rh\controlador.php on line 11 Can't connect to MySQL server on 'localhost' (10061)"
para você referenciar uma variavel que esteja definidapara toda a classe, é necessário que a referencia seja feita da seguinte maneira:
class BancodeDados
{
    public $rede = "192.168.2.11";
    public $usuario = "root";
    public $senha = "newpassword";
    public $db = "publicador_rh";

    function conectaSelecionaBanco()
    {
        $conexao = mysql_connect($this->rede, $this->usuario, $this->senha) or die(mysql_error()); // linha 11 (ERRO AQUI)
        $banco = mysql_select_db($this->db, $conexao) or die(mysql_error());
        return $banco;
    }
}
Se voce tivesse criado essas variaveis dentro da função "conectaSelecionaBanco()", aí sim você poderia usar as variaveis sem o "$this->"... Como essa é uma função padrão, modifiquei ela, assim, se voce precisar conectar em mais de um db, basta você mudar os paramentos que forem necessarios, e chamando a função novamente... Lembrando que para acessar esses parametros, deve-se utilizar "$this->variavel" se for dentro da classe, assim como para as funções que você chama dentro dela mesmo tem que ser referenciadas como "$this->funcao()"... Outras dicas.... Quando você instancia esta classe, você deve ao invés de usar $this, usar o nome da variavel que iniciou o objeto... por exemplo:
$teste = new BancodeDados();
// se fosse necessario alterar ou passar algum valor para os parametros da classe, basta fazer o seguinte:
$teste->rede = "localhost";
$teste->usuario = "root";
$teste->senha = "1234";
$teste->bd = "teste";

//para chamar uma função, como essa pra conectar, é só fazer o seguinte:
$teste->conectaSelecionaBanco();

Mas se voce for realmente usar esta função, e for conectar a um único banco de dados, sugiro que coloque as variáveis como private ou protected, por questoes de segurança... deixe omo public somente as variaveis que voce vai precisar acessar de fora da classe... os tipos public, protected e private também podem ser definidos para as funções, assim: protected function teste(){...

Dizendo mais sobre os tipos de proteção:

public: pode ser acessado/modificado de qualquer lugar, dentro ou fora da classe;

protected: pode ser acessado/modificado apenas por funções da classe;

private: pode ser acessado/modificado apenas pela classe;

Outro ponto importante sobre classes, são as funções padrão de todas as classes... até mesmo as que voce cria.... Duas muito úteis são:

__contruct() e __destruct()...

__construct() é executado quando você inicia a classe... como por exemplo em "$teste = new BancodeDados()"... Pode ser util para voce definir variaveis globais da classe, executar funções de verificação, etc...

e __destruct(), como da para imaginar, é executado quando a classe é encerrada.... pode servir para fazer limpeza, fechar objetos e conexoes, restaurar variaveis, etc...

qualquer duvida diga ae... :D:D:D

Link para o comentário
Compartilhar em outros sites

  • 0
Guest --Tiago --

Me responde uma coisa. Nas classes que eu estou usando a cada função eu tenho que recriar o objeto de acesso ao banco.

$banco_dados = new BancodeDados();
$banco_dados->conectaBanco();
$banco_dados->selecionaBanco();

Tem como eu criar esse objeto dentro da classe mas fora das funções ? Eu não quero ficar recriando ele a cada função que eu faça. Queria criar uma vez e dentro de cada função já poder usar. Tem como ?

Link para o comentário
Compartilhar em outros sites

  • 0

tem sim... é só você utilizar a função __construct() assim:

Ex.:

<?
class BancodeDados
{
    public $rede = "192.168.2.11";
    public $usuario = "root";
    public $senha = "newpassword";
    public $db = "publicador_rh";

    function __construct(){
        $this->conectaBanco();
        $this->selecionaBanco();
    }
    (...) resto do código... (...)
}

daí, quando você criar:

$banco_dados = new BancodeDados();

ele já vai rodar automaticamente tudo o que tem dentro de __construct()... não é necessário rodar

$banco_dados->__construct();

essa função já roda automaticamente quando você cria o objeto $banco_dados...

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,1k
    • Posts
      651,8k
×
×
  • Criar Novo...