問題タブ [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 - PHP: autoload クラスが見つかりません
PHP でクラスを自動ロードする際に問題があります。
私index.php
は書いています(それは最も単純なものです):
私のCont.php
ファイルは次の場所にありPROJECT_ROOT/assets/core/Contr.php
ます。
その結果、私のindex.php
ファイルは致命的なエラーをスローします:
php - PHP オートローダー クラス
オートローダー クラスを実装していますが、機能していません。以下は、オートローダー クラスです ( php.net のこのページに触発されています)。
オートローダーを呼び出すコードは次のとおりです。
そしてエラーメッセージ:
autoload 関数がヒットしています。ファイル MyClass.class.php がインクルード パスに存在します。これは、コードを次のように変更することで確認できます。
print_r($var);
オブジェクトを返し、エラーはありません。
アドバイスや指針はありますか?
php - 名前空間 php を使用した spl_autoload
nodejs外部プロセスによって実行されるスケジュールされたジョブの小さなフレームワークを作成しています。オートローダを使用したいのですが、何らかの理由でデータが取得できません。名前空間も使用しています。私のフォルダ構造は次のようになります。
MyConfig.php
には、いくつかの定義と my のインスタンスがありますLoader.php
。
Loader.php は次のようになります。
したがって、私はJobConfig.php をSomeJob.php
含めて、失敗したときにインスタンス化しようとしています。Config.php
私の名前空間は次のようLibrary\Core\JobConfig
になります。物事をブートストラップする能力がなければ、これが最善のアプローチであるかどうかはわかりません。しかし、ローダーが失敗する前にエコーが表示されません。
編集:
@Layne による提案を試みましたが、うまくいきませんでした。私はまだ見つからないクラスを取得しています。クラスが spl スタックに入っていないようです。ここにコードへのリンクがあります
php - クラスの可用性と spl_autoload_register
より OOP アプローチを試すことで知識を深めようとしています (ただし、完全な OOP の準備はできていません。現在、主にオブジェクトを使用して、きちんと編集しやすくしているため、繰り返しを減らしています)。私は spl_autoload_register について読み、ある程度理解しましたが、アプリケーションに適用するのに苦労しています。(私が構築しているサイトは最終的に非常に大きくなるので、すべてのインクルードを避け、コードを繰り返さなければならないことを避けようとしています)
これは私の基本的な構造です (これは基本であり、成長します):
- エントリ ページ (最初に読み込まれる) (products.php) - このページはほとんどが HTML (デザインとレイアウト) で構成されていますが、私の変数とオブジェクトを参照しています。
- データベース クラス接続 (functions/dbconn.php)
- Products クラス ファイル (class/products.class.php) - products.php で必要な関数が含まれています。
- 関税クラスファイル (class/tariffs.class.php) - products.php および class/products.class.php 内で必要な関数が含まれています
私が欲しいもの(誤解や間違った方法で計画している場所を自由に修正してください!):
- データベース ファイルを関数に挿入することなく、すべてのクラス ファイルで使用できるようにする
- 必要なクラス ファイルを自動ロードします (おそらく "functions/dbconn.php" からのデータベース接続を含む)。
- クラス関数を他のクラス ファイルで使用できるようにする
私は、products.php で単一のインクルード ファイルを使用して、必要なクラス ファイル、データベース接続を自動ロードし、開始したすべてのクラスでそれらすべてを利用できるようにしたいと考えています。または、クラスを相互に利用可能にしたい場合は、各クラスファイルにコードを追加する必要があります+データベース接続。理想的には、各クラスの 1 つのインスタンスのみが必要です (この例の場合)。
私が頭を悩ませている問題は
、クラスファイル内で関数(他のクラスファイルに保存されている)を呼び出す必要がある場合、ファイルを含めて、クラス内で使用したいクラス内から開始およびインスタンス化する必要があることです。 . このインスタンスは、products.php では使用できません (そのため、products.php 内に新しいインスタンスを含めて開始する必要があります。これはもちろん空です...) また、各クラス ファイル内にデータベースをロードする必要があります (したがって、複数の接続を作成していると仮定すると、複数の接続を閉じる必要があります。これは間違っていると確信しています!)
私が通常行うことですが、先に進めようとしています:
通常、データベース接続を一度require_onceし、すべての(使用された)クラスファイルを作成し、「最初にロードされたファイル」(products.php)内でインスタンスを開始してから、データベース接続をすべてのクラスに挿入します/オブジェクト/関数 (必須)。ただし、異なるクラス関数は相互に利用できないため、コードを繰り返したり、厳密にはそこに存在することを意図していないクラスに関数を追加したり、クラスファイル内に新しいインスタンスを含めて開始したりしています....
これが紛らわしい場合は申し訳ありません。私は他のコードを何年も読んで独学で学んでおり、ネットから学んだことです...したがって、私の実践は最善ではないかもしれません(まだ...)
私が意味をなさない場合は、どこを教えてください。よりよく説明しようとします!
どんなアドバイスでも大歓迎です!
php - リモートサーバーでの spl_autoload 障害
私の悪い言語で申し訳ありません:)
私のローカル apache 2.2 php 5.3.13 ではすべて問題ありませんが、リモート サーバー (php 5.3 も) では spl_autoload が論理例外をスローします。
致命的なエラー: /home/u737840143/public_html/index.php:6 でメッセージ「クラス System\Core\Helper\Helper を読み込めませんでした」を含むキャッチされない例外「LogicException」スタック トレース: #0 /home/u737840143/public_html/index .php(6): spl_autoload('System\Core\Hel...') #1 {main} が 6 行目の /home/u737840143/public_html/index.php でスローされました
コード:
リモートのフォルダ構造はローカルに対応します。
php - spl autoloading: クラスが見つかりません – 名前空間の問題?
PHPのオートローディングで足を濡らしています。基本的なことはできたと思いますが、それでもうまくいきません。
次のディレクトリ構造を取得しました。
bootstrap.php
ライブラリを使用するために含まれるファイルです。このファイルには、次のコードが含まれています。
そしてでproject.php
:
私の理解では、オートローダーの使用方法は、コア PHP オートローダーが名前空間をディレクトリに変換してから、そのクラスを含む php を探す必要があるということです。
'It works!' を表示する代わりに、致命的なエラーがスローされます。残念ながら、CMS は致命的なエラーが発生したことを通知するだけなので、そのエラーが何であるかを正確に知ることはできません。
しかし、このような単純な構造では、エラーは非常に基本的であり、それがどのように機能するかを知っている人にとっては簡単に見つけることができると確信しています.
この例のどこが間違っていますか? このセットアップでオートローダーがどのように動作するかを正しく説明しましたか、それとも誤解がありますか?
EDIT:最後にエラーログを実行しました:
Fatal error: Class undefined: sven\\project\\project\\project\\project in /xxx/bootstrap.php on line 36
それは明らかに間違っているように見えますが、どうすればそれを変更できますか? バックスラッシュが 2 つあるのはなぜですか?