[英]Autoloading Traits in PHP
我有什么方法可以區分我的自動加載功能中的特征和類? 假設我有一個類的文件夾和一個特征文件夾; 能夠做一些像...這樣的事情會很高興
spl_autoload_register(function($resource) {
if ( /* $resource is class */ ) {
include 'classes/'.$resource.'.php';
}
if ( /* $resource is trait */ ) {
include 'traits/'.$resource.'.php';
}
});
自動加載回調函數只接收一條信息; 要求的符號名稱。 沒有辦法看到它應該是什么類型的符號。
您可以做的是在autoload堆棧中注冊多個函數,一個用於處理類和其他特征,使用stream_resolve_include_path()
或類似的東西,例如
spl_autoload_register(function($className) {
$fileName = stream_resolve_include_path('classes/' . $className . '.php');
if ($fileName !== false) {
include $fileName;
}
});
spl_autoload_register(function($traitName) {
$fileName = stream_resolve_include_path('traits/' . $traitName . '.php');
if ($fileName !== false) {
include $fileName;
}
});
您的特征命名方式有一個簡單的解決方案。 我的應用程序中的每個特征都命名為trait_(name),它放在classes文件夾中。
例如,我的trait_something放在文件名“trait.trait_something.php”下的classes /文件夾中。
我的自動加載功能可以選擇特征或類:
function autoloader($class)
{
$prefix='classes/';
$ext='.php';
if(substr($class,0,6) == 'trait_')include $prefix.'trait.' . $class . $ext;
else include $prefix.'class.' . $class . $ext;
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.