簡體   English   中英

用PHP自動加載特征

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM