2

私は小さなフレームワークを持っており、スクリプトでオートロードを使用しています (スクリプトでこの機能を取り除き始める必要があることに今気づきました)。

私は現在、Twilio API を使用しようとしています。コードでは、spl_autoload_register 関数を使用しています。クラスの 1 つに新しい呼び出しを行うと、スクリプトの残りの部分で twilio コードが呼び出されるロジック ブロックが壊れた後

私のファイル構造はこれです

/classes/
    autoload.php
    DB_Connect.php

/classes/Twilio/

/sms/Twilio/Services/
    twilo.php

分解中のスクリプトはこんな感じ

<?php 

include(classes/autoload.php);

if($something_is_true){
    requrie_once(sms/Twilio/Services/Twilio.php);
    //here is where the spl_autoload_register() is called
}

$connection = new DB_Connect();
//script is broken here

すべてのクラスを機能させるには、Classes フォルダーで何をする必要がありますか?

4

1 に答える 1

3

その理由はおそらく、オートローダー( ) が呼び出されると__autoload()完全に置き換えられるためspl_autoload_register()です。

コードに既存の __autoload() 関数がある場合、この関数を明示的に __autoload スタックに登録する必要があります。これは、spl_autoload_register() が spl_autoload() または spl_autoload_call() によって __autoload() 関数のエンジン キャッシュを効果的に置き換えるためです。

オートローダーを適切に登録するにはわずかな変更が必要なだけなので、数秒でスクリプトを更新して動作させることができます。

現在、次のようになっています。

function __autoload($class) {
    // ...
}

次のように変更します (PHP 5.3 を実行していると仮定します)。

spl_autoload_register(function ($class) {
    // ...
});

PHP 5.3 を追加する前は、これも機能するはずです。

spl_autoload_register('__autoload');
于 2013-03-24T16:52:01.803 に答える