問題タブ [php-7.4]
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 - PHP7.4でPHPUnitにプロパティの初期化をテストさせる方法は?
PHP7.4 の型付きプロパティを採用したときのアプリケーションのコード スタイルの変更の 1 つは、以下から移行することでした。
に
型指定されたプロパティが null 許容の場合でも、最初の if ステートメントはError
.
次のステップは、テストの作成でした。型指定されたプロパティが初期化されているかどうかをempty()
on でチェックすると、PHPUnit の実装assertEmpty
が同じエラーでクラッシュします。
明らかに機能しますが、プロパティがインスタンス化されていないかどうかを確認するにはassertFalse(isset($obj->value)
、どのアサーションを使用する必要がありますか? 必要なテストの簡素化:
php-7.4 - PHP クラス インスタンスにすべてのプロパティがありませんか?
私は何年も php を書いていませんでしたが、今は戻ってきました。新しい機能とより厳密な型付けが見られるのは良いことです。私はphp 7.4を使用していますが、奇妙な問題が発生しています。データベース テーブルのデータを表すモデルがあります (列名とプロパティ名が一致します)。クラス定義からinsert sqlステートメントを作成しています。つまり、すべてのプロパティを挿入しています(主キー「Id」を除く)。次に、モデル全体が PDOStatement 実行コマンドに渡されます。
テーブルが Customer で、クラスが CustomerEntity であるとします。
これは、次の SQL 挿入に変換されます。
その後、エンティティは配列に変換され、execute に渡されます。
すべてのプロパティが設定されている場合、これは正常に機能します。ただし、何かが設定されていない場合は、エラーが発生します。
次のように var_dump を実行すると、結果は次のようになります。
それはあなたにこれを与えます:
object(CustomerEntity)
public 'Name' => string 'John' (length=4)
したがって、クラスで定義されていないプロパティは消えます。C# のような他の厳密に型指定された言語の世界から来て、これは非常に奇妙です。私はそれらが未定義として存在することを期待していましたが、私の場合、それらはデータベースに null として挿入されます (プロパティを null 可能にして null に設定することなく)。すべてのプロパティを持っていなくても、オブジェクトが CustomerEntity であると言っているのはちょっとおかしいです。
これは本当にphpの仕組みですか、それともどうにかしてこれを構成できますか? 解決策が見つかりませんでした。