数据访问对象设计模式是什么?
PHP 基础面试题
<?php
//数据访问对象设计模式描述了如何创建提供透明访问任何数据源的对象。
abstract class baseDAO{
private $_connection;
public function __construct(){
$this->_connectToDB(DB_USER, DB_PASS, DB_HOST, DB_DATABASE);
}
private function _connectToDB($user, $pass, $host, $database){
$this->_connection = new mysqli($host, $user, $pass, $database);
}
public function fetch($value, $key = NULL){
if(is_null($key)){
$key = $this->_primaryKey;
}
$sql = "SELECT * FROM {$this->_tableName} WHERE {$key}='{$value}' ";
$results = $this->_connection->query($sql);
$rows = [];
while($result = $results->fetch_assoc()){
$rows[] = $result;
}
return $rows;
}
public function update($keyedArray){
$sql = "UPDATE {$this->_tableName} SET ";
$updates = [];
foreach($keyedArray as $column => $value){
$updates[] = "{$column}='{$value}' ";
}
$sql .= implode(',', $updates);
$sql .= "WHERE {$this->_primaryKey}='{$keyedArray[$this->_primaryKey]}'";
return $this->_connection->query($sql);
}
}
class userDAO extends baseDAO{
protected $_tableName = 'userTable';
protected $_primaryKey = 'id';
public function getUserByFirstName($name){
$result = $this->fetch($name, 'firstName');
return $result;
}
}
define('DB_USER', 'root');
define('DB_PASS', '');
define('DB_HOST', '127.0.0.1');
define('DB_DATABASE', 'test');
$user = new userDAO();
$userDetailsArray = $user->fetch(1);
print_r($userDetailsArray);
echo PHP_EOL;
$updates = ['id' => 1, 'firstName' => 'aaron'];
$updateResult = $user->update($updates);
print_r($updateResult);
echo PHP_EOL.PHP_EOL;
$allAarons = $user->getUserByFirstName('aaron');
print_r($allAarons);