php实现工厂模式&单例模式&魔术方法&获取文件扩展名

来源:互联网 发布:网上约车软件 编辑:程序博客网 时间:2024/06/09 17:02
   /**
    **用php实现工厂模式
    */
    //抽象产品
    interface Work{
        public function doWork();
    }
    //具体产品实现
    class Student implements Work{
        function doWork(){
            echo "学生写作业\n";
        }
    }
    class Teacher implements Work{
        function doWork(){
            echo "老师批改作业\n";
        }
    }
    //抽像工厂
    interface WorkerFactory{
        public function getWorker();
    }
    //具体抽象工厂实现
    class StudentFactory{
        function getWorker(){
            return new Student();
        }
    }
    class TeacherFactory{
        function getWorker(){
            return new Teacher();
        }
    }

    //客户端
    class Client{
        static function main(){
            $s=new Student();
            $s->doWork();
            
            $t=new Teacher();
            $t->doWork();
        }
    }
    Client::main();

     /**
    * 设计模式之单例模式
    * $_instance必须声明为静态的私有变量
    * 构造函数和析构函数必须声明为私有,防止外部程序new
    * 类从而失去单例模式的意义
    * getInstance()方法必须设置为公有的,必须调用此方法
    * 以返回实例的一个引用
    * ::操作符只能访问静态变量和静态函数
    * new对象都会消耗内存
    * 使用场景:最常用的地方是数据库连接。
    * 使用单例模式生成一个对象后,
    * 该对象可以被其它众多对象所使用。
    */
    class danLi{
        //保存类实例的静态成员变量
        private static $_instance;
        //private标记的构造方法
        private function __construct(){
            echo "This a Constructed Method;";
        }
        //创建__clone方法防止对象被复制克隆
        private function __clone(){
            trigger_error('Clone is  not arrow!',E_USER_ERROR);
        }
        //单例方法,用于访问实例的公共的静态方法
        public static function getInstance(){
            if(self::$_instance instanceof self){
                self::$_instance=new self;
            }
            return self::$_instance;
        }
        public function test(){
            echo "测试调用成功";
        }
    }
     //用new实例化private标记构造函数的类会报错
     //$danli = new Danli();

    //正确方法,用双冒号::操作符访问静态方法获取实例
    $danLi=danLi::getInstance();
    $danLi->test();
    //复制(克隆)对象将导致一个E_USER_ERROR
    $danli_clone=clone $danLi;

    /**
    *写出一些php魔术方法
    */
    __construct(), __destruct(), __call(), __get(), __set(), __isset(),__unset(),__sleep(), __wakeup(),__toString(),__clone()

    /**
    *写一个php函数,尽可能高效的,从一个url中提取出文件的扩展名。
    *$url=http://eladies.sina.com.cn/qg/2013/0811/06461231319.shtml   
    */
    function get_extend($url){
         return end(explode('.',$url));
    }
0 0
原创粉丝点击