問題タブ [autoloader]
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 コア クラスをロードする
フォーラムで質問のデータベースを検索してきましたが、私の質問に対する解決策が見つかりません。
私が開発しているオートローダーで発生した疑いがあるので、私はあなたに来ます。
ポイントは、私が定義したクラスをインスタンス化しようとすると、オートローダーは正常に動作しますが、PHP コアのクラスをインスタンス化しようとすると、次のエラーがスローされます。
たとえば、これをやろうとすると:
次に、次のエラーがスローされます。
クラスへのルートを定義したクラスをオートローダーがロードしようとしていることに気付きました。
私の質問は、カスタムのオートローダーを使用している場合、PHP コアのクラスをロードするにはどうすればよいですか?
私が提示されたこの問題を解決するためにあなたが私を導いてくれることを願っています.
よろしくお願いします。
カスタム オートローダのコードを配置していないことをお詫びします。見落としていました。
コードは symfony で使用されているものと同じですが、変更および簡略化されています。
}
しかし、元のファイルを見たい場合はここにあります
https://github.com/symfony/symfony/blob/master/src/Symfony/Component/ClassLoader/ClassLoader.php
autoloader - 複数のクラスをロードします。Restler3 AutoLoader の使用方法
FIRST :
この素晴らしい "Restler" をありがとう!
MY CONTEXT :
Restler 3 を使用して独自の API を構築し、(ゲームで) ユーザーの合計スコアを返します。例 : "www.mysite.com/api/score/12345" => ユーザー ID "12345" の合計スコア (json オブジェクト) を返します
しかし、(さまざまなゲームから) 合計スコアを取得するには、独自のライブラリ (「スコアラー」と呼ばれる) とそのクラスを使用する必要があり
ます
。 scoreGameB.class.php
- vendor/damGames/scorers/scoreGameC.class.php
- など...
私の質問は:
ライブラリのクラスをロードするには、「Luracast\Restler\AutoLoader」を使用する必要がありますか? 方法がわかりません... そうでなければ、どうすればよいですか?
ありがとうございました !
php - 同じサーバー上の 2 つのアプリケーションでの Autoloader と PHP セッションのクラッシュ
同じフレームワークを持ち、同じセッションを共有する 2 つのアプリケーションを切り替えるときに、PHP のAutoloader 機能に1 つの問題がありました (同じサーバー上にあるため、localhost など)。
Autoloader は実際に別のアプリケーション (現在のアプリケーションの前に同じブラウザで開いたアプリケーション) からクラス (モデルとライブラリ) を検索し続け、このアプリケーションで言及されたクラスが見つからないというエラーをスローしました。
php - symfonyオートローダーコンポーネント
私が得ている:
致命的なエラー:クラス'Twig_Loader_Filesystem'
Twigフォルダーはライブラリフォルダーにあります。コンポーネントの使用方法を誤解していませんか?
php - 名前空間を持つPHPクラスはspl_autoload_register経由でロードできませんか?
spl_autoload_register
名前空間がクラスに実装されている場合、クラスのロードに問題があります。
以下のクラスですが、名前空間が使用されていないautoloader
場合、どのクラスも問題なくロードできます。
tag
たとえばクラス、
クラスを介してクラスをロードしautoloader
、
結果、
致命的なエラー: クラス 'hello\tag' が C:\wamp\www\website\local\applications\master\sides\views\tags.phpの7 行目に見つかりません
autoloader
名前空間があるかどうかに関係なく、クラスをロードできるようにクラスを修正する方法はありますか?
編集:
クラスとクラスの名前を保持するフォルダー、
php - このようにreturnステートメントを使用するのは間違っていますか?
必要に応じてクラスファイルを含めるために使用されるこのオートローダーメソッドがあります。
それはうまくいきますが、私はこの方法の方が良いと思っていました:
ご覧のとおり、クラスファイルが含まれていてメソッドがその役割を果たしているため、ループの途中でreturnステートメントを使用して残りの関数を終了しています。
一致するものが見つかった場合にループから抜け出すための最良の方法はどれですか?私は常にreturnステートメントをメソッドからの値の戻りに関連付けているため、returnステートメントの使用についてはよくわかりません。
php - PHPでクラスを自動ロードしないようにするにはどうすればよいですか?
私のphpコードの先頭にあるオートローダー
呼び出しがnew MongoClient();
エラーで失敗する原因となっていますWarning: include_once(MongoClient.class.php): failed to open stream
クラスにオートローダを使用し、標準クラスを使用するにはどうすればよいですか?
注: MongoDb は PECL と共にインストールされており、オートローディング機能を削除しても問題なく動作します。PHP 5.4.9のmongo-1.3.0beta2
php - オートローダが呼び出されるのは正確にはいつですか?
次を使用して登録されたオートローダーがありますspl_autoload_register()
。
から、var_dump()
オートローダは多くのもの、データベースに挿入されるデータ、パラメータ化された SQL クエリなどで呼び出されるようです。
これらのものはクラスになることはないため、やなどを使用してロードしnew
ないclass_exists()
でください。
オートローダーはどのような状況/関数呼び出しで呼び出されますか? クラスではない「classNames」のオートロードが呼び出されるのを止めたいと思います。それぞれ$className
が を使用してチェックされ、file_exist()
これらのデータ文字列をチェックするのはかなり非効率的だからです。
問題が解決しました。まず、Brad の提案に従ってバック トレースを実行し、トレースをファイルにダンプしました (ファイルを開いて追加する小さなスニペットを追加するだけです)。
明らかに、トレースは非常に大きかったのですが、見つけた中で最も単純なものを選びました。ちなみに、そのトレースはたまたま、すばらしいRedBean ORM ライブラリをラップするために私が作成したデータベース (ORM) ラッパーを呼び出したものでした。$className
これらの文字列はデータベースに出入りするデータであるため、me ダンプの結果もそれを検証します。
そうは言っても__call()
、データベースラッパーへのメソッドをインターセプトし、何らかの処理を行い、それを RedBean に渡し、結果を処理してから、呼び出し元に送り返す があります。
問題: 処理中にis_subclass_of()とinstanceofを呼び出していますが、これは明らかにオートローダーにクラスのロードを試みるように要求します (ロードされたクラスがなくname =?
、存在しないため)。
object
解決策は、呼び出す前にis_subclass_of()
and instanceof
:があることを実際に確認することでしたif(is_object($someproperty) && is_subclass_of($someproperty))
。
$someproperty
がオブジェクトでない場合、すぐif
に短絡してinstanceof
andis_subclass_of()
が呼び出されることはありません。これは、オートローダーへの呼び出しが行われないことを意味します。
ブラッドが述べたように、あらゆる種類のものをオートローダーに使用して含めるrequire_once
ことは、大きなセキュリティリスクになる可能性があり、同時に、ファイルシステムを何度も使用することfile_exists()
も非常に非効率的です.
したがって、結論として、オートローダは、他のクラス型関数、クラス存在関数、およびリフレクション メソッドを使用するinstanceof
たびis_subclass_of
に呼び出されます。
したがって、この話の教訓は、混合型の変数に対してクラス型関数、または上記の関数のいずれかを使用する予定がある場合は、クラス型関数に渡す前にまずそれを確認することです。
php - クラスとモデルの両方のオートロード
MVC フレームワークを使用する場合、コントローラーを自動ロードするのが一般的な方法であることは知っています。コントローラーが正常に自動ロードされる独自のミニフレームワークを作成しました。
同じオートロード機能でモデルもロードすることで、セキュリティ/悪い問題はありますか?
いえ
php - Laravelにロードされていない外部クラス
Laravelを使い始めたばかりで、学習曲線と詳細なドキュメントの欠如に少し苦労しています。verot.netで使用しようとしてclass.upload.php
いますが、クラスを読み込めないようです。
クラスディレクトリをにアップロードしました。application/libraries/class.upload_0.31
実際のクラスのファイル名はですclass.upload.php
。その後、同様に更新しましたAutoloader::map
-
$handle = new upload(..);
次に、クラスアップロードのドキュメントに従って、を使用してクラスを呼び出そうとします。
ドキュメントに正しく従ってクラスをその場所にマップしたと思いますが、エラーが発生し続けますClass 'upload' not found
。class.upload.phpのクラス名はですupload
。
私は何が欠けていますか?