Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Pessoal,
estou com umas duvidas, ainda mais pq esto começando agora com POO e assim.
Me disseram que no POO quando eu vou usar uma classe da própria linguagem é muito boa prática você construir uma classe extendendo essa classe, tipo se eu for usar a classe PDO do PHP eu extendo ela.
class MyPDO extends PDO {
//aqui os códigos
}
Agora vem minhas dúvidas:
Isso é verdade, é melhor mesmo?
Para que?
E eu ainda não entendi o pq estender a classe PDO se ela já esta pronta e tudo ok para usar, é só eu instanciar e pronto, não tenho nem q incluir ela na minha página, coisa que se eu instanciar vou ter que fazer.
E como criar essa MyPDO?
Sei que pode parecer meio chato, mas são duvidas de mais um iniciante com vontade de aprender.....
[]'s
Marcelo Diniz,
Isso está relacionado com a interface.
Como sabemos, para poder trabalhar com um determinado objeto, precisamos conhecer sua interface; Quando você deriva uma determinada classe, você herda a interface dela, por exemplo:
MySingletonPDO.php
class MySingletonPDO extends PDO {
const DB_DSN = 'mysql:host=127.0.0.1;dbname=banco_de_dados';
const DB_USER = 'user';
const DB_PSWD = 'pswd';
private static $instance;
public function __construct(){
if ( self::$instance instanceOf PDO ) throw new LogicException ( 'There can be only one.' );
else {
$argv = func_get_args();
if ( !count( $argv ) )
$argv = array( self::DB_DSN , self::DB_USER , self::DB_USER );
call_user_func_array( array( 'parent' , '__construct' ) , $argv );
self::$instance = $this;
}
}
public static function getInstance(){
$ret = null;
if ( !self::$instance ) $ret = new MySingletonPDO();
else $ret =& self::$instance;
return $ret;
}
}
Veja agora que, mesmo se tratando da SingletonPDO você pode utilizar um objeto dessa classe como sendo um objeto PDO:
UsaPDO.php
class UsaPDO {
private $pdo;
public function __construct( PDO $pdo ){
$this->pdo =& $pdo;
}
public function usa(){
$stmt = $this->pdo->prepare( '...' );
return $stmt->execute() ? $stmt->fetch_all() : false;
}
}
$teste = new MySingletonPDO( 'mysql:host=127.0.0.1;dbname=banco_de_dados' , 'user' , 'pswd' );
$usar = new UsaPDO( $teste );
$usar->usa();
Agora, isso só é interessante se você precisar adicionar alguma funcionalidade ou modificar uma implementação mantendo a interface.
;)
Ta, deixa eu ver se entendi, então não preciso extender uma classe interna do php sempre, somente quando eu ver que tenho real necessidade, no caso de eu precisar adcionar algo a mais por exemplo, mas no caso de eu usar a classe pura eu posso fazer chamada dela no proprio programa que esta certo?
Se o que está perguntando é instanciar a class na mesma página em que a mesma está inscrita, sim.
>
Ta, deixa eu ver se entendi, então não preciso extender uma classe interna do php sempre
...somente quando eu ver que tenho real necessidade...mas no caso de eu usar a classe pura eu posso fazer chamada dela no proprio programa que esta certo?
Absolutamente correto.
MyPDO - nome da class a qual já foi criada...
Com relação a sua dúvida, ao meu ver isso é mito, depende da necessidade para extender uma class, vai da necessidade.
Abraço.