0

私が書いたプログラムでSwiftMailer php ライブラリを使用しようとしています。このライブラリを含める前に、spl_autoload_register() 関数を問題なく使用していました。ただし、このライブラリを使用する前に、spl 関数を使用してクラス拡張と場所を明示的に定義していました。

set_include_path(get_include_path().[my include path]);
spl_autoload_extensions('.class.php');
spl_autoload_register();
session_start();

私が直面している問題は、同じ命名規則に従っていないライブラリを使用しようとしているということです。独自の autoload クラス (ライブラリへの最初の呼び出しによって構築された) は、次のようになります。

public static function autoload($class)
{
//Don't interfere with other autoloaders
if (0 !== strpos($class, 'Swift_'))
{
  return;
}

$path = dirname(__FILE__).'/'.str_replace('_', '/', $class).'.php';

if (!file_exists($path))
{
  return;
}

if (self::$initPath && !self::$initialized)
{
  self::$initialized = true;
  require self::$initPath;
}

require $path;

}

クラスを呼び出した後にプログラムを単純に実行しようとすると、次のようになります。

Fatal error: spl_autoload() [<a href='function.spl-autoload'>
function.spl-autoload</a>]:Class Swift_MailTransport could not
be loaded in [my file] on line 30 

30行目:

 $transport = Swift_MailTransport::newInstance();

私は彼らの後にモデル化されたカスタム autoload クラスを使用しようとしましたが、試してみるとすべて得られます:

var_dump(spl_autoload_functions());

結果:

bool(false);

これはかなり単純な問題である必要があることはわかっていますが、見落としていますが、見つかりません。

どんな助けでも大歓迎です。

4

2 に答える 2

0

さて、一日中壁に頭をぶつけてどこにも行かなくなった後、プログラマーでもある兄から素晴らしいフィードバックをもらいました。

問題全体は、この1行から生じました。

require_once(SITE_ROOT.'/classes/lib/swift_required.php');

SITE_ROOT変数は実際にはWebの場所(つまりhttp://)を参照していましたが、現在のホストではこれは機能しません。代わりに物理ファイルの場所を使用する必要があります。この変更を行った後、付属のオートローダーはアドバタイズされたとおりに機能します。

于 2011-11-07T23:03:59.823 に答える
0

これを削除してみてください:

spl_autoload_register();

ドキュメントから:

[if] spl_autoload_register() is called without any parameters then 
  [spl_autoload(...)] functions will be used

それを知っていると、spl_autoload が SwiftMailer クラスをロードする場所を知らないと考えるのは論理的です。spl_autoload がそこからロードしようとするため、SwiftMailer がインクルード パスにないことになります。

次のステップは、インクルード パスの 1 つに SwiftMailer クラスを配置することです。

于 2011-11-07T16:17:25.300 に答える