問題タブ [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 - PHP 用の防弾 __autoload 関数を作成する
PHP __autoload 関数をできるだけ防弾で柔軟に定義しようとしています。
私のアプリケーションの構造の内訳は次のとおりです。
それはかなり簡単です。私の問題は次のとおりです。呼び出し元のファイルがディレクトリ構造内でどれほど深くネストされているかに関係なく、必要なクラスを含めることができるように、__autoload 関数をどのように記述すればよいでしょうか。__FILE__
、realpath
および関数と関係があることは知っていますがdirname
、それらを組み合わせて私が求めている柔軟性を実現する適切な方法については確信が持てません。
これが私が行った簡単なテストです:
結果:
/home/mydirectory/dev.mysite.com/my_app/php/scripts/php/classes/Class1.php
ご覧のとおり、結果はクラスが配置されている場所と一致しません。ただし、myscript.php ファイルを /my_app フォルダーに移動すると、正しく印刷されます。
これをより柔軟にするための提案はありますか?
php - インクルード パスと __autoload 関数を php に
__autoload 関数を使用するようにいくつかの php スクリプトを変換しようとしています。現在、次のように include および require 関数を使用できます。
しかし、__autoload 関数内では、上記の行を使用できません。私はこれを使用する必要があります:
__autoload 関数が、php.ini で指定したインクルード パスを使用していないように見えるのはなぜですか?
php - シンプルな PHP オートローダーに関する質問
私はPHPの名前空間について学び、単純な自動ロード機能を作成し始めました。Oがしたことは:
したがって、エイリアスまたはインポートステートメントを使用しない場合、これは機能します。use MainNamespace\Subnamespace
私がそれをした場合、私が持っていると仮定するからです:
私がやろうとすると:
$name
オートロードではそうなるGreatApp\Models\User
ので動作しGreatApp\Models\User.php
ます。しかし、私がするとき:
それは失敗します。なぜなら、今$name
は公正User
であり、User.php
見つからないからです。では、オートローディングをどのようにセットアップすればよいですか?
unit-testing - PHPUnit パスの問題への対処
現在の MVC フレームワーク アプリケーション内から PHPUnit を実行しようとすると、次のエラーが発生します。
そのエラーをいくつかの組み合わせに追跡することができました。
コメントアウトしたら
PHPUnit はテストを実行します
コメントアウトしたら
私は得る
他のすべてのディレクトリをコメントアウトすると、
「再宣言できません」というエラーが表示されます。
実際のテストを実行できる唯一の方法は、set_include_path ステートメントを使用せずに実行し、個々の単体テストによって呼び出されるすべてのクラス ファイルを手動でインクルードすることです。
何か案は?
編集: __autoload 関数と競合しているようです。私はまだ問題に対処する方法がよくわかりません。
php - PHP __autoload のパフォーマンス
autoload
見つからないクラスをロードするために使用するスクリプトがあります。意図的にファイルを含めませんが (可能ですが)、オートロード機能に必要なファイルを含めてもらいたいです。
class_exists
スクリプトは再帰的である可能性があるため、つまり、クラスが既に読み込まれている場合、対応するファイルが読み込まれているかどうか、およびスクリプトの再帰ごとにチェックしたくありません。
ruby-on-rails - Rails 3のlibフォルダからモジュール/クラスをロードする最良の方法は?
最新の Rails 3 リリースでは lib からモジュールとクラスを自動ロードしなくなったため、それらをロードする最良の方法は何でしょうか?
github から:
php - PHP - __autoload() 関数内で変数を使用できるようにする方法
私が使用しているオートロード機能は次のとおりです。
他の引数を取らないのですか?autoload 関数内のいくつかの変数に基づいて、いくつかのロジックを実行したいと考えています。グローバル変数を使わずにそれを行うにはどうすればよいですか?
ありがとう
追加の詳細
これは __autoload() クラス内では不可能だと思いますが、例で説明しようとしています。
私は配列を持つmodules.configファイルを持っています:-
上記の配列は、search_classes ビューの場合はクラス commonClassListings を含める必要があり、search_packs ビューの場合はクラス commonPackListings を含める必要があることを意味します。他のすべてのビューでは、デフォルトで commonDisplay クラスが含まれます
ここで、__autoload 関数内のロジックを移動する必要があり、最初にロードするビューを計算してから、オートロードのみを呼び出す必要があると思います。これは、オートロードの目的でもあります (オブジェクトが開始されたクラス ファイルを含めるため)。
アップデート
私の autoload 関数は、実行時にオブジェクトを開始しようとしているビュー クラス内にありません (Blizz の例とは異なります)。一般的なフロントコントローラーに含まれる pageLoader.php ファイルで定義された一般的なオートロード関数があります。すべてのモジュールについて、ビュークラスは次のように開始されます
次に、共通の autoload 関数は、対応する親ビュー クラス (この場合は commonClassListings) が存在するかどうかをチェックする必要があります。このために、$viewClassMap
配列を autoload 関数に渡す必要があります。それは可能ですか?
php - 関数 __autoload & require_once の使用 / 特定のインスタンスを無視する
特定のライブラリに autoload 機能を使用しています...しかし、Doctrine を実装しようとすると、500 Internal Server Error が発生します。
= 新しいインスタンスを作成していて、オートロードで...別のディレクトリをチェックしているためだと思います。
自動ロード機能を無視するクラスの新しいインスタンスを作成する方法はありますか? または、オートロード機能がチェックするディレクトリ内のすべての教義ファイルを移動する必要があります...理想的には、プロジェクト内のライブラリの構造を維持するためにこれを行いたくありません。
php - 非OOアプリの未使用のクラスをロードしないようにする方法はありますか?
私のアプリケーションは、リクエストをフェッチする前に、require_once を使用して、いくつかの関連クラスを含む一連のファイル (ライブラリと言うのを躊躇します) を取得する「中央」ページ コントローラーを使用します。次のように:
等...
最近、(素晴らしいが巨大な) 'HTML Purifier' ライブラリをインストールし、そのオートローダーをちらりと見るまで、わざわざメモリ使用量をチェックしていませんでした。どうやら、オートローダがオンになっていないため、各スクリプト インスタンスのメモリ使用量は 5,376 キロバイトにもなります。(それが最終的な結果である場合、組み込みのオートローダーが何のためにあるのかはわかりませんが、余談です) HTML Purifier がなければ、ほとんどのインスタンスは依然として 1 メガバイト以上の重量があります。
PHP オートロード関数について読んでいると、オートローダーは厳密に OOP 向けに設計されているという印象を受けます。purifier ライブラリを除いて、オブジェクト指向のコードはほとんど使用していません。概念を誤解しているだけですか?各リクエストに不要なクラスの束をやみくもにロードすることを避けるための他の実用的な方法はありますか? それらをすべて事前に含めようとするのが面倒なだけですか?
編集 -
ここでこのコメントを繰り返して、非 oo の意味を明確にします。それが大きな違いを生む場合:
私は基本的に、実際の OOP を (ほとんど) 使用せずに、名前空間の代わりにクラスを使用しています。つまり、「DBFunctions」クラスには、たとえば関数「execute」と「getRow」が含まれる場合があります。関数は、「dbFunctions::execute($sql)」などの静的メソッド呼び出しで呼び出されます。
javascript - もう 1 つの簡単な jQuery プログレス バーの質問
このコードを変更して、値が変数になり、進行状況バーがリアルタイム (または可能な限り最小の時間 - ミリ秒) で更新されるようにします。
現在の時刻を「シード」して、更新を促進します
Fosco の編集: (現在は機能していません)