比如, new 一个对象,然后设置一些属性,就和数据库中表的一条记录对应起来。
创建表:
create table user(
id int(11) primary key auto_increment,
name varchar(32) not null,
mobile varchar(11) not null,
regtime timestamp
);
index.php
<?php
define('BASEDIR',__DIR__);
include BASEDIR . '/IMooc/Loader.php';
spl_autoload_register('\\IMooc\\Loader::autoload');
/*$user = new \IMooc\User(1);
var_dump($user->id);
var_dump($user->name);
var_dump($user->mobile);
var_dump($user->regtime);
//如果没有使用数据对象的话,需要使用 SQL 语句
$user->name = 'test';
$user->mobile = '12345678901';
$user->regtime = date('Y-m-d H:i:s');*/
class Page
{
public function index()
{
//使用工厂方法
// $user = new \IMooc\User(1);
$user = IMooc\Factory::getUser(1);
$user->name = 'rango6666';
var_dump(get_class($user) . __METHOD__);
$this->test();
echo 'Ok';
}
public function test()
{
//如果没有使用注册模式,又 new 一个对象,则下面的mobile 存不进去
// $user = new IMooc\User(1);
$user = IMooc\Factory::getUser(1);
var_dump(get_class($user) . __METHOD__);
$user->mobile = '6666';
echo 'test';
}
}
$page = new Page();
$page->index();
Factory.php
<?php
namespace IMooc;
class Factory
{
static function createDatabase()
{
$db = Database::getInstance();
//将 $db 映射到全局树上
Register::set('db1',$db);
return $db;
}
public static function getUser($id)
{
$key = 'user_' . $id;
$user = Register::get($key);
if(!$user){
$user = new User($id);
Register::set($key,$user);
}
return $user;
}
}
MySQLi.php
<?php
namespace IMooc\Database;
use IMooc\IDatabase;
class MySQLi implements IDatabase
{
protected $conn;
public function connect($host,$user,$password,$dbname)
{
$conn = mysqli_connect($host,$user,$password,$dbname);
$this->conn = $conn;
}
public function query($sql)
{
return mysqli_query($this->conn,$sql);
}
public function close()
{
mysqli_close($this->conn);
}
}
User.php
<?php
namespace IMooc;
class User
{
public $id;
public $name;
public $mobile;
public $regtime;
protected $db;
public function __construct($id)
{
$this->db = new \IMooc\Database\MySQLi();
$this->db->connect('localhost','root','123456','test1');
$res = $this->db->query("select * from user where id=$id limit 1;");
/*while($row = $res->fetch_row()){
$rows[] = $row;
}
var_dump($rows);die;*/
$data = $res->fetch_row();
$this->id = $data[0];
$this->name = $data[1];
$this->mobile = $data[2];
$this->regtime = $data[3];
}
public function __destruct()
{
var_dump('aa');
//将属性的设置存入数据库
$a = $this->db->query("update user set name='{$this->name}',
mobile='{$this->mobile}',
regtime='{$this->regtime}'
where id={$this->id} limit 1
");
var_dump($a);
}
}