fswdnr 发表于 2018-12-18 11:40:01

php 设计模式 总结 上

  1 编程选择等宽字体
  2 source code pro 字体
  3 运行环境搭建,推荐 easyphp
  4 关于命名空间:
  面向对象的高级特性
  介绍、使用:
  namespace test1;
  下面的所有代码都属于这个命名空间里面的。
  

  调用:test1\funciton_name(); 即可。
  5 类自动载入特性
  function __autoload($class); // 以前是这么干的。
  {
  require __DIR__.'/'.$class.'.php';
  }
  
  // 后来被废纸了, 5.3以后用 spl_autoload_register('autoload1');
  

  这样就不冲突了,防止不同框架之间的冲突。自己随便定义自动载入函数。
  

  6 基础框架:
  psr-0规范
  1 命名空间必须与绝对路径一致
  2 类名首字母大写
  3除了入口文件外的其它.php文件只有一个类,不能有可执行代码
  开发符合psr-0规范的基础框架
  1 全部使用命名空间
  2 所有php文件必须自动载入,不能有include/require
  3 单一入口
  
  
  文件:
  index.php
  App 文件夹
  imooc 文件夹
  

  类名 文件名 命名空间 必须一致
  注册 自动载入 类;include 包含进来。
  7 数据结构
  spl 数据结构   4种常用的数据结构
  
  栈
  $stack = new splstack(); 栈定义
  $stack->push('data1');// 入栈
  echo $stack->pop();//出栈
  

  队列
  $queue = new splQueue();
  $queue->enqueue('data1');
  $queue->enqueue('data2');
  echo $queue->dequeue();
  

  堆
  $heap = new splMinHeap();//最小堆
  $heap->insert('data1');//插入
  echo $heap->extract();//提取
  

  固定尺寸数组
  $array = new splFixedArray(10);
  $array = 123;
  $array = 234;
  var_dump($array);
  

  8 链式操作
  $db->where()->limit()->order();
  
  class Database{
  function where(){}
  function order(){}
  function limit(){}
  }
  
  传统:
  $db->where();
  $db->limit();
  $db->order();
  

  链式操作的核心就是:每个方法后,return $this;
  
  class Database{
  function where(){return $this;}
  function order(){return $this;}
  function limit(){return $this;}
  }
  9 魔术方法的使用
  1 __get/__set 对象属性接管
  2 __call/__callStatic方法/静态方法 调用
  3 __toString// 转换字符串
  4 __invoke// 当成函数执行
  

  对于对象不存在的属性的时候自动执行
  class Object{
  function __set($key,$value){
  $this->array[$key] = $value;
  }
  function __get($key){
  return $this->array($key);
  }
  }
  
  对于对象不存在的方法的时候自动执行
  class Object{
  function __call($func,$param){
  return 'magic function \n';
  }
  // 类的静态方法
  static function __callStatic($func,$param){
  return 'magic static function \n';
  }
  // echo $obj; 把类当作字符串用
  function __toString(){
  return __CLASS__;
  }
  //echo $obj($param); 把类当函数用
  function __invoke($param){
  return 'invoke';
  }
  }
  

  10 基础设计模式
  3种基本设计模式
  工厂模式、单立模式、注册模式
  工厂方法或类生成对象,而不是在代码中直接new
  单例模式:使某个类的对象仅允许创建一个
  注册模式:全局共享和交换对象。
  

  工厂模式:工厂方法替换new 操作
  
  class Factory{
  static function createDatebase(){
  $db = new Database();
  return $db;
  }
  }
  

  $db = IMooc\Factory::createDatabase();
  
  方便统一修改变化;
  

  单列模式: 防止资源浪费,一次创建
  class Database
  {
  private $db;
  private function __construct() //创建私有
  {
  
  }
  
  static function getInstance()
  {
  if(self::$db){
  return self::$db;
  }else{
  self::$db = new self();
  return self::$db;
  }
  
  }
  }
  

  

  注册模式:
  class Register{
  

  protected static $objects;
  function set($alias,$object){
  self::$objects[$alias] = $object;
  }
  

  function get($name){
  return self::$objects[$name];
  }
  function _unset($alias){
  unset(self::$objects[$alias]);
  }
  }
  

  用法:$db = Register::get('db1');
  

  适配器模式:
  1 适配器模式,可以将截然不同的函数接口封装成统一的API
  2 实际应用举例,php的数据库操作有mysql,mysqli,pdo3种模式,可以统一成益智的接口
  

  class mysql {}
  class mysqli {}
  class pdo{}
  

  
页: [1]
查看完整版本: php 设计模式 总结 上