問題タブ [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 - spl_autoload_register の動作方法の明確化
このメソッドを使用してクラスをロードしています:
その機能について、私が理解するのに苦労していることがまだいくつかあります。
私が理解しているように、オブジェクト インスタンスを作成するたびに、関数がトリガーされ、オブジェクトのクラスが読み込まれます。
だから、もし私が次のようなことをしたとしたら:
関数はこの宣言をキャッチし、require_once 'classes/myObj.php'.
別のインスタンスを作成するとどうなりますか? 例えば:
関数を2回トリガーしますか?それとも同じクラスであることに気づいているので、それを2回宣言しませんか?いずれにせよ、それが私が使用した理由なrequire_onceので、過負荷にならないようにします。それでも、それが実際に何をするのか知りたいです。
もう1つ、なぜ私はこのようなコードをやっているのですか:
関数はこれをクラス宣言として認識し、ファイルを必要としますclasses/someOtherClass.php。なぜそれが起こっているのですか?私は新しいオブジェクトを宣言していません。実際、someOtherClass のインスタンスであるオブジェクトはありません。オブジェクト関数を使用しているときはいつでも、クラスをインクルードしようとするということですか? またはいつでも静的関数を使用できますか?
前もって感謝します!
php - クラスのロード中の spl_autoload_register の問題
そのため、以前にここでこの質問をしましたが、提供された解決策はうまくいきませんでした。これが私のセットアップです:
これが私のindex.phpです
ここに私の MyClass.php があります
私のエコーは何も表示しません。明らかに、私のクラスもロードされていません。代わりに、このエラーが発生します。
助けてください。私はかなり長い間これに固執しており、残りの開発は苦しんでいます。spl_autoload_register()おすすめの方法なので移動してみました。今、失われた時間が私を後悔させています。
php - オブジェクトがインスタンス化されたかどうかを確実に判断する方法
オブジェクトをインスタンス化する PHP クラスがあります。クラスの名前空間を変更してクラスのパスを変更すると、オートローダーはそのクラスが定義されていないと文句を言います。しかし、すべてを正しく行うと、苦情はありませんが、コンストラクターのエコーはトリガーされません。クラスが見つかったと思いますが、コンストラクターコードがトリガーされないのはなぜですか? オブジェクトがインスタンス化されたことを確実に確認するにはどうすればよいですか?
$obj が適切にインスタンス化されているかどうかを確認するには?
元の質問については、こちらをご覧ください。クラスのロード中の spl_autoload_register の問題
そこで提供できる回答も高く評価されます。大きな問題をいくつかの小さな問題に分割して解決しようとしています。
php - SimpleTest を使用した名前空間クラスのモック
PHP クラスの単体テストに SimpleTest を使用しています。必要なクラスを自動ロードするカスタム基本クラスを追加しましたspl_autoload_register。
しかし、今では嘲笑が問題になっています。名前空間を介してロードされるクラスをモックするにはどうすればよいですか?
これは基本的に、テストクラスにあるものです。
名前空間を介してロードされた(自動ロードされた)クラスをまだモックする方法を知っている人はいますか?
php - spl_autoload_register の使用
オートローダを使用するには、作成する各 PHP ファイルに次の行を追加する必要がありますか? または、たとえばアプリケーションの「index.php」内で一度実行し、通常のように他のファイルでクラスをインスタンス化するソリューションがありますか?
ありがとう。
php - spl_autoload_register が間違ったディレクトリ/ファイルを検索する
関数ファイル (MyFunctions.php) に次のコードを配置しました。
しかし、スクリプトからクラス/オブジェクトを参照するspl_autoload_registerと、クラス ライブラリ ディレクトリではなく、それが定義されている関数ファイルが検索されます。
php - spl_autoload_register を使用した 000webhost の絶対パス
私の問題は、一般的な絶対パスとパスです。ホスト固有の問題かもしれないので、これは 000webhost と書いたので、ここにあります。
他のホストと同様に、このホストpublic_htmlのルートにはフォルダーがあります。そのフォルダに画像、CSS、JSファイルを入れました。また、 と がありindex.phpますinstall.php。アプリの残りの部分は、public_html (../public_html)というディレクトリの上にありappます。の値を持つ定数を作成constant.phpしたルートに を作成しました。その定数を使用してクラスをロードしますが、機能しません。ABSOLUTE_PATHdirname(__FILE__) . '/app/'spl_autoload_register()
さて、何か間違ったことをしたと思うかもしれませんが、 が呼び出される前に、ディレクトリにspl_autoloadあるクラスをロードする必要があります。また、ディレクトリにもあるものをロードすると、両方とも正常に動作します。Autoload.phpapp/libs/User.phpapp/libs
それで、私の質問は、 がandで動作しているのに、 のABSOLUTE_PATH中で動作していないのはなぜですか。これがディレクトリツリーです...Autoload.phpUser.phpspl_autoload_register
それだけです。繰り返す。install.php では、このパスで Autoload.php をロードすると機能します
しかし、Autoload.php 内では、このようなものは機能しません
これはもう 1 つの「パス」の質問であり、多くの人が見たがらないことはわかっていますが、3 日間解決しようとしてきましたが、解決しないとアプリケーションを進めることができません。
すべての回答を事前にありがとう
Autoload編集:クラスを投稿する必要はないと思っていましたが、ここにあります...
このコード行
これは、クラスの完全な名前がLibs_Bootstrap文字列を に分割するため
ABSOLUTE_PATH/libs/Bootstrap.phpです。絶対パス定数はconstants.php、ルートにある で作成されることに注意してください。
php - spl_autoload_register $this->関数
以下のautoloadコンストラクトでわかるように、アプリケーションを実行するためにいくつかの からも'spl_autoload_register'呼び出しています。index.classeslazyfunctionsauto-loaded classes
私のプロジェクトの範囲では、たとえば$this->function別functionの an内で参照することはできませんauto-loaded class。おそらく、このようにインスタンス化される方法を理解していない可能性があります。
手続き型および OOP 構造を許可するプロジェクトの最も効率的な方法が欲しいのですが、lol を使用するのが本当に好きです。自動ローダーによってロードされたクラス内でそれを$thisどのように使用し、効率的に使用できるでしょうか。編集しますか? $thisinit() はおそらく許可し$thisますか?
私の無知がプロジェクトを作成し、コーディング構造を最新のものにしていないことを許してください。
無愛想self::でもあるべきstatic::ですか?
クラス -> オートロード -> インデックス