質問

PHPのオートロード機能を使用して、必要なクラスファイルのみを動的にロードする予定です。すべての関数に個別のファイルがある場合、これは巨大な混乱を引き起こす可能性があるため、関連するクラスを1つのクラスファイルに残して自動ロードする方法があることを願っています

function __autoload($class_name){
    include('classes/' . $class_name . '.class.php');
}

動物というクラス名があり、次に犬という名前の別のクラスがあるとします。 dogsクラスはanimalsクラスを拡張します。dogsクラスを呼び出すが、animalsクラスを呼び出さない場合、animalsクラスファイルはロードされますか?

役に立ちましたか?

解決

  

犬のクラスを呼び出す場合、   動物クラスを呼び出さないでください   動物クラスファイルはまだロードされていますか?

はい。別のクラスを拡張するクラスをロードする場合、PHPは基本クラスをロードする必要があります。そのため、PHPは拡張対象を認識します。

re:ファイルごとに複数のクラスを保存するという考え方:これは、指定した自動ロード機能では機能しません。特に自動ロードされたクラスの場合、ファイルごとに1つのクラスが本当にベストプラクティスです。

ファイルに複数のクラスがある場合、そのファイルからクラスを自動ロードしようとしないでください。

他のヒント

クラスの場所の明示的な定義を検討しましたか?関連するクラスをグループ化することが非常に理にかなっている場合があります。

実証済みの処理方法を次に示します。

このコードは、 auto_prepend_file に配置されます(または最初に含まれます)

class Import
{
    public static 

クラスの場所の明示的な定義を検討しましたか?関連するクラスをグループ化することが非常に理にかなっている場合があります。

実証済みの処理方法を次に示します。

このコードは、 auto_prepend_file に配置されます(または最初に含まれます)

//Define autoload items
Import::Push('Admin_Layout',        App::$Path . '/PHP/Admin_Layout.php');
Import::Push('Admin_Layout_Dialog', App::$Path . '/PHP/Admin_Layout.php');
Import::Push('FileClient',          App::$Path . '/PHP/FileClient.php');

そして、ブートストラップファイルで、クラスとクラスが含まれているファイルを定義します。

Import::Auto()

そして最後に、呼び出してAutoLoadを有効にします

Import::Push('MyModule',          App::$Path . '/Module/MyModule/Init.php');

良い点の1つは、「モジュール」を定義できることです:

Import::Load('MyModule');

そして、必要なときに明示的にロードします:

<*>

そして最良の部分の1つは、モジュールに追加の Import :: Push 行を追加できることです。これにより、実行時にすべてのクラスが定義されます。

AutoLoad = array(); public static

クラスの場所の明示的な定義を検討しましたか?関連するクラスをグループ化することが非常に理にかなっている場合があります。

実証済みの処理方法を次に示します。

このコードは、 auto_prepend_file に配置されます(または最初に含まれます)

<*>

そして、ブートストラップファイルで、クラスとクラスが含まれているファイルを定義します。

<*>

そして最後に、呼び出してAutoLoadを有効にします

<*>

良い点の1つは、「モジュール」を定義できることです:

<*>

そして、必要なときに明示的にロードします:

<*>

そして最良の部分の1つは、モジュールに追加の Import :: Push 行を追加できることです。これにより、実行時にすべてのクラスが定義されます。

Imported = array(); public static function Load($sName) { if(! isset(self::

クラスの場所の明示的な定義を検討しましたか?関連するクラスをグループ化することが非常に理にかなっている場合があります。

実証済みの処理方法を次に示します。

このコードは、 auto_prepend_file に配置されます(または最初に含まれます)

<*>

そして、ブートストラップファイルで、クラスとクラスが含まれているファイルを定義します。

<*>

そして最後に、呼び出してAutoLoadを有効にします

<*>

良い点の1つは、「モジュール」を定義できることです:

<*>

そして、必要なときに明示的にロードします:

<*>

そして最良の部分の1つは、モジュールに追加の Import :: Push 行を追加できることです。これにより、実行時にすべてのクラスが定義されます。

AutoLoad[$sName])) throw new ImportError("Cannot import module with name '$sName'."); if(! isset(self::

クラスの場所の明示的な定義を検討しましたか?関連するクラスをグループ化することが非常に理にかなっている場合があります。

実証済みの処理方法を次に示します。

このコードは、 auto_prepend_file に配置されます(または最初に含まれます)

<*>

そして、ブートストラップファイルで、クラスとクラスが含まれているファイルを定義します。

<*>

そして最後に、呼び出してAutoLoadを有効にします

<*>

良い点の1つは、「モジュール」を定義できることです:

<*>

そして、必要なときに明示的にロードします:

<*>

そして最良の部分の1つは、モジュールに追加の Import :: Push 行を追加できることです。これにより、実行時にすべてのクラスが定義されます。

Imported[$sName])) { self::

クラスの場所の明示的な定義を検討しましたか?関連するクラスをグループ化することが非常に理にかなっている場合があります。

実証済みの処理方法を次に示します。

このコードは、 auto_prepend_file に配置されます(または最初に含まれます)

<*>

そして、ブートストラップファイルで、クラスとクラスが含まれているファイルを定義します。

<*>

そして最後に、呼び出してAutoLoadを有効にします

<*>

良い点の1つは、「モジュール」を定義できることです:

<*>

そして、必要なときに明示的にロードします:

<*>

そして最良の部分の1つは、モジュールに追加の Import :: Push 行を追加できることです。これにより、実行時にすべてのクラスが定義されます。

Imported[$sName] = True; require(self::

クラスの場所の明示的な定義を検討しましたか?関連するクラスをグループ化することが非常に理にかなっている場合があります。

実証済みの処理方法を次に示します。

このコードは、 auto_prepend_file に配置されます(または最初に含まれます)

<*>

そして、ブートストラップファイルで、クラスとクラスが含まれているファイルを定義します。

<*>

そして最後に、呼び出してAutoLoadを有効にします

<*>

良い点の1つは、「モジュール」を定義できることです:

<*>

そして、必要なときに明示的にロードします:

<*>

そして最良の部分の1つは、モジュールに追加の Import :: Push 行を追加できることです。これにより、実行時にすべてのクラスが定義されます。

AutoLoad[$sName]); } } public static function Push($sName, $sPath) { self::

クラスの場所の明示的な定義を検討しましたか?関連するクラスをグループ化することが非常に理にかなっている場合があります。

実証済みの処理方法を次に示します。

このコードは、 auto_prepend_file に配置されます(または最初に含まれます)

<*>

そして、ブートストラップファイルで、クラスとクラスが含まれているファイルを定義します。

<*>

そして最後に、呼び出してAutoLoadを有効にします

<*>

良い点の1つは、「モジュール」を定義できることです:

<*>

そして、必要なときに明示的にロードします:

<*>

そして最良の部分の1つは、モジュールに追加の Import :: Push 行を追加できることです。これにより、実行時にすべてのクラスが定義されます。

AutoLoad[$sName] = $sPath; } public static function Auto() { function __autoload($sClass) { Import::Load($sClass); } } }

そして、ブートストラップファイルで、クラスとクラスが含まれているファイルを定義します。

<*>

そして最後に、呼び出してAutoLoadを有効にします

<*>

良い点の1つは、「モジュール」を定義できることです:

<*>

そして、必要なときに明示的にロードします:

<*>

そして最良の部分の1つは、モジュールに追加の Import :: Push 行を追加できることです。これにより、実行時にすべてのクラスが定義されます。

はい、クラスファイルを含めない/必要としない限りロードします。

必要なPHPコードを含むファイルは常にインポートする必要があります。 PHP自体は、クラスファイルに付けた名前を推測できません。たとえばJavaとは異なり、PHPにはクラスのファイル命名要件はありません。

この問題を解決する一般的な方法は、関連するクラスを1つのファイルにグループ化することです。 「モジュール」を作成します。

回避策があります、私はそれを使用したばかりで、うまくいくようです:

animals.class.phpに格納されたanimalsと呼ばれる自動ロードされたクラスがあると仮定しましょう。同じファイルに、動物を拡張する他のクラスを含めることができます

    class animals{
        static function load(){
            return true;
        }
    }


    class dogs extends animals{

    }

    class cats extends animals{

    }

Now ...クラス dogs を使用する必要がある場合、親クラスであるPHPの自動ロードが必要です(これを行うと、同じファイル内のすべての拡張クラスも解析されます)書く必要があります:

animals::load();
$fuffy = new dogs();
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top