PHP之设计模式(一)---铺垫篇

本文介绍了PHP面向对象编程的高级特性,如命名空间和类自动加载,并基于这些特性搭建了一个简单的面向对象基础框架。此外,还介绍了SPL标准库的基本使用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

   掌握PHP各类设计模式,具备设计纯面向对象框架和系统能力是非常有必要的。给大家一个小建议吧,学习设计模式的时候,使用phpStorm工具,因为设计模式是纯面向对象的,有很多的类,phpStorm 这个IDE工具有很多的快捷方式能帮助你快速找到对应的类。那么废话少数说,下面进入正题吧。

一、面向对象的高级特性
1,命名空间
最早的PHP是没有命名空间的,所有的代码都是在同一个命名空间下,这样就不能重载相同的类或函数,随着我们项目的工程越来越大,文件越来越多,这个时候产生命名冲突就会越来越多,代码也会越来越复杂。到PHP5.3的时候,出现了命名空间。规定所有命名空间放在文件的开头位置(关于命名空间的具体语法及使用这里就不说了,大家自行去学习。本篇博客主要说的是设计模式)
2,类自动载入
最早的时候我们载入类都是通过include或者require来实现,当PHP项目变大之后,载入的文件越来越多,那如果一个文件要依赖几十个类文件,那就要在这个文件的前边写几十个require,这样会给开发带来不便。通过自动载入就能很方便的载入我们需要的类(自动载入的知识也需要大家自己去学习)

前边我们提了命名空间和类自动载入,那么现在我们就用这两个知识来搭一个PHP面向对象的基础框架。首先我们来说一下PSR-0这个规范(PHP面向对象编码规范)。这个规范有三项约定
1,PHP的命名空间必须与绝对路径一致
2,类名的首字母必须大写
3,除了入口文件之外,其它“.php”必须只有一个类,不能有其它的可执行的代码

开发一个符合PSR-0规范的基础框架
1,全部使用命名空间
2,所有PHP文件必须自动载入,不能有include/require
3,单一入口文件

PSR-0规范框架代码

首先我给我的目录先截一下图
这里写图片描述

index.php
<?php
//入口文件
define('BASEDIR', __DIR__);//整个框架的根目录

include BASEDIR.'/Shulv/Loader.php';

spl_autoload_register('\\Shulv\\Loader::autoload');

Shulv\Object::test();

App\Controller\Home\Index::test();
Object.php
<?php
namespace Shulv;

class Object
{
    static function test(){
        echo "test()"."<br />";
    }
}

//不能再有任何其它可执行的代码
Loader.php

<?php
namespace Shulv;

class Loader{
    static function autoload($class){
        require BASEDIR.'/'.str_replace('\\', '/', $class).'.php';
    }
}
Index.php
<?php
namespace App\Controller\Home;

class Index{
    static function test(){
        echo __METHOD__;
    }
}

这里主要学的是思想,框架代码是很简单的。
3,SPL标准库简介(PHP标准库)
SPL中提供了很多常用数据结构的一些封装,具体的可以去php的官方网站(www.php.net/spl)来查看有关SPL的一些东西。

//比如栈结构(先进后出)
$stack = new SplStack();//栈主要有两种接口,就是进(push())和出(pop())
$stack->push("data1\n");//入栈
$stack->push("data2\n");//入栈

echo $stack->pop();//出栈
echo $stack->pop();//出栈

输出结果:
data2
data1
//队列结构
$queue = new SplQueue();//队列是先进先出

$queue->enqueue("data1\n");//入队列
$queue->enqueue("data2\n");//入队列

echo $queue->dequeue();//出队列
echo $queue->dequeue();//出队列

输出结果:
data1
data2
//堆结构
$heap = new SplMinHeap();
$heap->insert("data1\n");//将数据插入到堆
$heap->insert("data2\n");//将数据插入到堆

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

运行结果
data1
data2

到这里,设计模式铺垫篇完成,下一篇博客,就正式详细讲解PHP中的各种设计模式

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值