Jump to content
  • Revista PROGRAMAR: Já está disponível a edição #60 da revista programar. Faz já o download aqui!

Sign in to follow this  
Caya

Herdar PDO [Resolvido]

Recommended Posts

Caya

Olá,

Estava para aqui a tentar herdar a class PDO e PDOStatement, mas isto está a embirrar comigo. O que fiz até agora:

class PDOExtended extends PDO {
function __construct($dsn, $username, $password, $driver) {
	parent::__construct($dsn, $username, $password, $options);
	$this->setAttribute(PDO::ATTR_STATEMENT_CLASS, array('PDOStatementExtended', array($this)));
}

function myQueryFunction() {
	...
}

function myExecFunction() {
	...
}

...
}

class PDOStatementExtended extends PDOStatement {
function myBindParam() {
	...
}

 ...
}

$db = new PDOExtended(...);

Alguém consegue identificar onde está a minha noobice?

thanks

Share this post


Link to post
Share on other sites
infopc

O PDO devolve-te um objecto do tipo PDOStatement, e por mais que estendas o pdostatement vai sempre devolver o pdostatement. a novice está em: podes estender o pdo mas n necessitas estender o pdostatement a menos que queiras fazer grandes overrides aos métodos do pdo (o que não queres fazer a menos que queiras escrever um novo pdo lol)


O que não tem solução, solucionado esta...

Share this post


Link to post
Share on other sites
Caya

Já consegui resolver o problema mas esqueci-me de vir aqui dizer.

O PDO devolve-te um objecto do tipo PDOStatement, e por mais que estendas o pdostatement vai sempre devolver o pdostatement. a novice está em: podes estender o pdo mas n necessitas estender o pdostatement a menos que queiras fazer grandes overrides aos métodos do pdo (o que não queres fazer a menos que queiras escrever um novo pdo lol)

Eu sei que o PDO devolve um objecto do tipo PDOStatement por isso é que defini o atributo 'PDO::ATTR_STATEMENT_CLASS' como a class estendida do PDOStatement. Mas sim, necessito estender o PDOStatement, para criar lá umas funções que me poupam molhos de linhas de código  ;)

Já agora para quem necessitar de fazer o mesmo, basta acrescentar o seguinte ao código que coloquei no primeiro post:

class PDOStatementExtended extends PDOStatement {
public $pdo;

protected function __construct($pdo) {
		$this->pdo = $pdo;
}
}

thanks

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
Sign in to follow this  

×

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.