代码改变世界

注册自动加载方法,序列化以及继承和重写

2016-12-10 22:31  钟帜铭哥哥  阅读(431)  评论(0编辑  收藏  举报

一、注册自动加载方法以及序列化的实现

class Common{
public function autoload($class_name){
if(file_exists('./'.$class_name.'.class.php')){
include('./'.$class_name.'.class.php');
}else{
echo 'error';
}
}

public static function autoload1($class_name){
if(file_exists('./'.$class_name.'.class.php')){
include('./'.$class_name.'.class.php');
}else{
echo 'error';
}
}
}
//实例化类
$obj = new Common;
//注册autoload方法为自动加载方法
//spl_autoload_register(array($obj,'autoload'));
//注册autoload1静态方法为自动加载方法
spl_autoload_register(array('Common','autoload1'));
$arr=array('pass'=>'admin','dbname'=>'bbs');
$db = new MYSQLDB($arr);
echo '<pre />';
var_dump($db);

//序列化数据
$data = serialize($db);
file_put_contents('./12.10txt',$data);

二、反序列化的实现

/*第一,反序列化之后的对象的类名之所以发生了改变,是因为在反序列化的时候,也需要先找到该对象所属的类!如果找不到,则对象会被反序列化为__PHP_incomplete_class,是一个php的预定义的类!
所以加载类文件
*/
//include './MYSQLDB.class.php';
function __autoload($class_name){
if(file_exists('./'.$class_name.'.class.php')){
include './'.$class_name.'.class.php';
}
}
$data = file_get_contents('./12.10txt');
//反序列化
$data = unserialize($data);
echo '<pre />';
var_dump($data);

其中有一个MYSQLDB.class.php 的文件,这里就不贴出来了

 

三、继承和重写

class Goods{
public $goods_name;

public function __construct($g_name){
echo $this->goods_name = $g_name;
}
}
//继承
class Books extends Goods{
public $author_name;
//方法重写
public function __construct($g_name,$a_name){
//调用父类的构造方法
parent::__construct($g_name);
echo $this->author_name = $a_name;
}
}

//实例化
$books = new Books('围城','钱钟书');
echo '<pre />';
var_dump($books);