Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Segue código, mais detalhes, no meu blog:
:seta: http://henriquebarcelos.in/blog/2012/08/20/php-oo-classe-simples-para-acesso-a-banco-de-dados/
class Db_Driver {
private $connector;
private static $defaultConnector;
public function __construct(MySQLi $conn = null) {
$this->connect($conn);
}
public static setDefaultConnector(MySQLi $conn) {
self::$defaultConnector = $conn;
}
public static getDefaultConnector() {
return self::$defaultConnector;
}
public function connect(MySQLi $conn = null) {
if(!$this->isConnected()) {
if($conn === null) {
if(self::$defaultConnector === null) {
throw new Exception('Não existe nenhum conector
com o banco de dados!');
} else {
$conn = self::$defaultConnector;
}
}
$this->connector = $conn;
}
}
public function disconnect() {
if($this->isConnected()) {
$this->connector->close();
$this->connector = null;
}
}
public function isConnected() {
return $this->connector instanceof MySQLi;
}
public function getConnector() {
$this->connect();
return $this->connector;
}
public function query($sql) {
$this->connect();
$result = $this->connector->query($sql);
if(!$result) {
throw new Exception("Erro SQL #{$this->connector->errno}:
{$this->connector->error}");
}
return $result;
}
public function fetch($sql) {
$result = $this->query($sql);
return $result->fetch_assoc();
}
public function fetchAll($sql) {
$data = array();
$result = $this->query($sql);
while($cursor = $result->fetch_assoc()) {
$data[] = $cursor;
}
return $data;
}
public function lastId() {
return $this->connector->insert_id;
}
}self é para métodos e propriedades estáticas.
this é para métodos e propriedades de instância (não estáticos).
exatamente por que?
um colega meu disse que era que o this é como se você tivesse criado uma instancia da classe de novo para chamar seus métodos/propriedades já o self apenas chama de novo a classe.
seguindo essa linha de raciocínio eu posso utilizar o self para métodos/propriedades não estáticas mais não utilizar o this para estáticos, correto?
Errado.
O PHP até permite você invocar um método que não referencia a variável $this como estático, mas como não referencia $this, pode ser estático.
Exemplo:
class Foo {
public function bar() {
echo 'bar';
}
}O ideal é não misturar as coisas, estático é estático, instância é instância. Exatamente por isso existem 2 sintaxes diferentes... A palavra-chave self não existe em muitas linguagens, você usa o próprio nome da classe, em PHP é possível fazer assim também:
class Foo {
private static $bar = 'bazzinga';
public static someMethod() {
echo Foo::$bar;
}
}
Resumindo: self é para classes (propriedades e métodos estáticos), this é para objetos (propriedades e métodos de instância)
Poderia me explicar mais ou menos oque são métodos estáticos no OOP?
se você ler tudo entende perfeitamente.
Este não é o local correto para dúvidas. Sugiro que procure os vários existentes no fórum e caso ainda não entenda, abra um tópico lá.
qual a diferença de self e this, pois cada hora você utilizou um diferente e me deixou confuso.
me parece que tem algo a ver com o static