問題タブ [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.

0 投票する
2 に答える
3786 参照

php - SPL自動読み込みのベストプラクティス

サーバー側のinclude_pathには、「/ usr / share /pear/」にあるpearディレクトリへの参照があります。私のアプリケーションには、「/ usr / share / pear /library/」にある共通ライブラリのファイルを含めていますrequire_once 'library/file.php'

最近、splオートローダーの使用を開始しました。ローダー関数で、ファイルを含めるロジックを決定する必要があることに気付きました。これを行う最初の方法は、ファイルをインクルードし、@それが失敗するかどうかを確認するためにそれを抑制することでした。たとえば、悪い習慣であること@include 'library/file.php'について多くのことを読んだことが主な理由で、そして、ディレクトリが私が望むものであるかどうかを確認し、それを実行してそれを含めます。@get_include_pathPATH_SEPARATORfile_exists

そのようです:

私は間違ったルートに行きましたか?私はちょうど@includeビジネスをするべきでしたか、それとも私はそれをいくらか正しい方向にやっていますか?

0 投票する
3 に答える
4881 参照

php - PHP spl_autoload

私は本当にspl_autoloadのドキュメントを取得していません

私の理解では、phpがまだロードされていないクラスに遭遇したときに登録された関数を実行しようとします。たとえば、

require を実行させますか? 多くのオートロード関数も登録できますか?

教義の場合、

配列が渡されたので、Doctrine クラス内で autoload 関数を実行しようとするのではないでしょうか (これは必須でした)?

0 投票する
3 に答える
13632 参照

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/ ディレクトリにあります。

私は何が欠けていますか?

0 投票する
2 に答える
1535 参照

php - spl_autoload_register がオートロード スタックを初期化していません

私が書いたプログラムでSwiftMailer php ライブラリを使用しようとしています。このライブラリを含める前に、spl_autoload_register() 関数を問題なく使用していました。ただし、このライブラリを使用する前に、spl 関数を使用してクラス拡張と場所を明示的に定義していました。

私が直面している問題は、同じ命名規則に従っていないライブラリを使用しようとしているということです。独自の autoload クラス (ライブラリへの最初の呼び出しによって構築された) は、次のようになります。

}

クラスを呼び出した後にプログラムを単純に実行しようとすると、次のようになります。

30行目:

私は彼らの後にモデル化されたカスタム autoload クラスを使用しようとしましたが、試してみるとすべて得られます:

結果:

これはかなり単純な問題である必要があることはわかっていますが、見落としていますが、見つかりません。

どんな助けでも大歓迎です。

0 投票する
1 に答える
8341 参照

php - SplClassLoader を使用した PHP オートローディング?

PHP 5.3 の名前空間について学んでおり、名前空間の自動読み込みを使用したいと考えています。このSplClassLoader クラスを見つけましたが、その仕組みがわかりません。

次のようなディレクトリ構造があるとします。

クラスのオートローディングを有効にするにはどうすればよいですか? どのような名前空間が必要request.phpで、持つべきresponse.phpか?

これは次のrequest.phpとおりです。

そして、これは次のresponse.phpとおりです。

そしてindex.php私は持っています:

次のエラー メッセージが表示されます。

なぜこれが機能しないのですか?クラスをロード/要求するようにプロジェクトで使用するSplClassLoaderにはどうすればよいですか? また、フォルダーと名前空間をどのようにセットアップして名前を付ける必要がありますか?

0 投票する
1 に答える
860 参照

php - シングルトン、ファクトリー、オートローダー

オートローダー関数(spl_autoload_registerを使用)を使用する場合、もう必要ですか?

  • シングルトン:データベース、ログ、r&r、フロントなど、必要なすべてのクラスがオートローダーによってロードされるため、「常にオン」などのオブジェクトの必要性は私にはわかりません。
  • ファクトリ:繰り返しになりますが、オートローダーは必要なクラスをロードするため、ファクトリクラスを使用して、インターフェイスを実装するワーカークラスをインスタンス化するか、抽象クラスを拡張する必要があります。
0 投票する
1 に答える
88388 参照

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 にはこのトピックに関するスレッドがたくさんありますが、私のセクシーなワンライナーに代わるクリーンでシンプルなソリューションはありません。

0 投票する
1 に答える
1580 参照

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クラス。

0 投票する
1 に答える
537 参照

php - PHP オートローダーと名前空間

PHP のオートローダーと名前空間に少し混乱しています。

私のクラスは資産ファイル内に整理されています。

これは単純なバージョンで、各フォルダ (つまり、ユーザー、データベース) にはさらに多くのファイルがあります。

このプロジェクトには 1 つのベンダー (つまり私) しかいないため、競合するベンダー名について心配する必要はありませんが、たとえば、PSR0 オートローダーを使用する場合:

各クラス ファイルで名前空間を宣言し、.xml を使用してクラスを初期化する必要がありますかnew user\User();? を使用して初期化することはできませんかnew user_User;

どうもありがとう

0 投票する
1 に答える
5054 参照

php - PHP オートローダーは名前空間パスを追加します

私のMVC構造は次のとおりです。

これで、それぞれに名前空間が指定されました。たとえば、私は持っています

私のオートローダーは次のようになります。

そして私の主なindex.phpの使用

localhost/web/ を開くと、次のエラーが表示されます。

要求されたファイルの先頭に Core/ を追加しているようです。Index.php は Project/Controllers 内にあり、Core/Project/Controllers 内にはありません。取り除こうとしたら

助けてください