【2021/05/30】今日の学習

バリデーション [ BuildRules ]

※BuildRules(ビルドルール)では、1つずつデータをチェックする。複数レコードが登録されるとき、毎回データベースに接続しに行ってしまうので、大量のデータを処理するには向いてない。

条件付きルールを使う

エンティティデータに基づいてバリデーションをかける条件を指定できる。

public function buildRules ( RulesChecker $rules )
{
    $rules->add( function ($entity, $optionValidate) use($rules) {
        if ( $entity->delete_flag === 0 ) {
            $rule = $rules->isUnique( [ 'name', 'delete_flag' ] , " 表示するエラーメッセージ ");
            return $rule($entity, $optionValidate );
        }
        return true;
    }, ' バリデーションの名前 ' );

    return $rules  /// 最終的に返す値は$rules
}

上の例は、delete_flag === 0 のとき(つまり削除されていない有効な値がDBに存在する)
同じnameはisUniqueに引っかかり登録できない。
もし、delete_flag === 1 (値が削除されている)なら、登録できる。

比較演算子( == と === の違い )

PHPマニュアルより

  • $a == $b ( 型の相互変換したあとで、その$aが$bに等しいときTrue )

  • $a === $b ( $aが$bに等しく、同じ型である場合True )

キャストとは

変数などのデータ型を変換すること
PHPには自動キャストという機能があり、異なる型同士で演算をすると型を自動で変換する

== (自動キャストする)は型の相互変換を行うため、$a(string型)と$b(int型)でも比較できる。
=== (自動キャストしない)は型の変換を行わず、同じ型で$aと$bが等しいときだけ比較できる。

!= や !== についても同様

だから、=== の方が厳格とされる。

キャスト演算子

PHPは弱い型付けの言語とされている。
ある値を特定の型として扱いたいとき、キャスト演算子を使うと、その値を特定の型として扱うことができる。

  • ( int ) → 整数
  • ( string ) → 文字列
  • ( bool ) → 真偽値
  • ( array ) → 配列
  • ( object ) → オブジェクト
  • ( unset ) → NULL

$a = ' 5 ' ;
$a = ( int ) $a ;  // これで$aは整数値となる

ただし、配列を文字列にキャストした場合の結果は"Array"となる。
また、オブジェクトを配列にキャストすると、そのプロパティの名前と値を関連付けた連想配列となる。
配列をオブジェクトにキャストすると、配列のキーがオブジェクトのプロパティとなる。

PHPにおける変数

値が設定されていない変数は、NULL値が設定されていると見なされる。

変数の参照

PHPにおける「参照」とは、その変数のエイリアスを作ること。
エイリアスとは「あだ名」「別名」のこと
ある対象や実体を、複数の異なるシンボルや識別子で同じように参照できるようにする仕組み。

$blackを変数$whiteのエイリアスとして設定するには、参照したい変数の前に&をつける。

$black = & $white ;

$blackにそれまで保存されていた値がもしあれば、それは破壊され(失われ)、$blackは$whiteに保存されている値のエイリアスとなる。

$white = " snow " ;
$black = & $white ;
unset ($white)  // 参照の解除
echo $black ;
→/// snow