首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

PSR-4规范:自动加载

(MUST)类名来结尾。...1.2.3 当加载完全合规的类名对应的文件时… (1) 在完全合规的类名中, 不包含前面的命名空间分隔符,由一个顶级命名空间与一个或多个二级命名空间名称组成的命名空间前缀,对应于至少一个“base目录”.... (2) 在命名空间前缀后面的二级命名空间名称对应于“base目录”中的一个子目录, 这里命名空间分隔符表示目录分隔符。...子目录名称必须(MUST)匹配到二级命名空间名称。 (3) 后面的类名对应于.php为后缀的文件名,这个文件名必须(MUST)匹配到后面的类名。...PSR-4应用 PHP的包管理系统Composer已经支持PSR-4,同时也允许在composer.json中定义不同的prefix使用不同的自动加载机制。

44940

PHP规范PSR0和PSR4的理解

(Vendor Name); 完全限定类名可以有多个子命名空间; 完全限定类名应该有一个终止类名; 下划线在完全限定类名中是没有特殊含义的; 字母在完全限定类名中可以是任何大小写的组合; 所有类名必须大小写敏感的方式引用...; 当从完全限定类名载入文件时: 在完全限定类名中,连续的一个或几个子命名空间构成的命名空间前缀(不包括顶级命名空间分隔符),至少对应着至少一个基础目录。...在「命名空间前缀」后的连续子命名空间名称对应一个「基础目录」下的子目录,其中的命名 空间分隔符表示目录分隔符。子目录名称必须和子命名空间名大小写匹配; 终止类名对应一个 .php 结尾的文件。...文件名必须和终止类名大小写匹配; 自动载入器的实现不可抛出任何异常,不可引发任何等级的错误;也不应返回值; 参考:http://www.php-fig.org/psr/psr-4/ 在其中有以下的类实例...\Acme\Log\Writer\File_Writer作为例子,其名称空间前缀是\Acme\Log\Writer,则其在autoload_psr4.php表示为 '\<span style="font-size

1.2K20
您找到你想要的搜索结果了吗?
是的
没有找到

PHP如何使用Composer来自动加载项目文件?

} } } psr-4顾名思义,是一个基于psr-4(http://www.php-fig.org/psr/psr-4/)规则的类库自动加载对应关系,只要在其后的对象中, "命名空间": "...prs-4规范 在PSR-4里边需要定义一个命名空间前缀到路径的映射(相对于包的根目录),如果命名空间前缀Foo\指向一个文件目录src/,当自动加载一个类时,比如Foo\Bar\Baz类,那么这个类的路径为...src/Bar/Baz.php,命名空间前缀可以不在路径之中。...在composer.json中的命名空间必须\结尾,以避免名字冲突 如果想要明确的指定,在每次请求时都要载入某些文件,那么你可以使用 files autoloading,通常作为函数库的载入方式(而非类库...在 PSR-0 标准中,您必须使用命名空间来定义您的库。完全限定的类名必须反映\\(\)*结构。此外,您的类必须保存在遵循与命名空间相同的目录结构的文件中。

3.1K40

PSR-4 自动加载规范

全限定类名具有以下形式: 1\(\)*\ 全限定类名必须拥有一个顶级命名空间名称,也称为供应商命名空间(vendor...所有类名的引用必须区分大小写。 全限定类名的加载过程 在全限定的类名(一个 命名空间前缀)中,一个或多个前导命名空间和子命名空间组成的连续命名空间,不包括前导命名空间分隔符,至少对应一个根目录。...命名空间前缀后面的相邻子命名空间与根目录下的目录名称相对应(且必须区分大小写),其中命名空间分隔符表示目录分隔符。...最终的类名与.php 结尾的文件名保持一致,这个文件的名字必须和最终的类名相匹配(意思就是如果类名是 FooController,那么这个类所在的文件名必须是 FooController.php)。...范例 下表显示了与给定的全限定类名、命名空间前缀和根目录相对应的文件的路径。

33210

composer autoloader

4 类映射与PSR-0与PSR-4的对比。 这里有很多不同的类映射方式,一旦使用其中一种,就要遵循规则,composer会根据遵循的去查找和加载。...b) PSR-0: 当这个逻辑存在在 vendor/composer/autoload_namespaces.php, 要遵循PSR-0规则. c) PSR-4: 当存在在 vendor/composer...必须使用名称空间,尤其是PSR-4,因为名称空间附加到文件路径。 子目录名称必须与子命名空间名称的大小写匹配。...-PSR-4 PSR-0将下划线转换为目录分隔符,而它不在PSR-4中: 每个 "_" in the CLASS NAME 被转换成 a DIRECTORY_SEPARATOR....php // path /Classes/A.php class Classes_A {} 注意L这里没有用到命名空间composer.json运行时,任何命名空间前缀App将在Classes目录中查找该文件

69010

PHP的PSR系列规范都有啥内容

) 每个命名空间可以有任意多个子命名空间 每个命名空间在被从文件系统加载时必须被转换为“操作系统路径分隔符”(DIRECTORY_SEPARATOR ) 每个“_”字符在“类名”中被转换为DIRECTORY_SEPARATOR...“_”符号在命名空间中没有明确含义 符合命名标准的命名空间和类名必须“.php”结尾来加载文件 Vendor Name,命名空间,类名可以由大小写字母组成,其中命名空间和类名是大小写敏感的保证多系统兼容性...当从完全限定类名载入文件时: 在完全限定类名中,连续的一个或几个子命名空间构成的命名空间前缀(不包括顶级命名空间分隔符),至少对应着至少一个基础目录 在「命名空间前缀」后的连续子命名空间名称对应一个...「基础目录」下的子目录,其中的命名 空间分隔符表示目录分隔符。...子目录名称必须和子命名空间名大小写匹配 终止类名对应一个 .php 结尾的文件。

91370

PHP 面试知识梳理

一个单例类应该具备以下几个因素: 必须拥有一个访问级别为 private的构造函数,用于阻止类被随意实例化 必须拥有一个保存类的实例的静态变量 必须拥有一个访问这个实例的公共静态方法,该方法通常被命名为...PSR-4和PSR-0最大的区别是对下划线的定义不同,PSR-4中,在类名中使用下划线是没有特殊含义的,而在PSR-0的规则中,下划线或被转化为目录分隔符。...在PSR-4的键下,你可以定义命名空间和路径的映射关系,当自动加载类如 Foo\\Bar\\Baz时,命名空间 Foo指向一个名为 src/的目录意味着自动加载器将查找名为 src/Bar/Baz.php...命名空间前缀必须 \\结尾,以避免类似前缀之间的冲突。...例子: { "autoload": { "psr-4": { "App\\": "App/" // 命名空间App映射到目录App } } }

1.3K51

PHP自动加载与composer自动加载

A类 在不同操作系统中,目录分隔符会不同,以上代码可能不能正常运行,需要根据命名空间的\ 替换成系统的目录分隔符 这种要求类文件根据命名空间存放在对应的目录层级中的约束,叫做PSR规范。...在composer的核心中,存在着几个autoload开头的文件,都是用来提供自动加载的功能的。...PSR-4中,在类名中使用下划线没有任何特殊含义。而PSR-0则规定类名中的下划线会被转化成目录分隔符。 现在一般都是使用PSR-4规范。... ["src/", "lib/"],  // 如果需要尝试在多个目录下寻找某个命名空间 则使用数组     } }, 上面代表了Siam命名空间是对应Lib/Siam目录,Siam为命名空间的类,会尝试从该路径中加载...Monolog命名空间下的类可能在src目录下也可能在lib目录下,会尝试从这些路径中加载。 设置的命名空间必须\\结束 本文的讲解就到这里。

2K10

PHP自动加载与composer自动加载

A类 在不同操作系统中,目录分隔符会不同,以上代码可能不能正常运行,需要根据命名空间的\ 替换成系统的目录分隔符 这种要求类文件根据命名空间存放在对应的目录层级中的约束,叫做PSR规范。...在composer的核心中,存在着几个autoload开头的文件,都是用来提供自动加载的功能的。...PSR-4中,在类名中使用下划线没有任何特殊含义。而PSR-0则规定类名中的下划线会被转化成目录分隔符。 现在一般都是使用PSR-4规范。...["src/", "lib/"], // 如果需要尝试在多个目录下寻找某个命名空间 则使用数组 } }, 上面代表了Siam命名空间是对应Lib/Siam目录,Siam为命名空间的类,会尝试从该路径中加载...Monolog命名空间下的类可能在src目录下也可能在lib目录下,会尝试从这些路径中加载。 设置的命名空间必须\结束 本文的讲解就到这里。

2.3K20

PHP自动加载与composer自动加载

A类 在不同操作系统中,目录分隔符会不同,以上代码可能不能正常运行,需要根据命名空间的 替换成系统的目录分隔符 这种要求类文件根据命名空间存放在对应的目录层级中的约束,叫做PSR规范。...在composer的核心中,存在着几个autoload开头的文件,都是用来提供自动加载的功能的。...PSR-4中,在类名中使用下划线没有任何特殊含义。而PSR-0则规定类名中的下划线会被转化成目录分隔符。 现在一般都是使用PSR-4规范。...["src/", "lib/"], // 如果需要尝试在多个目录下寻找某个命名空间 则使用数组 } }, 上面代表了Siam命名空间是对应Lib/Siam目录,Siam为命名空间的类,会尝试从该路径中加载...Monolog命名空间下的类可能在src目录下也可能在lib目录下,会尝试从这些路径中加载。 设置的命名空间必须结束 本文的讲解就到这里。

2K10

PHP 面试知识梳理

一个单例类应该具备以下几个因素: 必须拥有一个访问级别为 private的构造函数,用于阻止类被随意实例化 必须拥有一个保存类的实例的静态变量 必须拥有一个访问这个实例的公共静态方法,该方法通常被命名为...PSR-4和PSR-0最大的区别是对下划线的定义不同,PSR-4中,在类名中使用下划线是没有特殊含义的,而在PSR-0的规则中,下划线或被转化为目录分隔符。...在PSR-4的键下,你可以定义命名空间和路径的映射关系,当自动加载类如 Foo\\Bar\\Baz时,命名空间 Foo指向一个名为 src/的目录意味着自动加载器将查找名为 src/Bar/Baz.php...命名空间前缀必须 \\结尾,以避免类似前缀之间的冲突。...例子: { "autoload": { "psr-4": { "App\\": "App/" // 命名空间App映射到目录App } } }

1K60

PHP 面试知识梳理

一个单例类应该具备以下几个因素: 必须拥有一个访问级别为 private的构造函数,用于阻止类被随意实例化 必须拥有一个保存类的实例的静态变量 必须拥有一个访问这个实例的公共静态方法,该方法通常被命名为...PSR-4和PSR-0最大的区别是对下划线的定义不同,PSR-4中,在类名中使用下划线是没有特殊含义的,而在PSR-0的规则中,下划线或被转化为目录分隔符。...在PSR-4的键下,你可以定义命名空间和路径的映射关系,当自动加载类如 Foo\\Bar\\Baz时,命名空间 Foo指向一个名为 src/的目录意味着自动加载器将查找名为 src/Bar/Baz.php...命名空间前缀必须 \\结尾,以避免类似前缀之间的冲突。...例子: { "autoload": { "psr-4": { "App\\": "App/" // 命名空间App映射到目录App } } } classmap

920120

PHP面试知识梳理

一个单例类应该具备以下几个因素: 必须拥有一个访问级别为 private的构造函数,用于阻止类被随意实例化 必须拥有一个保存类的实例的静态变量 必须拥有一个访问这个实例的公共静态方法,该方法通常被命名为...PSR-4和PSR-0最大的区别是对下划线的定义不同,PSR-4中,在类名中使用下划线是没有特殊含义的,而在PSR-0的规则中,下划线或被转化为目录分隔符。...在PSR-4的键下,你可以定义命名空间和路径的映射关系,当自动加载类如 Foo\\Bar\\Baz时,命名空间 Foo指向一个名为 src/的目录意味着自动加载器将查找名为 src/Bar/Baz.php...命名空间前缀必须 \\结尾,以避免类似前缀之间的冲突。...例子: { "autoload": { "psr-4": { "App\\": "App/" // 命名空间App映射到目录App } } } classmap

90930

Composer

Composer是PHP中用来管理依赖(dependency)关系的工具。你可以在自己的项目中声明所依赖的外部工具库(libraries),Composer会帮你安装这些依赖的库文件。...提供了四种自动加载的方式,分别是PSR-0、PSR-4、生成classmap以及直接包含files。...PSR-0要求目录名称和命名空间层层对应,会导致目录结构容易变得比较深。虽然已被官方废弃,但因为主流框架都已实现psr-0,因此composer仍然使用psr-0来向下兼容。...psr-4方式,是composer推荐使用的一种方式,也是psr-0的替代方案,因为在PSR-0中目录结构要与命名空间层层对应,无法插入一个单独的目录。...classmap方式,则是通过配置指定的目录或文件,然后在Composer安装或更新时,它会扫描指定目录下.php或.inc结尾的文件中的class,生成class到指定file path的映射,并加入新生成的

1.1K70

PHP Composer 的自动加载

PSR-4 其中规定:一个类的完整类名应该遵循一下规范: \(\)*\,即: 完整的类名必须要有一个顶级命名空间,被称为 “vendor namespace”; 完整的类名可以有一个或多个子命名空间...看看例子: 应用的效果简单来说就是:将命名空间前缀 Namespace Prefix 替换成 Base Directory 目录,并将 \ 替换成 / 。一句话,命名空间可以表明类具体的存放位置。...三、Composer 自动加载的过程 结合 spl_auto_register 和 PSR-4命名空间规范,可以想象,我们可以通过类的命名空间,来找到具体类的存放位置,然后通过 require 将其加载进来生效...'/autoload_static.php'; // P1 向ClassLoader中set命名空间和文件路径映射关系 call_user_func(\Composer...到此,建立命名空间到类存放路径的关系已经完成了。

22010

PSR0-PSR4

命名空间以及类名必须遵循PSR-4; 常量所有字母大写,词间以下划线分割;类属性可驼峰式,可下划线,可小写驼峰式;方法名必须符合小写驼峰式开头的命名规范; 代码必须符合PSR-1中所有规范; 所有PHP...文件必须一个空白行作为结束; 纯PHP代码文件必须省略最后的 ?...)*\ i:完整的类名必须有一个顶级命名空间,被称为“vendor namespace”; ii:完整的类名可以有一个或多个子命名空间; iii:完整的类名必须有一个最终的类名【大小写敏感...】; 当根据完整类名文件加载相应的文件: I:完整的类名中,去掉最前面的命名空间分隔符,前面连续的一个或多个命名空间和子命名空间,作为“命名空间前缀”,其必须与至少一个“文件基目录”相对应; ii:紧挨命名空间前缀后的子命名空间必须与相应的...“文件基目录”相匹配,其中命名空间分隔符将作为目录分隔符

63420

PHP标准规范之-composer 自带autoload使用【最简单、最底层的用法】

和PHP入口文件index.php的关系 不懂: 源码解读 心得: 看了这篇文章,让你了解composer的本质,让你想在哪里安装PSR-4在哪安装(在独立项目中,在CI框架中,在原来没有使用的composer...执行后显示 Generating autoload files(自动添加 autoload.php) 三、如何使用这个autoload 重点: 1、必须composer.json里面注册你要使用的命名空间...2、use \命名空间\路径\类名(类名、文件名必须相同) 等效于 直接new \命名空间\路径\类名 3、想要用use,其文件来源处必须包含namespace。...(形式上require xxx/autoload.php + use xxx == require xxx.php) 4、use 后面跟的是类名 文件名 四、composercomposer.json...PHP 入口文件中加入autoload.php,既可使用psr-4规范了 ?

1.7K20

PSR-各个框架遵循的统一编码规范现代PHPer的开发规范

比如我们在定义变量的时候定义为同一个变量,在循环中,可能会直接覆盖,得不到你想要的值 自动加载 PHP 的命名空间和类 必须 遵守 PSR-4 自动加载器标准 接着给后面看 PSR-4 的具体解释 类的名称...PHP 类的名称必须使用驼峰式,又名标题式,PHP 5.3 及以后版本的代码 必须 使用正式的命名空间,5.2.x 及之前的版本 应该 使用伪命名空间的写法 驼峰式和分词式这两种写法,驼峰式就是ShenYan...namespace 以及 use 声明,每个命名空间语句后必须跟着一个空行。...类似的,使用 use 关键字声明命名空间或为命名空间创建别名时,在一系列 use 声明语句后要加一个空行 类似于这样 <?...4 是由文件路径自动载入对应类的相关规范,比如我们的ComposerPSR-4 推荐规范不要求改变代码的实现方式,只建议如何使用文件系统目录结构和 PHP 命名空间组织代码。

82520

PHP PSR规范

function_exists('bar')) { function bar() { // function body } } 命名空间和类: 命名空间和类必须遵循...类的名称: 每个类都有自己的命名空间,且都在顶级命名空间下,类名必须使用驼峰式(CamelCase)。 PHP 5.3 及以上,必须使用正式的命名空间,例如: <?...命名空间和use声明: 现在,namespace声明之后必须要有一个空行,而且use声明必须放在namespace之后,必须分别使用use引入命名空间,而且use后要有空行,例如: <?...编写一个PSR-4自动加载器 PSR-4规范不要求改变代码的实现方式,只建议如何使用文件系统目录结构和PHP命名空间组织代码,PSR-4规范以来PHP命名空间和文件系统目录结构查找并加载PHP类、接口和...= substr($class, $len); // 把命名空间前缀替换成根目录, // 在去掉前缀的类名中,把命名空间分隔符替换成目录分隔符, // 然后在后面加上

1.4K20
领券