摘要:不传参数,直接调用,会默认调用来加载类,如果后面再调用有传参数的,也会失效的如果使用了命名空间,那么会把路径和类名一同带过来的。
自动加载
两种实现方式
1、__autoload();
2、spl_autoload_register(); (主要使用)
__autoload()
现在很少使用,因为使用这种方式,在一个系统的实现中,假如需要使用很多其它的类库,这些类库可能是由不同的开发工程师开发,其类名与实际的磁盘文件的映射规则不尽相同。这时假如要实现类库文件的自动加载,就必须在__autoload()函数中将所有的映射规则全部实现,因此__autoload()函数有可能会非常复杂,甚至无法实现。最后可能会导致__autoload()函数十分臃肿,这时即便能够实现,也会给将来的维护和系统效率带来很大的负面影响。在这种情况下,在PHP5引入SPL标准库,一种新的解决方案,即spl_autoload_register()函数。
function __autoload($class_name) { require_once ($class_name . “class.php”); } $memo= new Demo();
spl_autoload_register()
此函数的功能就是把函数注册至SPL的__autoload函数栈中,并移除系统默认的__autoload()函数。
不传参数,直接调用**spl_autoload_register()**,会默认调用spl_autoload()来加载类,如果后面再调用**spl_autoload_register()**(有传参数的),也会失效的 *如果使用了命名空间,那么$class_name会把路径和类名一同带过来的。*命名空间
主要技术点
*namespace* (定义命名空间) *use* (使用命名空间的快捷方式) \__NAMESPACE\__ (获取当前命名空间)
命名空间分类
1、**逻辑命名空间**----与实际物理地址没有任何关系 2、**物理命名空间**----按照实际目录结构定义的(*推荐使用*,方便寻址)
定义命名空间
namespace wt aobao; 注意:必须使用**反斜杠**,而且开头不能以反斜杠开头
使用命名空间
1、**非限定名称**(调用当前命名空间的类) 2、**限定名称**(调用当前命名空间的子命名空间的类) 3、**完全限定名称**(调用非当前命名空间或非当前命名空间的子空间的类)
命名空间的价值
解决2个问题: 1、用户编写的代码与PHP内部的类/函数/常量或第三方类/函数/常量之间的名字冲突。 2、为很长的标识符名称(通常是为了缓解第一类问题而定义的)创建一个别名(或简短)的名称,提高源代码的可读性。
命名空间的作用域
只有 函数、类、常量 能存在作用域下(其余元素不会存在在命名空间中)
注意: 1、变量不受命名空间(逻辑路径)作用,变量是全局的 例如:$name = "xcxcx"; 2、能使用命名空间的常量,只能是const定义的常量,而define定义的常量是全局,不受命名空间作用 例如:const CON = "xcxcsdw"; 3、在嵌套的情况下(例如:a.php嵌套b.php),b.php中的函数、类、常量不会继承a.php中的命名空间,而b.php中默认是顶级命名空间
文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。
转载请注明本文地址:https://www.ucloud.cn/yun/22180.html
摘要:前言在开始之前,欢迎关注我自己的博客这篇文章是对自动加载功能的一个总结,内容涉及的自动加载功能的命名空间的与标准等内容。要实现第一步,第二步的功能,必须在开发时约定类名与磁盘文件的映射方法,只有这样我们才能根据类名找到它对应的磁盘文件。 前言 在开始之前,欢迎关注我自己的博客:www.leoyang90.cn 这篇文章是对PHP自动加载功能的一个总结,内容涉及PHP的自动加载功能、P...
摘要:任务是加载类的初始化顶级命名空间与文件路径映射初始化和注册。在实际情况下可能会出现这样的情况。值得注意的是这个函数返回的是一个匿名函数,为什么呢原因就是类中的等等都是的。。。关于匿名函数的绑定功能。 前言 在开始之前,欢迎关注我自己的博客:www.leoyang90.cn 上一篇文章,我们讨论了 PHP 的自动加载原理、PHP 的命名空间、PHP 的 PSR0 与 PSR4 标准,有...
摘要:如果遍历后没有找到,则加载失败。在之后碰到了之后直接拿来用,提高系统自动加载的性能。这里我们就讲完了注册自动加载。使用自动加载我们在中定义了我们自动加载函数式方法。 继 生命周期的第二篇,大家尽可放心,不会随便鸽文章的 第一篇中,我们提到了入口脚本,也说了,里面注册了自动加载的功能 本文默认你有自动加载和命名空间的基础。如果没有请 看此篇文章 php 类的自动加载与命名空间 自动加载...
摘要:概述这份声明了关于从文件路径自动加载类的规范。当根据完全限定类名加载对应的文件时由最开始的命名空间开始,连续的一个或多个命名空间组成的序列,不包括最前面的命名空间分隔符,在这个完全限定类名中这个序列称为命名空间前缀,对应了至少一个基础目录。 PSR-4:自动加载 翻译:薛粲授权许可:CC BY-NC 4.0 这份文档是《PSR-4: Autoloader》的非官方译文。 英文原文使用的...
前言 在开始之前,欢迎关注我自己的博客:www.leoyang90.cn上一篇 文章我们讲到了 Composer 自动加载功能的启动与初始化,经过启动与初始化,自动加载核心类对象已经获得了顶级命名空间与相应目录的映射,换句话说,如果有命名空间 AppConsoleKernel,我们已经知道了 App 对应的目录,接下来我们就要解决下面的就是 ConsoleKernel这一段。 注册 我们先回顾...
阅读 3095·2021-02-22 17:12
阅读 718·2019-08-30 15:55
阅读 3077·2019-08-30 15:54
阅读 1383·2019-08-29 16:56
阅读 1861·2019-08-29 15:13
阅读 1715·2019-08-29 13:19
阅读 600·2019-08-26 13:40
阅读 2821·2019-08-26 10:26