[英]PSR-0 Implementation on Class Loading
我不是PHP的新手,但我是PSR的新手。 我已經閱讀了其中的一些內容,並且想嘗試遵循此編碼標准,但是我有點困惑如何實現它。 因此,根據我將提供的示例,我需要您提供有關如何實現它的簡單建議。
目錄結構
/models
User.php
/controller
controller.php
/view
index.php
Model.php
Class User
{
public function foo()
{
// Do something
}
}
如何以PSR-0方法在controller.php上調用該類? 我讀過類似的東西
namespace, use
和這個
function autoload($className)
{
$className = ltrim($className, '\\');
$fileName = '';
$namespace = '';
if ($lastNsPos = strrpos($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;
}
但是我不知道如何以及在哪里放置這些代碼。
謝謝!
這意味着您為所使用的每個命名空間都有一個文件夾。
因此,如果您在名稱空間中定義一個類,請說:
<?php
namespace Nicemodels;
class Niceuser { ... }
然后,文件Niceuser.php需要位於... / models / Nicemodels /
您仍然需要確保正確處理models目錄。 您可以在更高級別上啟動一個模型,然后將所有模型放入“模型”名稱空間中(推薦)。
因此,上面的示例變為:
<?php
namespace Models\Nicemodels;
class Niceuser { ... }
use語句用於從另一個名稱空間導入類:
<?php
namespace Models\Nicemodels;
use Models\Normaluser
class Niceuser extends Normaluser { ... }
您的自動加載器將此名稱空間反映到該行中的目錄行為
$fileName = str_replace('\\', DIRECTORY_SEPARATOR, $namespace) . DIRECTORY_SEPARATOR;
在這里,您將名稱空間分隔符“ \\”轉換為目錄分隔符。
您需要告訴自動加載所有這些內容的起點。 因此,如果您不使用Models名稱空間,則需要將其作為開始指向模型/文件夾。 並且您需要確保以這種方式開始文件名。 否則,自動加載器將找不到您的類。
如果要在控制器中使用此類,請執行以下操作:
$user = new \Models\Nicemodels\Niceuser();
如果導入該類,則可以縮短該時間:
use Models\Nicemodels\Niceuser;
...
$user = new Niceuser();
您需要使用spl_autoload_register()函數注冊自動加載器。
您在文檔中有一些不錯的示例: http : //www.php.net/manual/en/function.spl-autoload-register.php
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.