php 设计模式--准备篇
要了解设计模式 首先我们要先了解 php的命名空间和类的自动载入的功能
下面我们来说一下
命名空间
概念缘由:比如一个a.php的文章 但是我们需要两个 此时同一个目录下不可能存在两个a.php 那么我们可以放到my/home 和 my/home1的目录下 此时命名空间就有了它的意义
那么空间即为my/home/a.php
namespace my\name;
demo
<?php
//file a.php
namespace my/home;
const test = ’Atest’;
function test() {
return __FUNCTION__;
}
class Test{
public function __construct(){
return __METHOD__;
}
}
?>
那么下面就是自动加载的问题了
原本最为简单的自动加载是
function __autoload($class) {
$dir = ’./’;
set_include_path(get_include_path().PATH_SEPARATOR.$ids_dir);
$class = str_replace(’\’, ’/’, $class) . ’.php’;
require_once($class); }
但是用__autoload()这种方法已经out了
现在我们用的更多的是spl_autoload_register(优势)
面试可能设计到
对比:
1。spl_autoload_register可以进行多次的写注册加载函数,谁先注册谁就先调用,但是_autoload()只能调用一次
2.spl_autoload_register可以catch错误
3.既然可以注册那么我们也可以用spl_autoload_unregister()解除注册。
通过上面的学习我们可以进行一个psr的架构处理了
psr概念:
1、PSR-0规范
[1]命名空间必须与绝对路径一致
[2]类名首字母必须大写
[3]除去入口文件外,其他“.php”必须只有一个类
[4]php类文件必须自动载入,不采用include等
[5]单一入口
2、案例
[1]目录结构

[2]源码
index.php
<?php
define('BASEDIE',__DIR___);
require_once('/Config/Loader.php');
spl_autoload('\\Config\\Loader.php::autoload');
Config\Object::test();
App\Home\Index::test();
Config/Object.php
<?php
namespace Config;
class Object{
static function test(){
echo "nihao";
}
}
Config/Loader.php
<?php
namespace Config;
class Loader{
static function autoload($class)
{
require_once(BASEDIE.'/Config/'.str_replace('\\','/',$class).'.php');
}
}
App/Home/Index.php
<?php
namespace App\Home;
class Index{
static function test(){
echo "ceshixinxi";
}
}
php 设计模式--准备篇的更多相关文章
- 设计模式总结篇系列:享元模式(Flyweight)
我们都知道,Java中的String类具有如下特性:String是一个不可变类,当直通过用字符串方式使用String对象时,Jvm实际上在内存中只存有一份,且存在字符串常量池中.当对字符串直接进行修改 ...
- 设计模式总结篇系列:原型模式(Prototype)
首先对原型模式进行一个简单概念说明:通过一个已经存在的对象,复制出更多的具有与此对象具有相同类型的新的对象. 在理解Java原型模式之前,首先需要理解Java中的一个概念:复制/克隆. 在博文< ...
- 设计模式总结篇系列:抽象工厂模式(Abstract Factory)
在上一篇的工厂方法模式中,通过一个公用的类对其他具有相同特性(实现相同接口或继承同一父类)的类的对象进行创建.随之带来的问题在于:当新定义了一个具有相同特性的类时,需要修改工厂类.这与设计模式中的开闭 ...
- [Android&Java]浅谈设计模式-代码篇:观察者模式Observer
观察者,就如同一个人,对非常多东西都感兴趣,就好像音乐.电子产品.Game.股票等,这些东西的变化都能引起爱好者们的注意并时刻关注他们.在代码中.我们也有这种一种方式来设计一些好玩的思想来.今天就写个 ...
- IOS设计模式第一篇之MVC
设计模式的好处:我们可以写出容易理解,重用度很高的代码.降低代码的耦合度,符合软件工程的思想. 设计模式主要分为三类:创造型的:单例和抽象工厂.结构类型的: MVC Decorator, Adapt ...
- 设计模式总结篇系列:策略模式(Strategy)
前面的博文中分别介绍了Java设计模式中的创建型模式和结构型模式.从本文开始,将分别介绍设计模式中的第三大类,行为型模式.首先我们了解下分为此三大类的依据. 创建型模式:主要侧重于对象的创建过程: 结 ...
- 设计模式总结篇系列:桥接模式(Bridge)
在实际类设计过程中,有时会遇到此类情况:由于实际的需要,某个类具有两个或两个以上的维度变化,如果利用继承将每种可能的变化情况都定义成一个类,一是会导致类膨胀的问题,二是以后不太好维护和并且违背类的设计 ...
- 设计模式总结篇系列:代理模式(Proxy)
时代在发展,我们发现,现在不少明星都开始进行微访谈之类的,有越来越多的参与捐赠等.新的一天开始了,首先看下新的一天的日程安排: interface Schedule{ public void weiT ...
- 设计模式总结篇系列:装饰器模式(Decorator)
在面向对象设计过程中,经常会遇到需要对现有的类的功能进行扩展,通常我们可以采用继承的方式.例如老罗最近在做手机,一开始需要定义手机所应具有的功能: interface Phone{ public vo ...
随机推荐
- [更新]跨平台物联网通讯框架 ServerSuperIO v1.2(SSIO),增加数据分发控制模式
1.[开源]C#跨平台物联网通讯框架ServerSuperIO(SSIO) 2.应用SuperIO(SIO)和开源跨平台物联网框架ServerSuperIO(SSIO)构建系统的整体方案 3.C#工业 ...
- activiti工作流的web流程设计器整合视频教程 SSM和独立部署
本视频为activiti工作流的web流程设计器整合视频教程 整合Acitiviti在线流程设计器(Activiti-Modeler 5.21.0 官方流程设计器) 本视频共讲了两种整合方式 1. 流 ...
- QT数据库连接的几个重要函数的使用及注意事项(原创)
注:在这里数据库对象等同于数据库连接对象,也就是QSqlDatabase类的对象 QSqlDatabase QSqlDatabase::addDatabase((const QString & ...
- jQuery 中bind(),live(),delegate(),on() 区别(转)
当我们试图绑定一些事件到DOM元素上的时候,我相信上面这4个方法是最常用的.而它们之间到底有什么不同呢?在什么场合下用什么方法是最有效的呢? 准备知识: 当我们在开始的时候,有些知识是必须具备的: D ...
- SQL Server游标(转)
清晰地介绍了SQL游标,很好的学习资料. 转自 http://www.cnblogs.com/knowledgesea/p/3699851.html 什么是游标 结果集,结果集就是select查询之后 ...
- 【移动前端开发实践】从无到有(统计、请求、MVC、模块化)H5开发须知
前言 不知不觉来百度已有半年之久,这半年是996的半年,是孤军奋战的半年,是跌跌撞撞的半年,一个字:真的是累死人啦! 我所进入的团队相当于公司内部创业团队,人员基本全部是新招的,最初开发时连数据库都没 ...
- 获得设备的唯一标识符UDID
在IOS5之后,苹果为避免根据UDID获得用户的信息,而禁止使用uniqueIdentifier获得UDID,但是仍有些应用需要根据UDID区分设备 有一个系统的库IOKit.framework可以获 ...
- js继承方式
1.原型链 实现的本质是重写原型对象,代之以一个新类型的实例: 给原型添加方法的代码硬顶放在替换原型的语句之后: 不能使用对象字面量查收能见原型方法,这样会重写原型链. 缺点:包含引用类型值的原型属性 ...
- win7 64位下vs不能以管理员身份运行的问题解决
开发机上安装了VS6.0/2008/2010/2013,之前一直是正常的,突然莫名其妙不能以管理员身份运行(除了VS6),报"application cannot start.", ...
- 尝试解析js面试题(二)
说明:一共有13题(原本14题,最后一道什么鬼,嫌弃不要了),覆盖面比较广,都属于比较烧脑的类型,各种神坑:不过对于夯实js理论基础帮助非常大:看看都能做对几题吧(