1.回顾:上篇学了 重载,学的不好,需要加强练习和理解

2.这篇将学习,两个设计模式,final关键字,和对象序列化

3.设计模式

   3.1 使用设计模式是促进最佳实践和良好设计的好办法

 3.2 工厂模式


(1)工厂模式允许你在代码执行时实例化对象
(2)负责生产对象
(3)工厂方法的参数是你要生成对象对应的类名称


class Example {
public static function factory($type){
if(include_once 'Drivers/'.$type.'.php'){
$classname='Drivers_'.$type;
return new $classname;
}
else{
throw new Exception('Driver not found');
}
}
}

#上面的例子是,可以动态加载drivers,若是数据库抽象类,则可以生成mysql和sqlliste驱动对象
$mysql=Example::factory('MYSQL');
$sqlite=Example::factory('sqllite');


3.3 单例模式

(1)用于为一个类生成一个唯一的对象,最常用的地方是数据库连接
(2)使用单例模式生成一个对象后,该对象可以被其他众多对象所使用。


class Example1{
private static $instance;
//防止直接创建对象
private function __construct(){
echo "constructed";
}
//实例化
public static function singleton(){
if(!isset(self::$instance)){
$c=__CLASS__;
self::$instance=new $c;
}
return self::$instance;
}
//阻止用户复制对象实例
public function __clone(){
trigger_error("不允许克隆",E_USER_ERROR);
}

// .... 其他方法
public function bark(){
echo "bark 执行了";
}

}
$test=new Example1;
$test=Example::singleton();
$test->bark();


4._toString() 魔术方法使用

#_toString()
class testClass{
public $foo;
public function _construct($foo){
$this->foo=$foo;
}
public function __toString(){
return $this->foo;
}
}
$class=new testClass("Hello");
echo $class;


5.Final 关键字

(1)父类中的方法被声明为final,子类无法覆盖该方法
(2)一个类被声明为final ,则不能被继承



final class BaseClass{
public function test(){
echo "base:test"
}
final public function test1(){
echo "final test1";
}
}


6.对象 序列化

(1)所有php里的值,都可以使用serialize()函数 返回包含字节流的字符串表示
(2)unserialize()函数 能够重新将字符串变会php原来的值



到此为止,面向对象知识写到这里,以后用到什么,将补充!


下面将学习 php 与mysql;