溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶(hù)服務(wù)條款》

php PSR規(guī)范中的PSR4和PSR0規(guī)范實(shí)例分析

發(fā)布時(shí)間:2022-03-18 16:24:25 來(lái)源:億速云 閱讀:566 作者:iii 欄目:大數(shù)據(jù)

這篇文章主要介紹“php PSR規(guī)范中的PSR4和PSR0規(guī)范實(shí)例分析”的相關(guān)知識(shí),小編通過(guò)實(shí)際案例向大家展示操作過(guò)程,操作方法簡(jiǎn)單快捷,實(shí)用性強(qiáng),希望這篇“php PSR規(guī)范中的PSR4和PSR0規(guī)范實(shí)例分析”文章能幫助大家解決問(wèn)題。

PSR4的格式

\<命名空間>(\<子命名空間>)*\類(lèi)名

具體的內(nèi)容直接上文中提供的參考鏈接,這里總結(jié)重要的幾點(diǎn):

  • 頂級(jí)命名空間必須有一個(gè)

  • 子命名空間可以多個(gè)或沒(méi)有

  • 類(lèi)名必須有

  • 大小寫(xiě)敏感,下劃線(xiàn)無(wú)實(shí)際意義(注意,下劃線(xiàn)是主要的和PSR0的區(qū)別)

類(lèi)名與文件載入的對(duì)應(yīng)
  • 去掉最前面的命名空間的分隔符,前面的命名空間作為[命名空間前綴],必須與至少一個(gè)[文件基目錄](méi)對(duì)應(yīng)

  • 子命名空間與[文件基目錄](méi)下的文件夾對(duì)應(yīng),命名空間分隔符號(hào)作為目錄分隔符號(hào)

  • 末尾的類(lèi)名,與最終目錄下的對(duì)應(yīng)的.php文件相同

  • autoload的實(shí)現(xiàn)不可出現(xiàn)異常,也就是要解決掉異常問(wèn)題

估計(jì)各位看得一臉懵逼吧!!

其實(shí)很好理解,舉例說(shuō)明,我們先建立一個(gè)目錄叫myvendor,里面放著常用的工具包,如圖:

php PSR規(guī)范中的PSR4和PSR0規(guī)范實(shí)例分析

那么TestClass.php的命名空間應(yīng)該是Test,而CaseClass的應(yīng)該是CaseModel\CaseChild。統(tǒng)一從myvendor這個(gè)文件夾作為入口進(jìn)入。也就是myvendor是一個(gè)超級(jí)[基目錄](méi),然后Test和CaseModel是對(duì)應(yīng)命名空間的兩個(gè)[文件基目錄](méi),剩下的子個(gè)名空間與目錄對(duì)應(yīng)。官網(wǎng)中還有其他的展示方式,但在這里我們用這種最標(biāo)準(zhǔn)的方式。

其實(shí)說(shuō)白了,就是命名空間和目錄對(duì)應(yīng)上,寫(xiě)代碼找文件就方便得很啦??!

上面說(shuō)的是PSR4的規(guī)范,那么PSR0又是什么鬼?目前來(lái)說(shuō)PSR0已經(jīng)廢棄了,它們兩個(gè)大部分內(nèi)容還是相近的,最大的區(qū)別在于PSR0中的_這個(gè)符號(hào)是有意義的,也就是/namespace/package/Class_Name這樣的內(nèi)容,會(huì)去提供/namespace/package/Class/Name.php文件,而PSR4中則忽略_這個(gè)符號(hào)的意義,還是去查找Class_Name.php這個(gè)文件。

TestClass.php代碼

<?php

namespace Test;


class TestClass
{
   public function show()
   {
       echo "we are family!\n";
   }
}

CaseClass.php代碼

<?php

namespace CaseModel\CaseChild;

class CaseClass
{
   public function show()
   {
       echo "Good!\n";
   }
}

接下來(lái),在myvendor目錄外面添加一個(gè)psr4.php文件,代碼如下:

<?php

spl_autoload_register(function ($class) {
   $vendor = __DIR__ . '/myvendor';
   $file   = $vendor . '/' . str_replace('\\', '/', $class) . '.php';
   if (file_exists($file)) {
       require $file;
   }
});

use CaseModel\CaseChild\CaseClass;
use Test\TestClass;

$t = new TestClass();
$t->show();

$c = new CaseClass();
$c->show();

關(guān)于“php PSR規(guī)范中的PSR4和PSR0規(guī)范實(shí)例分析”的內(nèi)容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業(yè)相關(guān)的知識(shí),可以關(guān)注億速云行業(yè)資訊頻道,小編每天都會(huì)為大家更新不同的知識(shí)點(diǎn)。

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀(guān)點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI