加入收藏 | 设为首页 | 会员中心 | 我要投稿 开发网_开封站长网 (http://www.0378zz.com/)- 科技、AI行业应用、媒体智能、低代码、办公协同!
当前位置: 首页 > 站长学院 > PHP教程 > 正文

PHP开发自己的框架,你必须了解这些知识点!

发布时间:2022-07-29 12:49:22 所属栏目:PHP教程 来源:互联网
导读:一、PHP常用的四种数据结构 简介:spl是php的一个标准库。 ?php //spl(php标准库)数据结构 /** * 栈(先进后出) */ $stack = new SplStack(); $stack-push(data1);//入栈(先进后出) $stack-push(data2);//入栈 $stack-push(data3);//入栈 echo $stack-p
  一、PHP常用的四种数据结构
 
  简介:spl是php的一个标准库。
 
 
 
  <?php
 
   
 
  //spl(php标准库)数据结构
 
   
 
  /**
 
   * 栈(先进后出)
 
   */
 
  $stack = new SplStack();
 
  $stack->push('data1');//入栈(先进后出)
 
  $stack->push('data2');//入栈
 
  $stack->push('data3');//入栈
 
   
 
  echo $stack->pop();//出栈
 
  echo $stack->pop();//出栈
 
  echo $stack->pop();//出栈
 
   
 
   
 
  /**
 
   *队列(先进先出)
 
   */
 
  $queue = new SplQueue();
 
  $queue->enqueue('data4');//入队列
 
  $queue->enqueue('data5');//入队列
 
  $queue->enqueue('data6');//入队列
 
   
 
  echo $queue->dequeue();//出队列
 
  echo $queue->dequeue();//出队列
 
  echo $queue->dequeue();//出队列
 
  echo $queue->dequeue();//出队列
 
   
 
   
 
  /**
 
   * 堆
 
   */
 
  $heap = new SplMinHeap();
 
  $heap->insert('data8');//入堆
 
  /**
 
   * 固定数组(不论使不使用,都会分配相应的内存空间)
 
   */
 
  $array = new SplFixedArray(15);
 
  $array['0'] = 54;
 
  $array['6'] = 69;
 
  $array['10'] = 32;
 
  var_dump($array);
 
  二、PHP链式操作的实现(原理)
  1、入口文件 index.php
 
  /**
 
   * 框架入口文件
 
   */
 
  define('BASEDIR',__DIR__);//项目根目录
 
  include BASEDIR.'/Extend/Loader.php';//引入项目自动加载类文件
 
  spl_autoload_register('ExtendLoader::autoload');//执行自动加载函数,完成类的自动加载
 
  $db = new ExtendDatabase();
 
  $db->where('uid < 100000')->->order('uid desc')->limit(100);
 
  2、自动加载类 Loader.php
 
 
  /**
 
   * 实现框架的自动加载
 
   */
 
  class Loader
 
  {
 
      /**
 
       * 实现文件的自动载入
 
       */
 
      static function autoload($class)
 
      {
 
          require BASEDIR.'/'.str_replace('','/',$class).'.php';
 
      }
 
   
 
   
 
  }
 
  3、数据库类Database.php
 
  注:只是原理,并没有对方法进行具体的封装,具体的封装还是看个人喜好去定链式查询的风格。
 
 
 
  <?php
 
  namespace Extend;
 
   
 
  class Database
 
  {
 
      /**
 
       * 指定查询条件
 
       * @param $where
 
       */
 
      function where($where)
 
      {
 
          return $this;
 
      }
 
   
 
      /**
 
       * 指定排序条件
 
       */
 
      function order($order)
 
      {
 
          return $this;
 
      }
 
   
 
      /**
 
       * 指定查询的限制条数
 
       * @param $limit
 
       */
 
      function limit($limit)
 
      {
 
          return $this;
 
      }
 
   
 
   
 
  }
 
  其实就是对传过来的条件进行重新的底层封装,然后再把当前对象返回,使得可以不断的链式查询。
 
  三、PHP魔术方法的使用
  在php设计模式中,会涉及到很多魔术方法的使用,这里也对经常会用到的魔术方法进行简单总结。
 
  1、框架入口文件 index.php
 
 
 
  <?php
 
  /**
 
   * 框架入口文件
 
   */
 
  define('BASEDIR',__DIR__);//项目根目录
 
  include BASEDIR.'/Extend/Loader.php';//引入项目自动加载类文件
 
  spl_autoload_register('ExtendLoader::autoload');//执行自动加载函数,完成类的自动加载
 
 
  /**
 
   * 魔术方法的使用
 
   */
 
   
 
  # 实例化Object类
 
  $obj = new ExtendObject();//当前文件不存在这个类,就会自动执行自动加载函数去包含相应的类文件(即 Extend/Object.php)
 
  # __set 和 __get 对不存在的属性进行接管
 
  $obj->title = 'xiaobudiu'; //当对一个不存在的类属性赋值时,会自动调用类中定义的__set()
 
  echo $obj->title; //当调用一个不存在的类属性时,会自动调用类中定义的__get()
 
   
 
   
 
  # __call 和 __callStatic 对不存在或者权限不够的类方法进行接管
 
  $obj->getUserInfo('1000068'); //当调用一个不存在的类方法时,会调用__call(),并自动将当前方法名和参数传到__call方法中
 
  ExtendObject::getOpenId('1000068'); //当调用一个不存在的类静态方法时,会调用__callStatic(),并自动将当前方法名和参数传递到__callStatic方法中
 
  # echo或print对象时,由__toString 接管
 
  echo $obj; //当echo或print一个对象时,会自动调用类中定义的__toString方法
  
 
  # 在php中,如果我们把一个对象当成函数用,则由__invoke()接管
 
  $obj('xiaobudiu');//当我们将一个对象当成函数用的时候,会自动调用当前类中定义的__invoke()方法

(编辑:开发网_开封站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    热点阅读