問題タブ [psr-0]
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 - composer による複数の PHP プロジェクトの自動ロード
次のようなフォルダーレイアウトがあるとします
これらのプロジェクトは同じレベルにある必要があり、相互に共存する必要があります。たとえば、およびその逆のprojectA
コードを使用する可能性があるため、フォルダーに配置することはできません。projectB
projectC
vendor
問題はautoload.php
、各プロジェクトで自分のフォルダーを自動ロードすることができsrc
ますvendor
が、他のプロジェクトも自動ロードする方法ですか?
隣人のプロジェクトが PHP 名前空間としてフォルダー名を持つと仮定すると、将来、新しいプロジェクト フォルダーを追加したときに autoload が魔法のように機能するように (composer を介して) autoload.php をセットアップすることは可能ですか?
php - PHP では常に完全修飾クラス名を使用する必要がありますか?
次のようなサンプルコードが表示されます
代わりに完全修飾クラス名を常に使用しないのはなぜですか?
したがって、このファイルがどの名前空間で使用されていても心配する必要はありませんよね?
php - composer を使用して 2 つのベンダー プロジェクトを同時に自動ロードする
独自のcomposer.jsonを使用して、composer が正しく設定された 2 つのプロジェクト (project1、project2) があります。
今、別のphpファイルで、それらを介して自動ロードします
そして、私はエラーが発生します
wp-cli の問題ですか、それとも composer の問題ですか? monolog などの別のライブラリで試してみましたが、これは問題ありません。
何か案が?
refactoring - phpstorm ファイルを開かずにクラスを移動
クラスファイルを開かずにphpstormでクラスを移動し、クラス名を選択してF6を押すことは可能ですか???
PSR0のソースルートを定義したのですが、問題に関連するメモのようです
intellij のアイデアにより、クラスを取得して、必要なパッケージに配置するだけで、名前空間が更新されます
ありがとうございました
php - NetBeans IDE を使用して PHPUnit テストとオートロードを編成する方法
自動ロード ( http://www.php-fig.org/psr/psr-0/ ) と PHPunit テスト ( https://phpunit.de/manual/current/en/organizing-tests.html )にはルールがあります。個別に実装するのは簡単ですが、それらを組み合わせるのは簡単ではありません。
テストを整理するためのPHPUnitのベストプラクティスのトピックも読みましたが、答えを適用することは私には明らかではありません。私自身のプロジェクトを書いているときに、おそらくコード構成に同じ起源を持ついくつかの問題がありました。本当に簡単な例のレシピがあればいいのにと思います。したがって、私は自分の質問をかなり大きくします。
サンプルプロジェクト
PHPUnit、SVN、および Doxygen をサポートしているため、私はNetBeans IDE 7.4を使用しています (ただし、その IDE を使用した経験はありません)。
プロジェクトのプロパティは
- プロジェクト フォルダー: C:\xampp\htdocs\myapps\PhpProject1
- ソースフォルダー: C:\xampp\htdocs\myapps\PhpProject1
- テスト フォルダー: C:\xampp\htdocs\myapps\PhpProject1\tests
最初の問題があります。NetBeans は、ミラーの src/tests 構造を最初からブロックします。Source Folderの [ Browse ] ボタンはありません。Test フォルダはSource フォルダとは異なる必要があります。
プロジェクトの外にある PHAR ファイルから PHPUnit と skelgen を使用します。(ツール->オプション->PHP/PHPUnit )
- PHPUnit スクリプト: C:\xampp\phar\phpunit.phar
- スケルトン ジェネレーター スクリプト: C:\xampp\phar\phpunit-skelgen-1.2.1.phar
プロジェクトディレクトリに次のファイル構造があります
以来src
、名前空間ではありません
- ファイル
src/MyPack/Foo/Bar.php
にはクラスが含まれていますMyPack\Foo\Bar
- ファイル
src/MyPack/Quu/Baz.php
にはクラスが含まれていますMyPack\Qoo\Baz
- ファイル
src/Client.php
にはクラスが含まれていますClient
srcAutoload.php
https://github.com/php-fig/fig-standards/blob/master/accepted/PSR-0.mdからの変更された PSR-0 自動ロード実装が含まれています。違いは、実行前require()
に PSR-0 ファイル名の前にsrc/
テスト生成とオートロードの問題
とクラスにツール/テストの作成(コンテキストメニューから)を使用しましたが、最終的に次の構造になりますBar
Baz
それは間違いなくミラー対称ではありません。さらに、生成されたテストは、テストしているクラスをロードする方法を知りません。
オートロードの私の回避策
前述のように、テスト ランナーにはプロジェクトとは異なる作業ディレクトリがあります。したがって、テスト用のオートローダーは別の完全なファイル名を作成する必要があります。PSR-0 オートローダーを複製し、名前を付けて保存し、tests/srcAutoloadFromTests.php
別のプレフィックスを追加しました
その後、Use Bootstrap (Project Properties->Testing/PHPUnit ) を追加しました。ファイルtests/bootstrap.php
に含まれるもの:
このソリューションにより、PHPUnit はテストを実行しますが、私には見苦しく見えます。
より具体的な質問
ミラーリングsrc/
がtests/
オートロードに役立たないのはなぜですか?
正しいフォルダーを作成してファイルを移動することにより、ミラーリングされた構造を手動で作成しました。
https://phpunit.de/manual/current/en/organizing-tests.html によると、PHPUnit は test ディレクトリを再帰的にトラバースすることで、テストを自動的に検出して実行できます。私にはうまくいきません。my がないsrcAutoloadFromTests.php
と、以前のミラー化されていない構造と同じエラーが発生します。
自動読み込みコードの重複について
NetBeans ではソース フォルダーをテスト フォルダーとして使用できないため、同じクラスに対して 2 つのオートローダーが必要です。それが良い習慣かどうかはわかりません。
オートロードは、同じプロジェクトで作業している他のプログラマーを悩ませるべきではありません。もっと一般的なものを探します。
また、将来的にはサードパーティのコードを使用できます。彼らのオートローダーも複製する必要がありますか?
src/
およびtests/
フォルダは最上位にする必要がありますvendor/
私はしばらく前にオートローディングのルールを学んでいます。src/
PSR-0 は PSR-4 に従って非推奨としてマークされており、パスの途中にtests/
配置する必要があることがわかりました。
ただし、サードパーティのコードを最上位vendor/
フォルダー内に配置する慣行があります。src/
とtests/
フォルダを同じレベルに配置しないでください。
これにより、構造全体がよりPSR-0スタイルになります。
NetBeans での PHPUnit のヒントなし
BazTest および BarTest コードを記述している間、NetBeans IDE は PHPUnit メソッドをヒントしませんが、両方のクラスが拡張されています。\PHPUnit_Framework_TestCase
PHAR の PHPUnit を使っているからでしょうか。
例を引用することで、私の質問がより明確になったことを願っています。読んでくれてありがとう、私は良いアドバイスを探しています
php - クラスが見つからない問題 (Composer、PHPUnit)
PHPUnit から次のエラーを取得します。
私の構造は次のようなものです:
composer を介して行われるオートロード:
PSR0、PSR2、PSR4、...で試しました
MoneyTest クラス:
マネークラス:
FoobarTest\Money\Money
の代わりにロードしようとしているのはなぜFoobar\Money\Money
ですか?
php - Composer を使用してローカル リポジトリから php クラスをロードする方法は?
Php と composer は初めてです. composer を使用して Php クラスに別のモジュールにアクセスしたいです. これは私の基本的なプロジェクト構造です (2 つのモジュール共通とワーカー) index.php
共通/ベンダー/キャンバス/test.php
共通/composer.json
worker/composer.json
worker/tempcaller.php
psr-0 またはリポジトリでもそれを行うことができません。これを行う方法はありますか?
php - クラス、名前空間、および psr-0 自動ロードを備えた Wordpress プラグイン
私はこのWordpressのことでかなり新しいもので、独自のテーマを作成し、スライドショーを処理するプラグインを作成したいと考えています.
(後で何人かの生徒にこれを教えなければならないので、既存のプラグインをそのまま使用することはできません)
下部のhttp://www.php-fig.org/psr/psr-0からオートローダーを実装しましたが、正常に動作します。
クラス内のすべてのメソッドとすべてを呼び出すことができるので、問題ありません。実際の質問は次のとおりです。
とき
が呼び出され、メソッドを実行します
しかし、dbDelta() は未定義の関数です。関数の前に名前空間を設定しようとしていることがわかりました (理由はわかりません。なぜなら、クラス メソッドではなく関数にあるからですよね?)。とにかく私はそれをこのように呼んでみました
それは機能しているようですが、まだ機能が見つかりません。クラスで dbDelta を手動で要求できますか、それとも何か問題がありますか?
非常に長い質問で申し訳ありません...
ウルリック・マッカードル