問題タブ [autoload]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
php - 必要に応じて関数/クラス ライブラリを自動ロード
まず、背景を少し。私が働いている会社は、すべてのページに含まれる大規模な関数/クラス ライブラリを使用しています。何千、何千行もの関数があり、その 90% はおそらくページ上で呼び出されることさえありません。
サーバーの負荷を少し軽減するために、私はよりスマートなライブラリ設定を試してきました。この目的のために、ファイル全体を分類されたライブラリ ファイル (つまり、sql.functions.php、date.functions.php など) に分割しました。
残念ながら、すべてのページにすべてのファイルを含めることはまったく役に立ちません。ファイルを選択的に含めることはほとんど不可能であり、エラーが発生しやすくなります。
私が探しているのは___autoload()
、未知のクラスが開始された場合にそれを見つけようとして、特定の名前のファイルを自動的に検索する PHP の機能に似たセットアップです。
ただし、この関数は関数呼び出しでは機能せず、クラスのみで機能します。
未定義の関数 (つまりhtml_insert_button();
) を呼び出すときに、名前付き関数ライブラリを自動的に検索して含めるように PHP に指示する方法はありますか?
(上記の場合、html_functions.php
関数のプレフィックスを共有しているため、ロードする必要があります)
zend-framework - Zend_Loaderを1.7から1.8にアップグレードするにはどうすればよいですか?
私はこれを使用していますが、1.7では正常に動作しますが、1.8では動作しません。
非推奨であり、代わりにZend_Loader_Autoloaderを使用する必要があると表示されますが、動作させることができないようです。助言がありますか?
php - __オートロードが混同?
__autoloader()
私は多くの顧客がいるサーバーを持っています。開発するときに、たとえばファイルを含む関数がある init.php を含めdir_name(__FILE__)."/classes/".$className
ます。
しかし、昨日、サーバーが特定のクラスを見つけることができなかったことがわかりました.apacheで再起動すると、再び機能しました。
すべての顧客は、この独自の init.php を持っています... (したがって、同じサーバー上に多くの __autoloads があります)
私はいくつかのテストを行っていないので、問題を再現する前に誰かが私の質問に答えてくれることを願っていますが、同時に 2 つ以上のリクエストを受け取ったときに、php が間違ったオートロード機能を実行する可能性があると思いますか?
spl_autoload_register は解決策ですか?
いくつかのアイデアやブレインストーミングに感謝します。
php - PHPオートローダー:存在しないインクルードを無視する
オートローダーに問題があります:
ご覧のとおり、非常に簡単です。クラスのファイル名を推測して、それを含めようとします。しかし、私には問題があります。存在しないクラスを読み込もうとすると例外が発生します(例外をスローするエラーハンドラーがあるため)。これは、存在しないクラスでclass_exists()を使用したときにも発生するため、不便です。例外は必要ありません。「false」が返されるだけです。
インクルードの前に@を付けることでこれを以前に修正しました(すべてのエラーを抑制します)。ただし、これの大きな欠点は、このインクルードのパーサー/コンパイラーエラー(致命的)が(ログにも表示されない)表示されず、バグを見つけるのが困難になることです。
両方の問題を一度に解決するための最良の方法は何でしょうか?最も簡単な方法は、オートローダー(擬似コード)に次のようなものを含めることです。
でも、そこでのパフォーマンスが気になります。それは大いに傷つくでしょうか?
(解決済み)次のようにしました:
php - PHP 5.3で名前空間を使用して自動ロードしますか?
PHP 5.3で名前空間を使用して_autoloadをどのように使用しますか?スクリプトとは別の名前空間にメインの自動ロード関数があります。また、別の名前空間を持つクラスを呼び出しています。(驚くことではありませんが)オートロード機能が見つかりません。名前空間ごとに自動ロード関数を再作成する必要がありますか?それは最適ではないようです。
助けてくれてありがとう!
php - PHP でクラスなしで関数ファイルを自動ロードできますか?
私のサイトはかなり大きく、PHP クラスを使用していません。OO を十分に理解していないため、サイトを書き直して使用することはできませんが、クラスが使用する __autoload($class_name) 機能を使用したいと思っています。私は関数に大きく依存しています。さまざまな関数ファイルがあります
。forums.inc.php
blogs.inc.php
user.inc.php
photos.inc.php
general.inc.php
これらのファイルはすべて、サイトの特定の部分に固有の関数にすぎません。ただし、general.inc.php には常にページに配置する必要がある関数があります。
とにかく、オートロードを使用したり、これらの関数ファイルをロードする同様のものを作成したりできますか? URLにフォーラムという単語が含まれている場合、フォーラム関数ファイルをロードしますが、フォーラムに関連するファイルにはフォーラムという単語が含まれていないため、これは常に機能するとは限りません。 .
すべての関数をクラスに入れるのに十分な OO のコーディングを学ぶまで、選択肢はほとんどありませんか?
php - PHP オペコード キャッシュは __autoload で動作しますか?
これが基本的なものである場合は申し訳ありませんが、PHP の OO についてできる限り多くのことを学ぼうとしており、その使用方法をゆっくりと学んでいます (非常に限られています)。
__autoload() が PHP オペコード キャッシュに影響を与えるかどうかを知りたいですか?
php - PHPで自動読み込みを使用するのは悪いことですか?
php.netから:
PHP 5では、これは不要になりました。
__autoload()
まだ定義されていないクラス/インターフェースを使用しようとしている場合に自動的に呼び出される関数を定義できます。この関数を呼び出すことにより、スクリプトエンジンは、PHPがエラーで失敗する前に、クラスをロードする最後の機会を与えられます。
今私は知りたいのです__autoload
が、動的サイトに適切なクラスをロードするためだけに使用するのは悪い習慣ですか?
私のサイトの設定方法は、ファイルをファイルに含めることです。index.php
たとえば、http://www.site.com/index.php?p=PAGE-I-WANT-TO-LOADなどです。
__autoload
したがって、自分のサイトのフォーラムセクションまたはブログセクションにいる場合は、適切なクラスと関数のみをロードする必要があるため、自動ロードを使用しますが、最後の手段として使用する場合はファイルを手動で含めることはありません。交通量の多いシステムでもうまくやっていますか?
php - 自動ロードされたクラスの親クラスに対して__autoload()が呼び出されますか?
でmain.php
、自動ロードが追加され、新しいオブジェクトが作成されます。
でTriangle.php
:
Shape.php
抽象クラスです:
__autoload
関数呼び出しを見ることができますが、同時にTriangle.php
呼び出しますか?Shape.php