0

nodejs外部プロセスによって実行されるスケジュールされたジョブの小さなフレームワークを作成しています。オートローダを使用したいのですが、何らかの理由でデータが取得できません。名前空間も使用しています。私のフォルダ構造は次のようになります。

Library
  |_ Core
     |_ JobConfig.php
  |_ Utilities
     |_ Loader.php
  |_ Scheduled
     |_ SomeJob.php
  |_ Config.php

MyConfig.phpには、いくつかの定義と my のインスタンスがありますLoader.php

Loader.php は次のようになります。

public function __constructor()
{
    spl_autoload_register(array($this, 'coreLoader'));
    spl_autoload_register(array($this, 'utilitiesLoader'));
}

private function coreLoader($class)
{
    echo $class;
    return true;
}

private function utilitiesLoader($lass)
{
    echo $class;
    return true;
}

したがって、私はJobConfig.php をSomeJob.php含めて、失敗したときにインスタンス化しようとしています。Config.php私の名前空間は次のようLibrary\Core\JobConfigになります。物事をブートストラップする能力がなければ、これが最善のアプローチであるかどうかはわかりません。しかし、ローダーが失敗する前にエコーが表示されません。

編集:

@Layne による提案を試みましたが、うまくいきませんでした。私はまだ見つからないクラスを取得しています。クラスが spl スタックに入っていないようです。ここにコードへのリンクがあります

4

2 に答える 2

0

ディレクトリ構造を使用しているのと同じ方法で名前空間を実際に使用している場合、これはかなり簡単なはずです。

<?php
namespace Library {
    spl_autoload_register('\Library\Autoloader::default_autoloader');

    class Autoloader {
        public static function default_autoloader($class) {
            $class = ltrim($class, '\\');

            $file = __DIR__ . '/../';
            if ($lastNsPos = strrpos($class, '\\')) {
                $namespace = substr($class, 0, $lastNsPos);
                $class     = substr($class, $lastNsPos + 1);
                $file .= str_replace('\\', '/', $namespace) . '/';
            }

            $file .= $class . '.php';
            include $file;
        }
    }
}

それを Library ディレクトリに入れ、より高いレベルでそれを必要とします。うまくいけば、私はそれを台無しにしたり、テストしたりしませんでした。

編集:固定パス。

于 2014-08-02T07:49:38.313 に答える