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()方法 (编辑:开发网_开封站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |