PHP的PSR-0命名标准
PSR 是Proposing a Standards Recommendation(提出标准建议)的缩写,是由 PHP Framework Interoperability Group( PHP 通用性框架小组,简称 PHP-FIG )发起的,通过他们命名就可以看出,这是个主要是针对框架通用性而做努力的开放性小组,他们的在Github
PSR是Proposing a Standards Recommendation(提出标准建议)的缩写,是由PHP Framework Interoperability Group(PHP通用性框架小组,简称PHP-FIG)发起的,通过他们命名就可以看出,这是个主要是针对框架通用性而做努力的开放性小组,他们的在Github上有自己的仓库地址,目前只有一个被接受的标准,那就是PSR-0标准,标准定义了PHP自动加载的命名规范和文件路径规范。 针对PSR-0标准主要提到了以下几点:
要求
- 一个完全合格的命名空间和类名必须有以下的结构“\\(\)*”
- 每个命名空间必须有顶级的命名空间(“提供者”)
- 每个命名空间可以有任意多个子命名空间
- 每个命名空间在被从文件系统加载时必须被转换为“操作系统路径分隔符”(DIRECTORY_SEPARATOR?)
- 每个“_”字符在“类名”中被转换为DIRECTORY_SEPARATOR 。“_”符号在命名空间中没有这个含义
- 符合命名标准的命名空间和类名必须以“.php”结尾来加载文件
- 提供商名称,命名空间,类名可以由大小写字母组成,其中命名空间和类名是大小写敏感的以保证多系统兼容性
- 如果文件不存在需要返回false
例子
\Doctrine\Common\IsolatedClassLoader => /path/to/project/lib/vendor/Doctrine/Common/IsolatedClassLoader.php \Symfony\Core\Request => /path/to/project/lib/vendor/Symfony/Core/Request.php \Zend\Acl => /path/to/project/lib/vendor/Zend/Acl.php \Zend\Mail\Message => /path/to/project/lib/vendor/Zend/Mail/Message.php
下划线在命名空间和类名中的使用
\namespace\package\Class_Name => /path/to/project/lib/vendor/namespace/package/Class/Name.php \namespace\package_name\Class_Name => /path/to/project/lib/vendor/namespace/package_name/Class/Name.php
设置这个标准是为了保证最基本的共同点。你可以通过实现5.3的SplClassLoader来测试这个标准。
扩展例子
提供一个函数来展示如何使用上述标准。
function autoload($className) { $className = ltrim($className, '\\'); $fileName = ''; $namespace = ''; if ($lastNsPos = strripos($className, '\\')) { $namespace = substr($className, 0, $lastNsPos); $className = substr($className, $lastNsPos + 1); $fileName = str_replace('\\', DIRECTORY_SEPARATOR, $namespace) . DIRECTORY_SEPARATOR; } $fileName .= str_replace('_', DIRECTORY_SEPARATOR, $className) . '.php'; require $fileName; }
SplClassloader的实现
接下来这个gist实现了SplClassLoader可以加载你按照上面标准来实现的通用类库,这是5.3里面推荐的加载方式。
http://gist.github.com/221634
扩展实现
因为这个标准提到了如果文件不存在的时候应该范围false,但是在上面函数的例子中并没有实现该机制,所有有人实现了优化的SplClassLoader。
class ClassLoader { /** * @var array Contains namespace/class prefix as key and sub path as value */ protected $paths; /** * Construct a loader instance * * @param array $paths Containing class/namespace prefix as key and sub path as value */ public function __construct( array $paths ) { $this->paths = $paths; } /** * Load classes/interfaces following PSR-0 naming * * @param string $className * @return null|boolean Null if no match is found, bool if match and found/not found. */ public function load( $className ) { if ( $className[0] === '\\' ) $className = substr( $className, 1 ); foreach ( $this->paths as $prefix => $subPath ) { if ( strpos( $className, $prefix ) !== 0 ) continue; $lastNsPos = strripos( $className, '\\' ); $prefixLen = strlen( $prefix ) + 1; $fileName = $subPath . DIRECTORY_SEPARATOR; if ( $lastNsPos > $prefixLen ) { // Replacing '\' to '/' in namespace part $fileName .= str_replace( '\\', DIRECTORY_SEPARATOR, substr( $className, $prefixLen, $lastNsPos - $prefixLen ) ) . DIRECTORY_SEPARATOR; } // Replacing '_' to '/' in className part and append '.php' $fileName .= str_replace( '_', DIRECTORY_SEPARATOR, substr( $className, $lastNsPos + 1 ) ) . '.php'; if ( ( $fileName = stream_resolve_include_path( $fileName ) ) === false ) return false; require $fileName; return true; } } }
引用地址:https://github.com/andrerom/fig-standards/blob/psr2/proposed/PSR-2.md
标准对于开发者来说是一个好事,如今已经越来越多的开源项目加入了这个标准Pear2、PHPBB、Composer、Packagist、Joomla、Drupal、Symfony、CakePHP、Doctrine2等等,采用同样标准的项目可以无缝的接入,做为开发者最好要尝试并接收一个好的标准。
扩展阅读
PHP官方关于SplClassLoader的RFC:https://wiki.php.net/rfc/splclassloader
PHP标准化组织论坛:https://groups.google.com/forum/?fromgroups#!forum/php-standards
Posts related to PHP的PSR-0命名标准
VI快捷键
如何修改、扩展并重写Magento代码
Magento购物车Checkout Onepage页面的SaveBilling处理过程
Magento裁剪后的略缩图背景填充颜色的修改
原文地址:PHP的PSR-0命名标准, 感谢原作者分享。

Alat AI Hot

Undresser.AI Undress
Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover
Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool
Gambar buka pakaian secara percuma

Clothoff.io
Penyingkiran pakaian AI

AI Hentai Generator
Menjana ai hentai secara percuma.

Artikel Panas

Alat panas

Notepad++7.3.1
Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina
Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1
Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6
Alat pembangunan web visual

SublimeText3 versi Mac
Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Topik panas

Dalam bab ini, kita akan memahami Pembolehubah Persekitaran, Konfigurasi Umum, Konfigurasi Pangkalan Data dan Konfigurasi E-mel dalam CakePHP.

PHP 8.4 membawa beberapa ciri baharu, peningkatan keselamatan dan peningkatan prestasi dengan jumlah penamatan dan penyingkiran ciri yang sihat. Panduan ini menerangkan cara memasang PHP 8.4 atau naik taraf kepada PHP 8.4 pada Ubuntu, Debian, atau terbitan mereka

Untuk bekerja dengan tarikh dan masa dalam cakephp4, kami akan menggunakan kelas FrozenTime yang tersedia.

Untuk mengusahakan muat naik fail, kami akan menggunakan pembantu borang. Di sini, adalah contoh untuk muat naik fail.

CakePHP ialah rangka kerja sumber terbuka untuk PHP. Ia bertujuan untuk menjadikan pembangunan, penggunaan dan penyelenggaraan aplikasi lebih mudah. CakePHP adalah berdasarkan seni bina seperti MVC yang berkuasa dan mudah difahami. Model, Pandangan dan Pengawal gu

Dalam bab ini, kita akan mempelajari topik berikut yang berkaitan dengan penghalaan ?

Bekerja dengan pangkalan data dalam CakePHP adalah sangat mudah. Kami akan memahami operasi CRUD (Buat, Baca, Kemas Kini, Padam) dalam bab ini.

Pengesah boleh dibuat dengan menambah dua baris berikut dalam pengawal.
