php设计模式--命名空间与自动载入
关于命名空间:
最早的php是没有命名空间的概念的,这样不能存在相同名称的类或者函数,当项目变大了之后,产生冲突的可能性就高了,代码量也会变大,为了规划,从php5.3开始对命名空间就支持了。
说明代码:
test1.php
<?php
//声明命名空间
namespace Test1; function test(){
echo "test1<br/>";
}
test2.php
<?php
//声明命名空间
namespace Test2; function test(){
echo "test2<br/>";
}
将test1.php ,test2.php引入到test.php中:
test.php
<?php
//引入test1,test2
require 'test1.php';
require 'test2.php'; //命名空间的使用
Test1\test();
Test2\test();
如果不使用命名空间,显而易见php会报函数名重复致命错误,如果使用命令空间结果如下:
test1
test2
关于自动载入:
之前的php都是通过include或者require来引入php的,当项目越来越大的时候,如果一个php文件需要引入几十个php类的时候,那就会引入几十行,这样对管理代码和开发来说是很不方便的。在php5.2之后就提供了类的自动载入功能。
在php5.2中提供了__autoload 方法来引入,但是当多个php文件同时使用此方法时会有函数名重复的可能,在php5.3中这个函数被废弃了,系统提供了一个spl_auto_register()的方法。当换成spl_auto_register自动载入类之后,可避免冲突。
Test3.php
class Test3
{
static function test()
{
echo "test3-class<br/>";
}
}
Test4.php
<?php
class Test4
{
static function test()
{
echo "test4-class<br/>";
}
}
<?php
spl_autoload_register('autoload1');//函数名作为参数传入
spl_autoload_register('autoload2');//函数名作为参数传入可支持多个 Test3::test();
Test4::test(); function autoload1($class)
{
require __DIR__.'/'.$class.'.php';
} function autoload2($class)
{
require __DIR__.'/'.$class.'.php';
}
结果如下:
test3-class
test4-class
* 当php执行过程中发现你使用的类并不存在,这时候,php会把那个类名(Test3)告诉自动载入函数(autoload),然后我们只需要引入相关类就可以了。
总结:命名空间和自动载入对我们写好面向对象开发是很重要的。
php设计模式--命名空间与自动载入的更多相关文章
- PHP 类的命名空间 和自动载入
PHP 类的自动载入有两种方法,__autoload() 和 spl_autoload_register() ,就是在PHP代码中new一个类的时候,会自动触发,将类的类名包括命名空间作为参数传进入方 ...
- PHP设计模式:类自动载入、PSR-0规范、链式操作、11种面向对象设计模式实现和使用、OOP的基本原则和自动加载配置
一.类自动载入 SPL函数 (standard php librarys) 类自动载入,尽管 __autoload() 函数也能自动加载类和接口,但更建议使用 spl_autoload_registe ...
- PHP 设计模式 笔记与总结(1)命名空间 与 类的自动载入
① PHP 面向对象高级特性 ② 11 种 PHP 设计模式 ③ PSR-0,Composer,Phar 等最流行的技术 目标是掌握 PHP 各类设计模式,以及具备设计纯面向对象框架和系统的能力 [命 ...
- PHP——大话PHP设计模式——命名空间和类的自动载入
开发工具:phpstorm phpstudy 命名空间:声明当前文件 类的自动载入
- PHP 命名空间与自动加载机制
include 和 require 是PHP中引入文件的两个基本方法.在小规模开发中直接使用 include 和 require 没哟什么不妥,但在大型项目中会造成大量的 include 和 requ ...
- PHP 命名空间与自动加载机制介绍
include 和 require 是PHP中引入文件的两个基本方法.在小规模开发中直接使用 include 和 require 没哟什么不妥,但在大型项目中会造成大量的 include 和 requ ...
- PHP命名空间和自动加载初探
参考资料: PHP手册-语言参考:http://php.net/manual/zh/language.namespaces.php 概要: 1. 声明了命名空间之后,下面的const, funct ...
- 2)thinkphp的带有命名空间的自动加载机制
(1)为啥thinkphp里面的文件要是写你的命名空间,要与你的路径一样,因为在thinkphp实现自动加载机制的原理,就是靠的你的命名空间对应这个路径,然后自动加载机制通过这个路径找到你的类文件,然 ...
- 【php】命名空间 和 自动加载的关系
目的 本文的目的主要是说明 命名空间的 use 关键词 和 new ClassName 这两个步骤,哪个步骤才会执行自动加载,这是逻辑有点混乱的表现,这种想法也是很正常的,让我们来解密吧 命名空间(n ...
随机推荐
- linux用户和组的创建与管理!
useradd创建用户,usermod修改用户属性,userdel删除用户,groupadd创建组,groupmod修改组属性,groupdel删除组. 创建用户命令:useradd 语法: user ...
- 跨过Nginx上基于uWSGI部署Django项目的坑
先说说他们的关系,Nginx和uWSGI都是Web服务器,Nginx负责静态内容,uWSGI负责Python这样的动态内容,二者配合共同提供Web服务以实现提高效率和负载均衡等目的.uWSGI实现了多 ...
- 利用Sinopia搭建私有npm包
1.安装sinopia包 npm install -g sinopia 如果是Windows系统用上面的方式安装sinopia很有可能报错,推荐使用下面方式安装: npm install sinopi ...
- OC—NSDictionary和NSMutabelDictionary 可变字典和不可变字典
- RUN vs CMD vs ENTRYPOINT - 每天5分钟玩转 Docker 容器技术(17)
RUN.CMD 和 ENTRYPOINT 这三个 Dockerfile 指令看上去很类似,很容易混淆.本节将通过实践详细讨论它们的区别. 简单的说: RUN 执行命令并创建新的镜像层,RUN 经常用于 ...
- Eclipse设置问题:字体大小、修改注释内容、修改快捷键
一.设置字体大小,看下图,包括了设计代码字体大小和控制台输出字体大小 二.修改注释内容 选择window---->>preferences 选择Java---->>code s ...
- 细说Linux权限
目录: 归属权与访问权 chmod:访问权限设置 chown:所属权限设置 umask:权限掩码 隐藏属性 chattr:写保护.误删保护 单独限权 setfacl 一.归属和访问权限简介 1.归属( ...
- JSP/Servlet Web 学习笔记 DayTwo
JSP指令 a)page指令 定义JSP文件中的全局属性.一个JSP页面可以包含多个page指令.除了Import以外,其他page指令定义的属性/值只能出现一次. 其详细语法为: <%page ...
- VR全景智慧城市,完美的将虚拟与现实结合
很多人都粗浅的认为,VR虚拟智慧城市只是简单的将智慧城市和虚拟现实相结合的产物,这样的VR虚拟智慧城市看起来更像是个VR内容产品,而非城市建设成果.但是我们换个角度来思考的话,现在很多VR虚拟智慧城市 ...
- AVL树(平衡二叉查找树)
首先要说AVL树,我们就必须先说二叉查找树,先介绍二叉查找树的一些特性,然后我们再来说平衡树的一些特性,结合这些特性,然后来介绍AVL树. 一.二叉查找树 1.二叉树查找树的相关特征定义 二叉树查找树 ...