2009-07-30 9 views
4

まず、少し背景。私が働いている会社は、大量の関数/クラスライブラリを使用しています。これはすべての単一ページに含まれています。何千もの関数行があり、その90%はおそらくページ上で呼び出されることさえありません。必要に応じて自動ロード機能/クラスライブラリ

サーバーの負荷を軽くしようとして、よりスマートなライブラリ設定を試しています。この目的のために、ファイル全体を分類されたライブラリファイル(つまり、sql.functions.php、date.functions.phpなど)に分割しました。

残念ながら、すべてのページのすべてのファイルを含めても役立たないファイルを選択的に含めることはほとんど不可能であり、エラーを起こしやすい。

私が探しているのは、PHPの___autoload()機能に似た設定です。この機能は、未知のクラスが開始された場合に特定の名前のファイルを自動的に検索して見つけようとします。

<?php 
    function ___autoload($class_name) { 
    require_once($class_name.'.class.php'); 
    } 
?> 

ただし、この関数は関数呼び出しでは機能しません。クラスでは機能しません。

未定義の関数(つまりhtml_insert_button();)を呼び出して、名前付き関数ライブラリを自動的に検索してインクルードするよう指示する方法はありますか?

(それは関数の接頭辞を共有するため、上記の場合、html_functions.phpは、ロードする必要があります)

+2

APCを使用すると、これらのファイルを劇的に含むオーバーヘッドを減らすことができます。それを超えて、これらの関数をクラスに移動することが最善の策です(静的にすることができるので、それらをほぼ同じように呼び出すことができます)ので、オートロードを利用できます。 –

答えて

4

私は残念ながら自動ロード機能への道があると信じていません。一部の人はSitePoint forumsでこれについて主張しています。

私は1人のためにそれはあなたがインキュディーズの量を減らすことができるので、それは素晴らしい追加だと思う。

私はCodeIgniterのに非常に似て、私の機能をロードするには、このアプローチを取った:

私は関数のセットを使用するように行くたびに、私は図書館(「HTML」)関数を呼び出します、そのライブラリが含まれますこと私は使用しようとしている(それが一度だけ含まれていることを確認する)。

 
function library($name) 
{ 
    include($name .".lib.php"); 
} 

おそらくあなたが探している答えではありませんが、それは私のやり方です。

+1

入力いただきありがとうございます。残念なことに、あなたが正しいと私は聞くことを望んだものではありませんが、少なくとも私は代替案を探し始めることを知っています。私はあなたの考えが好きで、自分のためにそれを使うかもしれません。 – Duroth

関連する問題