問題タブ [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 に自動ロードする
インポートされた名前空間をサポートするオートローダーを作成しようとしています。私のディレクトリ構造は次のようになります(クラスファイルがリストされています):
すべてのコントローラーには、オートローダー コードを含む config.php ファイルが含まれています。
現在、これはすべての基本的なケースで正常に機能しますが、名前空間のインポートを開始すると失敗します。例えば:
オートローダ関数に渡される完全修飾クラス名は ですMathModule\Cat。これは公正な仮定です。
インポートされた名前空間でオートローダーを動作させる方法はありますか? 私のオートローダーはPSR-0のものと非常に似ているので、何か方法が必要だと思います。
php - OOP ベースの構成ファイル
アプリの構成ファイルがありますが、メイン インデックス ページと親コントローラーで使用できるようにする必要があるため、オブジェクトを渡すのに問題があります。
現在、作成するすべてのコントローラーで __Construct 関数のパラメーターとしてそれを渡す必要がありますが、これは確かに最善の方法ではないようです。
index.php
私のconfファイル:
そして、構成オブジェクトにアクセスできるようにする必要がある私のメインコントローラークラス:
私が望むものを達成するための滑らかでクリーンな方法は何ですか?これは基本的に、メインのインデックス ファイルと親コントローラーの両方でパラメーターを使用できる集中型の構成ファイルを作成することですか?
php - Smarty_Internal_TemplateCompilerBase が見つかりません
composer.json:
index.php:
ブラウザで開くと、
致命的なエラー: //smarty-example/vendor/smarty/smarty/distribution/libs/sysplugins/smarty_internal_smartytemplatecompiler.php 行 XX にクラス 'Smarty_Internal_TemplateCompilerBase' が見つかりません
ファイルはそこにあります。そして内容があります。また、PHPなどでアクセス可能/読み取り可能です。
私は何を間違っていますか?何が欠けている?
php - spl_autoloader: スコープを制限する
SPL Autoloaderの動作を正しく取得できれば、それは「グローバル スコープ」で動作しますよね? たとえば、次のコードがあるとします。
... アプリケーションの残りの部分に適用されます。または、Wordpress アクションにフックされている場合は、フック以降ですよね?
特に大きなフレームワーク(Wordpressなど)のフレームで作業している場合は特に、あまり便利ではないように思えます。SPL Autoload の範囲を特定のコンテキストに制限する方法はありますか?
- SPL Autoload を別の方法で定義しますか?
- 関数に特定のものがありますか (たとえば、
return false何らかのパターンをあまり持たない名前のクラスなど)? - もっと賢い何か?
競合やエラーを回避するために、関数にいくつかの条件文を追加できることはわかっていますがautoload()、あまり効率的ではないようです。
ありがとう!はい、私が何かを見落としている可能性が非常に高いです。
編集
名前空間によるディレクトリ構造の模倣: Wordpress 内では実際には不可能ですよね? あなたが求めているのは、たとえば、必要なプラグインとテーマの間のある種のコミュニケーションと論理構造です。(@RoyalBg)
ファイルが見つからない: ファイルが見つからないことが「問題ない」場合とそうでない場合を判断する方法は? 関数のロジックによって?オートローダーの範囲を縮小することは、より洗練された解決策になると私には思えます。(@ジョン、@マーク・ベイカー)
しかし、あなたのコメントをよく理解していれば、SPL Autoloader はデフォルトで真に「グローバル」に適用されます。
php - spl_autoload_register を使用する PHP カスタム autoload 関数が、継承されたクラスに対してトリガーされない
ここで何が間違っているのかわかりません。誰かが助けてくれることを願っています。
要求されたクラスが含まれていないことを検出して、含めることができるようにする目的で、次のクラスを作成しました。また、含まれていない継承されたクラスを含めることも望んでいました。
登録された onAutoload 関数は、まだ含まれていないクラスを呼び出すときに、期待どおりにトリガーされます。
ただし、含まれていない別のクラスを継承するクラスを呼び出す場合、登録された onAutoload 関数はトリガーされません。これは、主にこれを実行したいことです。
デフォルトの __autoload($class) を使用してこれをテストし、必要に応じて継承されたクラスをトリガーします。
どんな助けでも大歓迎です。以下に私がやろうとしていることと私が遭遇している問題の簡単な例を含めました。
Autoload.php ファイル内
必要に応じて作成および登録された Autoload クラス
次の例では、onAutoload が期待どおりにトリガーされます。
ただし、次の例では。ChildClass が含まれているが BaseClass が含まれていないと仮定すると、onAutoload はトリガーされません。
BaseClass.php
ChildClass.php
カスタムクラスの代わりに __autoload() 関数を使用してこれをテストしたところ、期待どおりにトリガーされました。
事前にすべての人に感謝します