-
-
class Test{ - private $k=1;
- public function __get($propertyName){
- return 123;
- }
- }
- < p>$obj = new Test();
- echo json_encode(empty($obj->k)); //true
- echo json_encode(isset($obj->k)); //false
- echo json_encode( (bool)($obj->k)); //true
- ?>
-
コードをコピー
string 数値を変換する場合、左側の数値文字列をインターセプトして変換します。そうでない場合は 0 が返されます。
-
- //いくつかの変換された文字列値
(string)0 // "0"
- (string) ; // "1"
- (string)false; // ""
- (string)array() // "配列"
- ?
-
- コピーcode
-
配列は文字列の連結演算を直接実行できますが、数学的な演算は実行できません。
オブジェクト型をブール型に変換する場合は常に true になります。オブジェクト型は数値や文字列に変換できないため、文字列の連結や数学的演算は実行できません。
スカラーを配列に変換する方法は、配列の最初の要素をスカラーに設定し、その配列を返すことです。
スカラーは stdClass クラスのインスタンスを取得するためにオブジェクトに変換され、スカラー値は scalar という名前のプロパティに割り当てられます。 Object( [scalar] => 234)
配列をオブジェクトに変換して stdClass クラスのインスタンスを取得します。配列のキーはクラスの属性名です。
オブジェクトを配列に変換するのは少し複雑です。
メソッド、静的プロパティ、クラス定数は破棄されます
保護された属性名の前には「*」が付きます
プライベートプロパティの前にはクラス名が付きます (大文字と小文字はクラス名とまったく同じです)
たとえば、オブジェクトから変換された配列は次のようになります。
Array( [*v] => 444 [bf] => 333 [bk] => 99977 [Ak] => 999 [*p] => 888 [a2] => 22)
オリジナルのオブジェクトには以下が含まれます:
パブリック属性 a2、保護された属性 v、p、これらの属性がどのクラスに由来するかは識別できません (オーバーライドされると、サブクラスの属性が取得されます)。
クラス b のプライベート属性 f および k (配列キーの観点からは、bf を例に取ると、属性名が bf であるか、クラス b のプライベート属性 f であるかを判断することは不可能です)
クラス A の私有財産 k
b と A のどちらがサブクラスでどちらが親クラスであるかを識別することは不可能です (配列のキーだけから、元のオブジェクトがどのクラスから構築されたかを推測することも不可能です)
5. 論理演算は常に true または false を返します (JavaScript をよく書く人は注意してください) 論理演算子の優先順位は、&&、||、および or です。ステートメントで使用できますが、JavaScript のようにブール型ではない値は返されないので、式で使用する場合は注意してください。
$a = 1;$b=0; $b and $a = 100;- echo $a || $a = 200;
- eacho $a; //200
- ?>
-
-
- コードをコピー
-
-
- 6. switchの比較は「===」ではなく「==」です(JavaScriptでは「===」です)
7. php4 では、オブジェクト間の比較方法は配列と同じです。php5 では、オブジェクト型間の「==」比較は、それらが同じクラスのインスタンスに属している場合にのみ成立します (もちろん、属性も比較する必要があります)。比較。これはスカラーの「===」比較に似ています)。オブジェクト間の「===」比較は、それらが同じオブジェクトである場合にのみ真となります。
PHP4ではメンバ変数を含まないオブジェクトはempty()でtrueと判断されます
文字列オフセット offset は文字の empty() 判定を取得します: offset に対応する文字を判定に取得します。 PHP5.4 より前では、文字列から文字を取得するためにインデックスを使用する場合、インデックスが最初に丸められるため、左側は四捨五入されません。数値文字列は 0 に変換されます。 PHP5.4 以降、非整数形式の文字列インデックスは丸められないため、同様に isset() が false と判断されます。
$str = 'ab0d'; empty($str[0]); //false empty($str[0.5]); //false インデックスは切り捨てられます。 0 empty($str["0.5"]); //false インデックスは 0 に切り捨てられます。PHP5.4 以降は証拠が収集されず、true と判断されます - empty($str[2]); //true、取得した文字は "0"
- empty($str["3"]); //false、取得した文字は "d"
- empty($str[4]); //true、インデックス範囲外です。警告に注意してください。しかし、empty() は警告を無視します
- empty($str['a']); // false、PHP5.4 より前では左側に数値文字列インデックスが含まれていないため、次のように処理されます。 $str[0]、PHP5.4 以降、コードを直接コピーして true を判定します
- ?>
-
-
-
-
-
-
「等しくない」または「==」のいずれであっても、PHP の型間のデータ比較では「推移性」を使用しないでください。
$a == $b;
$b == $c;
$a == $c が真であるという意味ではありません
配列の比較方法
-
- //配列は標準の比較演算子を使用して比較されます
- function standard_array_compare($op1, $op2)
- {
- if (count($op1) < count($op2) ) {
- return -1; // $op1 < $op2
- } elseif (count($op1) > count($op2)) {
- return 1; $op1 として$key => $val) {
- if (!array_key_exists($key, $op2)) {
- return null; // uncomparable
- } elseif ($val < $op2[$key]) {
- return -1 ;
- } elseif ($val > $op2[$key]) {
- return 1;
- }
- }
- return 0; // $op1 == $op2
- }
- ?>
-
-
コードをコピー
8. 三項演算子?: 他のほとんどのプログラミング言語とは異なり、PHP の三項演算子は左結合です。
$arg = 'T'; - $vehicle = ( ( $arg == 'B' ) ? 'バス' :
- ( $arg == 'A' ) ? '飛行機' :
- ( $arg == 'T' ) ? '電車' :
- ( $arg == 'C' ) ? ' 車 ' :
- ( $arg == 'H' ) ? ' );
- echo $vehicle; //horse
- ?>
-
-
- コードをコピー
三項演算式は次のように分割されます
( $arg == 'B' ) 'バス' : ( $arg == 'A' )
? '飛行機' : ( $arg == 'T' )
? '電車' : ( $arg == 'C' )
? '車' : ( $arg == 'H' )
? '馬' : '足' ;
|