問題タブ [spl-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 - SPL自動読み込みのベストプラクティス
サーバー側のinclude_pathには、「/ usr / share /pear/」にあるpearディレクトリへの参照があります。私のアプリケーションには、「/ usr / share / pear /library/」にある共通ライブラリのファイルを含めていますrequire_once 'library/file.php'
。
最近、splオートローダーの使用を開始しました。ローダー関数で、ファイルを含めるロジックを決定する必要があることに気付きました。これを行う最初の方法は、ファイルをインクルードし、@
それが失敗するかどうかを確認するためにそれを抑制することでした。たとえば、悪い習慣であること@include 'library/file.php'
について多くのことを読んだことが主な理由で、そして、ディレクトリが私が望むものであるかどうかを確認し、それを実行してそれを含めます。@
get_include_path
PATH_SEPARATOR
file_exists
そのようです:
私は間違ったルートに行きましたか?私はちょうど@include
ビジネスをするべきでしたか、それとも私はそれをいくらか正しい方向にやっていますか?
php - PHP spl_autoload
私は本当にspl_autoloadのドキュメントを取得していません
私の理解では、phpがまだロードされていないクラスに遭遇したときに登録された関数を実行しようとします。たとえば、
require を実行させますか? 多くのオートロード関数も登録できますか?
教義の場合、
配列が渡されたので、Doctrine クラス内で autoload 関数を実行しようとするのではないでしょうか (これは必須でした)?
php - spl_autoload() を使用してクラスをロードできない
私は SPL オートロード機能をいじっていますが、現在それを機能させることができないため、何か重要なものが欠けているようです。現在使用しているスニペットは次のとおりです。
echo get_include_path()
私が期待したパスを取得したとき:
ただし、コードを実行すると、次のエラー メッセージが表示されます。
致命的なエラー: spl_autoload() [function.spl-autoload]: 5 行目の /home/someuser/public_html/subdomains/test/contact.php にクラス リクエストを読み込めませんでした
Request.class.php は間違いなく/home/someuser/public_html/subdomains/test/includes/classes/ ディレクトリにあります。
私は何が欠けていますか?
php - spl_autoload_register がオートロード スタックを初期化していません
私が書いたプログラムでSwiftMailer php ライブラリを使用しようとしています。このライブラリを含める前に、spl_autoload_register() 関数を問題なく使用していました。ただし、このライブラリを使用する前に、spl 関数を使用してクラス拡張と場所を明示的に定義していました。
私が直面している問題は、同じ命名規則に従っていないライブラリを使用しようとしているということです。独自の autoload クラス (ライブラリへの最初の呼び出しによって構築された) は、次のようになります。
}
クラスを呼び出した後にプログラムを単純に実行しようとすると、次のようになります。
30行目:
私は彼らの後にモデル化されたカスタム autoload クラスを使用しようとしましたが、試してみるとすべて得られます:
結果:
これはかなり単純な問題である必要があることはわかっていますが、見落としていますが、見つかりません。
どんな助けでも大歓迎です。
php - SplClassLoader を使用した PHP オートローディング?
PHP 5.3 の名前空間について学んでおり、名前空間の自動読み込みを使用したいと考えています。このSplClassLoader クラスを見つけましたが、その仕組みがわかりません。
次のようなディレクトリ構造があるとします。
クラスのオートローディングを有効にするにはどうすればよいですか? どのような名前空間が必要request.php
で、持つべきresponse.php
か?
これは次のrequest.php
とおりです。
そして、これは次のresponse.php
とおりです。
そしてindex.php
私は持っています:
次のエラー メッセージが表示されます。
なぜこれが機能しないのですか?クラスをロード/要求するようにプロジェクトで使用するSplClassLoader
にはどうすればよいですか? また、フォルダーと名前空間をどのようにセットアップして名前を付ける必要がありますか?
php - シングルトン、ファクトリー、オートローダー
オートローダー関数(spl_autoload_registerを使用)を使用する場合、もう必要ですか?
- シングルトン:データベース、ログ、r&r、フロントなど、必要なすべてのクラスがオートローダーによってロードされるため、「常にオン」などのオブジェクトの必要性は私にはわかりません。
- ファクトリ:繰り返しになりますが、オートローダーは必要なクラスをロードするため、ファクトリクラスを使用して、インターフェイスを実装するワーカークラスをインスタンス化するか、抽象クラスを拡張する必要があります。
php - __autoload() の代わりに spl_autoload() を使用する方法
http://php.net/manual/en/language.oop5.autoload.phpによると、マジック関数__autoload()
は PHP 7.2.0 で廃止され、PHP 8.0.0 で削除されました。
公式の代替はspl_autoload()
. http://www.php.net/manual/en/function.spl-autoload.phpを参照してください。しかし、PHP のマニュアルには、この赤ん坊の適切な使用方法が説明されていません。
私の質問:これ(私の自動クラスオートローダー)をバージョンに置き換える方法はspl_autoload()
?
問題: その関数にパスを与える方法がわかりません (名前空間のみを受け入れます)。
ちなみに、SO にはこのトピックに関するスレッドがたくさんありますが、私のセクシーなワンライナーに代わるクリーンでシンプルなソリューションはありません。
php - カスタム名前空間内でPEARライブラリを使用するにはどうすればよいですか?
カスタム名前空間を宣言していると、PEARライブラリを使用できません。
名前空間と自動ロード関数:
このROOT_DIR/inc / ldapwrangler / LDAP.class.phpのようなものを試してみると:
次のようなエラーが発生します:
5月29日10:03:32reagand-desktopapache2:PHP致命的なエラー:require_once():必要な'/home/reagand/dev/ldap_wrangler/inc/ldapwrangler/Net_LDAP2.class.php'(include_path ='。:/を開くことができませんでした18行目の/home/reagand/dev/ldap_wrangler/config.phpのusr/share / php:/ usr / share / pear')
参考までに、18行目はautoload関数のrequire_once()部分です。
Net_LDAP2クラスにldapwrangler名前空間を使用しないようにphpに指示するにはどうすればよいですか?または、その他の非ldapwranglerクラス。
php - PHP オートローダーと名前空間
PHP のオートローダーと名前空間に少し混乱しています。
私のクラスは資産ファイル内に整理されています。
これは単純なバージョンで、各フォルダ (つまり、ユーザー、データベース) にはさらに多くのファイルがあります。
このプロジェクトには 1 つのベンダー (つまり私) しかいないため、競合するベンダー名について心配する必要はありませんが、たとえば、PSR0 オートローダーを使用する場合:
各クラス ファイルで名前空間を宣言し、.xml を使用してクラスを初期化する必要がありますかnew user\User();
? を使用して初期化することはできませんかnew user_User;
どうもありがとう
php - PHP オートローダーは名前空間パスを追加します
私のMVC構造は次のとおりです。
これで、それぞれに名前空間が指定されました。たとえば、私は持っています
私のオートローダーは次のようになります。
そして私の主なindex.phpの使用
localhost/web/ を開くと、次のエラーが表示されます。
要求されたファイルの先頭に Core/ を追加しているようです。Index.php は Project/Controllers 内にあり、Core/Project/Controllers 内にはありません。取り除こうとしたら
助けてください