博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
自动加载与命名空间
阅读量:6257 次
发布时间:2019-06-22

本文共 1387 字,大约阅读时间需要 4 分钟。

自动加载

  • 两种实现方式

    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\\taobao;    注意:必须使用**反斜杠**,而且开头不能以反斜杠开头
  • 使用命名空间

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中默认是顶级命名空间

转载地址:http://gensa.baihongyu.com/

你可能感兴趣的文章
跨域iframe高度自适应(兼容IE/FF/OP/Chrome)
查看>>
如何花更少的时间学习更多的知识
查看>>
学习鸟哥的Linux私房菜笔记(8)——文件查找与文件管理2
查看>>
升级fedora 18到fedora 19
查看>>
【代码小记】无
查看>>
BarTender 2016表单中的“秤显示”控件
查看>>
11月20日学习内容整理:jquery插件
查看>>
Redis客户端集群
查看>>
javascript基础篇:函数
查看>>
SVN与TortoiseSVN实战:补丁详解
查看>>
java一些面试题
查看>>
干货型up主
查看>>
获取页面中所有dropdownlist类型控件
查看>>
读《淘宝数据魔方技术架构解析》有感
查看>>
[转载]如何破解Excel VBA密码
查看>>
【BZOJ】2563: 阿狸和桃子的游戏
查看>>
redis 中文字符显示
查看>>
国内外MD5在线解密网站
查看>>
【OC语法要闻速览】一、方法调用
查看>>
Git-命令行-删除本地和远程分支
查看>>