• 欢迎访问搞代码网站,推荐使用最新版火狐浏览器和Chrome浏览器访问本网站!
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏搞代码吧

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

php 搞代码 4年前 (2022-01-20) 19次浏览 已收录 0个评论

一、PHP常用的四种数据结构

简介:spl是php的一个标准库。

官方文档:http://php.net/manual/zh/book.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');//入堆
$heap->insert('data9');//入堆
$heap->insert('data10');//入堆

echo $heap-&g<strong>)本文来(源gaodai#ma#com搞@@代~&码*网2</strong><pre>搞代gaodaima码

t;extract();//从堆中提取数据
echo $heap->extract();//从堆中提取数据
echo $heap->extract();//从堆中提取数据

/**
* 固定数组(不论使不使用,都会分配相应的内存空间)
*/
$array = new SplFixedArray(15);
$array['0'] = 54;
$array['6'] = 69;
$array['10'] = 32;
var_dump($array);

二、PHP链式操作的实现(原理)

1、入口文件 index.php

<?php
/**
 * 框架入口文件
 */
define('BASEDIR',__DIR__);//项目根目录
include BASEDIR.'/Extend/Loader.php';//引入项目自动加载类文件
spl_autoload_register('\\Extend\\Loader::autoload');//执行自动加载函数,完成类的自动加载


$db = new \Extend\Database();
$db->where('uid < 100000')->->order('uid desc')->limit(100);

2、自动加载类 Loader.php

<?php
namespace Extend;
/**
 * 实现框架的自动加载
 */
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('\\Extend\\Loader::autoload');//执行自动加载函数,完成类的自动加载


/**
 * 魔术方法的使用
 */

# 实例化Object类
$obj = new \Extend\Object();//当前文件不存在这个类,就会自动执行自动加载函数去包含相应的类文件(即 Extend/Object.php)


# __set 和 __get 对不存在的属性进行接管
$obj->title = 'xiaobudiu'; //当对一个不存在的类属性赋值时,会自动调用类中定义的__set()
echo $obj->title; //当调用一个不存在的类属性时,会自动调用类中定义的__get()


# __call 和 __callStatic 对不存在或者权限不够的类方法进行接管
$obj->getUserInfo('1000068'); //当调用一个不存在的类方法时,会调用__call(),并自动将当前方法名和参数传到__call方法中
\Extend\Object::getOpenId('1000068'); //当调用一个不存在的类静态方法时,会调用__callStatic(),并自动将当前方法名和参数传递到__callStatic方法中


# echo或print对象时,由__toString 接管
echo $obj; //当echo或print一个对象时,会自动调用类中定义的__toString方法


# 在php中,如果我们把一个对象当成函数用,则由__invoke()接管
$obj('xiaobudiu');//当我们将一个对象当成函数用的时候,会自动调用当前类中定义的__invoke()方法

搞代码网(gaodaima.com)提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发送到邮箱[email protected],我们会在看到邮件的第一时间内为您处理,或直接联系QQ:872152909。本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:PHP开发自己的框架,你必须知道这些知识点!

喜欢 (0)
[搞代码]
分享 (0)
发表我的评论
取消评论

表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址