2011-01-26 14 views
1

私はクラスに慣れていないので、これは邪悪なノブの質問です。__autoload()はメインクラスに入っていますか?

JMCが私のメインクラスです。他のクラスはJMC_filesまたはJMC_arrayのように名付けられます。私はオートロードを使いたい。オートロード機能が内にありますか?メインクラスまたはですか?

class JMC { 
    function __autoload($className) { 
     include_once($className.'.php'); 
    } 
    protected function foo() { } 
} 

class JMC_files extends JMC(){ 
} 

またはこの:

function __autoload($className) { 
    include_once($className.'.php'); 
} 

class JMC { 
    protected function foo() { } 
} 

class JMC_files extends JMC(){ 
} 

答えて

5

__autoload()あなたはdoesnのクラスを参照しようとすると、デフォルトで自動的に呼び出された魔法の関数の名前であるので、視覚のために、私はこれを行う必要がありますまだユーザーランドに存在する。あなたはこのようにそれを定義するように、それは、機能ではなく、クラスメソッドです:

function __autoload($className) { 
    include_once($className.'.php'); 
} 

あなたが好きなら、あなたはspl_autoload_register()を使用して、代わりに(関数やクラスメソッド可能)独自の自動ロードハンドラを設定することがあります。

class JMC { 
    public static function autoload($className) { 
     include_once($className.'.php'); 
    } 

    protected function foo() {} 
} 

spl_autoload_register('JMC::autoload'); 

// By referencing this class, if it doesn't yet exist then JMC's autoload() 
// gets called and PHP will attempt to load JMC_files.php to look for this class 
$files = new JMC_files(); 
$files->foo(); 

あなたはオートロード機能は、あなた次第配置する:あなたはあなたのメインのJMCクラスのクラスファイルの自動ロードを処理する静的autoload()方法を与えたい場合たとえば、あなたはこのような何かをするだろう。あなたのメインのJMCクラスはそれのための合理的な場所のように聞こえる;私のフレームワークのautoloadメソッドもメインクラスにあります。

+0

したがって、a)私自身のオートロードメソッドを定義する利点はありますか? b)標準の '__autoload()'マジック関数を使用すると、メインクラス定義ファイルでその関数を宣言するのは意味がありますか? – JakeParis

+0

a)パフォーマンスやメモリの利点はありません。単に組織目的のためです。 b)独自のクラスのautoloadメソッドを使用する場合、 '__autoload()'を定義する必要はありません。 PHPはあなたのクラスメソッドを探し、代わりにそれを実行します。 – BoltClock

関連する問題