美文网首页
PHP命名空间和自动加载的理解

PHP命名空间和自动加载的理解

作者: 蔡先森_a1e2 | 来源:发表于2018-06-22 17:04 被阅读0次

    你有没有想过,在我们的项目中有这么多的类名,函数名,如果万一重复了呢,怎么办,这个还好说,毕竟是自己写的,可以改一下,但是万一我们引入了一个外部的类库文件,引起的类名重复呢,怎么办,是不是很头疼,所以php在5.3版本后加入了命名空间这个概念,就是为了解决类名冲突这个问题的,php手册是这样描述命名空间的作用的的:

1)用户编写的代码与PHP内部的类/函数/常量或第三方类/函数/常量之间的名字冲突。

2)为很长的标识符名称(通常是为了缓解第一类问题而定义的)创建一个别名(或简短)的名称,提高源代码的可读性。

请看下面的例子:

我们有一个文件index.php.里面定义了类one,然后包含了同级目录下的name.php文件,但是不幸的是

index.php内容 name.php内容

name.php文件里面也有一个类名为one的,那这样我们运行index.php的时候就会报错(Fatal error: Cannot declare class one, because the name is already in use in...),因为程序不知道我们实例化的到底是哪个文件里面的类one,所以这个时候命名空间的作用就来了,我们只要在name.php最开头加入namespace className/test;就行了,

name.php index.php

这样我们运行index.php的代码就不会报错了,一定一定要注意在实例化name.php的类的时候在最前面一定要加上\,告诉PHP从根命名空间而不是当前的命名空间开始搜索,如果没有\,PHP会去搜索className\one\className\text\命名空间下的one类.所以啊,一定不能忘记加上\

可能还有人说了new \className/text\one()这么写也太麻烦了,万一要是我的命名空间更长的话,那不是超级无敌麻烦吗,也对,但是PHP也给出了相应的办法,利用use来给命名空间取别名,

看到了吗,.我加了一行代码use className\text as hello; 这样我们在实例化的时候就可以用hello\one()代替上面那一串长长的实例话的代码了,其实把use还有一个特性就是如果你不主动as取别名的话那么他会自动用最后一个单词作为别名.就像这样也是一样滴;

其实命名空间真的就这么点东西,只要理解了还是挺简单的;那么什么是自动加载呢,自动加载其实就是当我们在实例化一个类的时候系统通过自动加载来自动的加载进来我们实例化的这类,这样我们就不用在每个文件里面写require_once了,万一要包含进来几十个文件,那不是爆炸了啊,那他是怎么实现的,其实也简单,通过解析类名,然后得到这个类的实际的文件目录,然后加载进来,这样就需要我们的命名空间符合一定的规律了,这个规律好像叫psr-4的规范,反正大体的意思就是命名空间的声明要跟目录名对应起来,

可以参考这篇文章,讲的非常好:https://www.cnblogs.com/woider/p/6443854.html

相关文章

  • PHP命名空间和自动加载的理解

    你有没有想过,在我们的项目中有这么多的类名,函数名,如果万一重复了呢,怎么办,这个还好说,毕竟是自己写的,可以改一...

  • 2022-03-13 保存表格

    1 加载autoload.php 载入composer自动加载文件使用命名空间里的类文件,(可以给类文件的命名空间...

  • php设计模式

    php设计模式:命名空间,类的自动加载,SPL标准库(理解),PSR_0基础框架 当实例化类的时候,自己执行这个方...

  • php命名空间与自动加载

    命名空间(PHP 5 >= 5.3.0, PHP 7) 什么是命名空间?从广义上来说,命名空间是一种封装事物的方法...

  • Composer 的 Autoload 源码实现 - 启动与初始

    前言 上一篇文章,我们讨论了PHP的自动加载原理、PHP的命名空间、PHP的PSR0与PSR4标准,有了这些知识,...

  • rapidPHP 1.1.0 - 自动加载

    什么是自动加载 采用规定的命名规则,实现new class,不存在的时候自动加载这个类 命名规则 命名空间 当前项...

  • composer自动加载

    理解自动加载函数的原理 在实例话一个类时,如有全局的自动加载函数,则会将类的命名空间及类名传入到加载函数,然后由加...

  • ThinkPHP 5.0 (九)命名空间-1

    命名空间 ThinkPHP5采用命名空间方式定义和自动加载类库文件,有效的解决了多模块和Composer类库之间的...

  • TP5学习笔记一 命名空间

    ThinkPHP5采用命名空间方式定义和自动加载类库文件,有效的解决了多模块和Composer类库之间的命名空间冲...

  • PHP 命名空间与自动加载机制介绍

    include 和 require 是PHP中引入文件的两个基本方法。在小规模开发中直接使用 include 和 ...

网友评论

      本文标题:PHP命名空间和自动加载的理解

      本文链接:https://www.haomeiwen.com/subject/kjqxyftx.html