E ae pessoal. Seguinte estou fazendo uma aplicação web em PHP e estou usando o padrão SINGLETON para pegar uma instancia única do PDO, só que por algum motivo quando pego uma instancia do PDO não estou conseguindo acessar seus métodos através da minha variável.
Alguém sabe me dizer o pq?
Você criou uma método estático, e para acessar não pode ser através de uma instacia.
Exatamente como o Bruno disse, acessar um método static de uma instância não vai dar certo.
Use:
$conexao = ConexaoDB::getInstancia();
Ola!
É isso que tem feito e não funciona como o esperado.
`<?php
use ConexaoDB;
class ValidadorDeLogin {
private $login;
private $senha;
private $ok;
public function valida($login, $senha) {
$this->senha = EmbacadorDeSenha::embacaSenha($senha);
$this->login = $login;
$conect = ConexaoDB::getInstancia();
//$conect-> aqui não consigo acessar o PDO
if ($this->ok) {
return TRUE;
} else {
return false;
}
}
}`
Quem preenche o
$this->ok
?
Da maneira que está, fica sempre false
Desculpa mano eu comecei a escrever o código, e não tinha chegado nessa parte do $this->ok;
Eu meio que deixei o Singleton de lado e por enquanto e estou continuando o projeto depois volto no singleton. Mas o codigo ficou assim:
$conect = new PDO("mysql:host=localhost;dbname=dbb", "root", "123465", array(PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES utf8"));
$stmt = $conect->prepare('SELECT * FORM usuario WHERE email = :login senha_salt = :senha');
$stmt->execute(array('login' => $this->login, 'senha' => $this->senha));
$row = $stmt->fetch();
if (!empty($row)) {
return json_encode($row);
} else {
return json_encode(array('error'=>403,'mensagem'=>"Email ou senha invalido!"));
}
}
Só queria tirar a responsabilidade de criar a conexão dessa classe e deixar para a classe ConexaoDB.
Estou apanhando muito com o PHP vim de Java.
Obrigado pelo interesse mano.