2009-09-08 10 views
6

私のサイトはかなり大きく、私はPHPクラスを使用していませんが、私はサイトを書き換えてまだ使用していないと理解していませんが、実際には__autoload($ class_name)機能を使用したいと思います。 。私は、私は別の関数ファイルを持って、機能に多くを依存している、
forums.inc.php
blogs.inc.php
user.inc.php
photos.inc.php
general.inc.phpPHPでクラスなしで関数ファイルをオートロードできますか?

これらのファイルはすべて、サイトの特定の部分に固有の機能に過ぎません。ただし、general.inc.phpにはこれまでのページに存在する必要がある機能があります。

私はオートロードを使用することができますか、これらの機能ファイルをロードするようなものを作ることができますか?私は一度URLに基​​づいてそれをすることについて考えました。URLにフォーラムという言葉がある場合、私はフォーラムの機能ファイルをロードしますが、これは常にフォーラムに関連するファイルがそこにwordフォーラムを持っていない。

私はクラスにすべての関数を入れるのに十分なオブジェクト指向コードを書くことを学ぶまではかなり選択肢がありませんか?

//example of the autoload 
function __autoload($class_name){ 
    include('classes/' . $class_name . '.class.php'); 
} 
$time = new time(); 
$time->fn1(); 

答えて

8

私はあなたが、ない簡単な方法で、正直に言うことができるとは思いません。いずれにしても、ユーティリティクラスを使用する方がいいですか?ちょうどstaticとしてあなたの関数を宣言し、一緒に入れて

<?php 
    class HTMLUtil { 

     public static function filter($str) {...} 
     public static function entities($str) {...} 
     public static function encode($str) {...} 
     ...etc... 
    } 
?> 

静的ヘルパー/ユーティリティグループが一緒に機能を関連クラス単純ですが:OOPには何もありません、これを見て、クラスのメンバを宣言

か 静的メソッドは、 がクラスのインスタンス化を必要とせずにアクセス可能にします。

__autoloadを使用できます。それらの静的関数を使用するためにこれらのクラスをインスタンス化する必要はなく、コードを読みやすくします(少し冗長であれば)。に、必要に応じて、あなたもインスタンス化されてからそれらを防ぐために、あなたのユーティリティクラスでプライベートコンストラクタを宣言することができる場合

echo filter($str); //scary filter function, where are you from? 

echo HTMLUtil::filter($str); 

の代わりに:私のような何かをすることがより満足常に見つけます

private __construct() {...} 

あなたはを使用して、そうするのと同じクラス内の別の関数から静的関数を呼び出すには:その「関連する関数のちょうど束が」ことを強調(同じクラス、およびないオブジェクトまたはクラスのインスタンスを参照)キーワード:

public static function foo() 
{ 
    echo self::bar() . '..and some foo'; 
} 
+0

私はこのように、私はせずにかかわらず、クラスにそれらを「ラップ」知らなかったんそれらを呼び出すためのすてきな方法を知っているので、私はクラス名と関数名の間にクラス名を含めて同じように関数を使うことができますか? – JasonDavis

+0

2)また、1クラスにラップされた関数は、任意のページから呼び出すことができますが、別のクラスの中にある別の関数の内部にも呼び出すことができますか?今のように、私の関数の多くは、それらの内部で他の関数を使用しています。したがって、DBクラスの関数がユーザークラスから呼び出されている場合でも、それでも機能しますか?助けてくれてありがとう – JasonDavis

+0

@jasondavis - はい、SomeClass :: functionName($ param)は静的関数をどのように呼び出すかです。 – karim79

関連する問題