Problemet med disse video-tutorials er deres forfattere, som ikke har nogen anelse om emnet, hvilket gør resultatet MEGET MEGET VÆRRE, end hvis du slet ikke brugte deres mentale ekskrementer. Skaden, de påfører, er så slem, at jeg endda var nødt til at skrive en dedikeret artikel, der forklarer, hvorfor alle disse hjælpeløse "indpakninger" er totalt ubrugelige til enhver virkelighedsapplikation, Din første databaseindpaknings børnesygdomme .
Tag denne indpakning fra videoen for eksempel:
- Fejlrapportering er fuldstændig mangelfuld
- En ubrugelig funktion til SELECT.
- Statefulness
- Beskyttet PDO-instans
Så i det væsentlige vil du ikke være i stand til at komme fra denne "indpakning" selv en så dum ting som Insert Id. Og ingen fejlrapportering kunne hjælpe dig med at indse problemet.
Med din kode skal du bare ikke forhandle for at spare dig selv ved at skrive et SQL-nøgleord. Det er fjollet. SQL er en værdifuld ting, afvis det ikke til fordel for nogle vrøvl-genveje. Du bør heller ikke formindske PDO til en tilstand af en forkrøblet invalid, der kasserer dens mest geniale funktioner.
Din indpakning skal gøre alle PDO- og SQL-funktioner tilgængelige i stedet for at kassere dem. Så det fortsætter:
class DB
{
protected static $instance;
protected $pdo;
protected function __construct() {
$opt = array(
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_OBJ,
PDO::ATTR_EMULATE_PREPARES => FALSE,
);
$dsn = 'mysql:host='.DB_HOST.';dbname='.DB_NAME.';charset='.DB_CHAR;
$this->pdo = new PDO($dsn, DB_USER, DB_PASS, $opt);
}
// a classical static method to make it universally available
public static function instance()
{
if (self::$instance === null)
{
self::$instance = new self;
}
return self::$instance;
}
// a proxy to native PDO methods
public function __call($method, $args)
{
return call_user_func_array(array($this->pdo, $method), $args);
}
// a helper function to run prepared statements smoothly
public function run($sql, $args = [])
{
$stmt = $this->pdo->prepare($sql);
$stmt->execute($args);
return $stmt;
}
}
denne indpakning er ti gange enklere og samtidig ti gange mere kraftfuld end den fra videoen.
Og nu din klasse
class Schedule
{
private $_db;
public function __construct()
{
$this->_db = DB::instance();
}
public function listGames()
{
$data = $this->_db->query('SELECT * FROM games')->fetchAll();
var_dump($data);
echo '<br>';
}
}
Hemmeligheden her er, at PDO allerede kan give dig objektdata, med ikke en eneste ekstra linje kodning.
Selvom dette simple eksempel ikke er særlig imponerende, er hemmeligheden her, at denne indpakning også vil tjene dig til ethvert andet eksempel, når det fra videoen vil kvæle. Prøv at tænke på et hvilket som helst andet eksempel, og jeg vil vise dig, hvor enkel, men alligevel kraftfuld denne indpakning er.