問題タブ [spl-autoload-register]
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の自動読み込みと命名戦略
最近のほとんどのWeb開発者と同様に、私はWebアプリとサイトの堅固なMVCアーキテクチャーの利点を十分に楽しんでいます。PHPでMVCを実行する場合、自動ロードは明らかに非常に便利です。
それぞれが独自の自動ロードを使用する異なるベースモジュールを組み込んでいる場合、これは明らかにより柔軟であるため、私はspl_autoload_register単純に単一の関数を定義するのが好きになりました。__autoload()しかし、私が書いたロード関数については、これまで素晴らしいと感じたことはありません。ロードする可能性のあるクラスを探すために、多くの文字列チェックとディレクトリスキャンが必要です。
たとえば、ベースパスが、として定義され、ディレクトリが、、およびという名前の単純な構造を持つアプリがあるとしPATH_APPます。私はよくファイルに名前が付けられ、適切なディレクトリ内にあるという名前付け構造を採用しています。モデルには通常、デフォルトで特定のスキームはありません。私は次のように登録されるこの構造のローダー関数を持っているかもしれません:modelsviewscontrollersIndexView.phpIndexController.phpspl_autoload_register
それでも見つからない場合は、modelsディレクトリのサブディレクトリをスキャンする別の機能がある可能性があります。ただし、if / else、文字列チェック、ディレクトリスキャンはすべて私には非効率的であるように思われるので、改善したいと思います。
他の開発者が採用する可能性のあるファイルの命名と自動読み込みの戦略に非常に興味があります。私は、自動読み込みに代わるものではなく、効率的な自動読み込みに使用できる優れた手法を特に探しています。
php - PHPでのオートローディングの原則は何ですか?
spl_autoload_registerこの種の仕事はできますが、その種の仕事がどのように行われるのかわかりません。
php - 名前空間でのPHPの自動読み込み
名前空間での自動読み込みで少し問題が発生しました。ここのPHPマニュアルに示されているように:http://us.php.net/manual/en/language.namespaces.rules.php完全修飾名で名前空間関数を自動ロードできるはずです(例:\ glue \ common \ is_email() )。
関数spl_autoload_register(array($ import、 "load"));があります。初期名前空間内ですが、初期名前空間から\ glue \ common \ is_email()を呼び出そうとすると、その自動ロード関数は渡されませんが、新しいis_email()(クラスのコンテキストで)を使用すると渡されます。完全修飾名から自動ロードできるとマニュアルに記載されていませんが、できません:。
これが私のコードです:
私もこのコードを試しました:
そして最後にこのコード:
php - PHP spl_autoload_register
PHPでの自動読み込みを利用しようとしています。さまざまなディレクトリにさまざまなクラスがあるため、次のように自動読み込みをブートストラップしました。
それはすべてうまくいくようですが、私はこれが実際に許容できる実践と見なされていることを再確認したかっただけです。
php - Codeigniter で PHP spl_autoload_register() を使用する
Codeigniter で spl_autoload_register() を使用するにはどうすればよいですか? 自動ロードも使用する別のフレームワークで Codeigniter を使用しているため、これを行う必要があります。
ここで何かを見た
しかし、CodeIgniter autoload をターゲットにする方法がわかりません。OOPとCodeigniterは初めてです。どうもありがとう!
上記のリンクにはこれがあります:
php - Lazy クラスには PHP が含まれています
オートローダーを使用してクラスを含めます。私が今行っているのは、「glob」を使用してさまざまなディレクトリを読み取り、それらを配列にプッシュすることです。これに対するより良い解決策はありますか?
編集:
これを autoload クラス内で使用します。問題は、グロブでファイルを検索する必要があることです。これを行うより速い方法はありますか?
php - php 名前空間とオートロード
私はいくつかのクラスを持っています
/library/QPF/Loader.php
/library/Version.php
/public/index.php
バージョン クラスをロードしますが、var_dump は getVersion(); 関数のない空のクラスを示します。
php - ディレクトリと名前空間による Yii フレームワークでのコントローラのインスタンス化
Yii フレームワークは、コントローラー ディレクトリ内のモジュールとサブディレクトリもサポートするため、特定のアクションへのパスは次のようになります。
/index.php?r=module/controller/actionまた/index.php?r=subdirectoryInControllerDir/controller/action.
ここでの私の目標は、controllers ディレクトリに複数のサブディレクトリを作成することです。これらのフォルダー内に、名前空間を使用して親と同じ名前のコントローラーを作成します。
しかし、私が書くなら
Yii はMyController代わりにロードしますmynamespace\MyController;
ここに何か提案はありますか?
php - 自動読み込みと工場出荷時および自動読み込みの危険性
これは2つの部分からなる質問ですが、両方の部分は密接に関連しています。
Webサイト用のページデコレータAPIを作成し、デコレータクラスのオートローダーをサイト全体のインクルードファイルに配置しました。別の開発者は、オートローダーをどこでも使用することは非常に危険であり、奇妙なエラーを引き起こす可能性があるため、これは非常に悪い考えだと考えました。たとえば、オブジェクトをセッションにシリアル化し、自動ロードされたクラスの1つが同じ名前とを持っている場合、そのオブジェクトは__wakeup()実行されます(これを試しましたが、再現できませんでした)。自動読み込みが危険であるというのは本当ですか?もしそうなら、それはどのような潜在的な危険を持っており、それらをどのように回避することができますか?私はを使用していませんが、を使用し__autoload()た自動ロード関数を使用していspl_autoload_register()ます。
自動ロードの使用に対して彼が持っていたもう1つの議論は、ファイルを直接含めるよりも遅いということです。これはおそらく非常に明白です。デコレータが各ページで機能することが保証されるためには、すべてのデコレータクラスを含める必要があると主張したので、彼の提案は、インクルードを取得して必要なクラスを作成するファクトリクラスを作成することでした。何度も続けることはできますが、多くの人が自動読み込みのメリットを宣伝し、どのアプリケーションも高速になると言っているのを聞いています。私はそれがとても好きですが、それでも私は最善かつ最速のことをしたいと思っています。助言がありますか?
php - インスタンス化時に引数を必要とするクラスで spl_autoload_register を使用する
spl_autoload_register() を使用して、ファイルを自動的に要求しようとしています。残念ながら、私のクラスの 1 つは、インスタンス化の際に引数を必要とします...例:
spl_autoload_register() でクラスの __construct() メソッドに引数を渡す方法はありますか?