Soy muy nuevo en PHP con estilo OOP, y estoy tratando de implementar PDO también. Encontré esta clase pequeña y agradable en línea que maneja la conexión de la base de datos, sin embargo, no tengo idea de cómo acceder a ella desde otra clase. Aquí está el código:Pregunta de la clase PHP y PDO
class PDO_DBConnect {
static $db ;
private $dbh ;
private function PDO_DBConnect() {
$db_type = 'mysql'; //ex) mysql, postgresql, oracle
$db_name = 'postGal';
$user = 'user' ;
$password = 'pass' ;
$host = 'localhost' ;
try {
$dsn = "$db_type:host=$host;dbname=$db_name";
$this->dbh = new PDO ($dsn, $user, $password);
$this->dbh->setAttribute(PDO::ATTR_PERSISTENT, true);
$this->dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
} catch (PDOException $e) {
print "Error!: " . $e->getMessage() . "\n" ;
die() ;
}
}
public static function getInstance () {
if (! isset (PDO_DBConnect::$db)) {
PDO_DBConnect::$db = new PDO_DBConnect () ;
}
return PDO_DBConnect::$db->dbh;
}
}
$db_handle = PDO_DBConnect::getInstance();
class Person
{
function __construct()
{
$STMT = $db_handle->prepare("SELECT title FROM posts WHERE id = ? AND author = ? LIMIT 20");
$STMT->execute(array('24', 'Michael'));
while ($result = $STMT->fetchObject())
{
echo $result->title;
echo "<br />";
}
}
}
¿Cómo puedo acceder a la variable $db_handle
interior de mi clase de persona? ¿Tengo que crear una instancia de la variable dentro de la clase Person? Si es así, ¿significa eso que siempre tendré que llamarlo como $this->db_handle
? Esperaba evitar eso. (Todavía sólo tienen un conocimiento muy básico de alcance variable, con clases)
¿Por qué usa construcciones OO de PHP5, pero el constructor del mismo nombre de la era PHP4 es el constructor? Por favor considere cambiar a '__construct' en su lugar. – Charles
No creo que haya escrito la clase PDO_DBConnect, ya que mencionó que "la encontró". – Problematic