検索
ホームページバックエンド開発PHPチュートリアルPHP 比較演算と論理演算、PHP 演算ロジック_PHP チュートリアル

PHPの比較演算と論理演算、PHPの演算ロジック

1. empty()を使用して以下の値が真であると判定されます:

未割り当て変数、未宣言変数、0、"0"、""、false、null、空の配列 array()、オブジェクトのマジックメソッド __get() によって返される値

PHP5.0より前のバージョンでは、属性を持たないオブジェクトもemptyによって空と判定されます

注: empty() は変数、または変数のインデックス値や属性値のみを受け入れます。定数を直接渡すことも、演算式を渡すこともできません。式は PHP 5.5 以降でサポートされます

2. isset() によって false と判断される値: 未割り当ての変数、未宣言の変数、null、__get() によって返される値は empty() と同じ参加を受け入れ、定数や式にすることはできません。

3. さまざまな種類のデータの比較

それらの 1 つがブール型または null の場合、比較のためにブール型に変換します。

それ以外の場合、それらの 1 つが数値である場合、それを数値に変換し、

を比較します それ以外の場合、それらの 1 つが文字列である場合は、それを文字列に変換して比較します

オブジェクト型は常に配列型およびスカラー型より大きく、配列型は常にスカラー型より大きくなります

次の比較結果に注目してください:

リーリー PHP 比較演算と論理演算、PHP 演算ロジック_PHP チュートリアル PHP 比較演算と論理演算、PHP 演算ロジック_PHP チュートリアル

4. 型変換ルール

empty() でtrueと判定された値は

boolean型に変換して false を取得し、それ以外の場合は true となります(__get() で返される値は具体的な値に応じて判定する必要があります) empty()でtrueと判定された値をnumberに変換して0を取得、空でない配列をnumberに変換して1を取得(__get()で返される値は具体的な値に応じて判定する必要がある)

リーリー

PHP 比較演算と論理演算、PHP 演算ロジック_PHP チュートリアル PHP 比較演算と論理演算、PHP 演算ロジック_PHP チュートリアル文字列から数値へのいくつかの変換シナリオ:

リーリー

PHP 比較演算と論理演算、PHP 演算ロジック_PHP チュートリアル PHP 比較演算と論理演算、PHP 演算ロジック_PHP チュートリアル

文字列を数値に変換する場合、変換のために左側の数値文字列をインターセプトします。そうでない場合は、0を返します。

他のデータを文字列に変換します:

リーリー リーリー

PHP 比較演算と論理演算、PHP 演算ロジック_PHP チュートリアル 配列は文字列と直接連結できますが、数学的演算を行うことはできません。PHP 比較演算と論理演算、PHP 演算ロジック_PHP チュートリアル

オブジェクトタイプをブール値に変換することは常に true です。オブジェクトタイプは数値と文字列に変換できないため、文字列の結合や数学的演算は実行できません

スカラーを配列に変換する方法は、配列の最初の要素をスカラーに設定し、配列を返すことです。 スカラーはオブジェクトに変換され、stdClass クラスのインスタンスが取得され、スカラーの値は scalar という名前の属性に割り当てられます: Object( [scalar] => 234)

配列は stdClass クラスのインスタンスを取得するためにオブジェクトに変換されます。配列のキーはクラスのプロパティ名です。

オブジェクトから配列への変換は少し複雑です:

メソッド、静的プロパティ、クラス定数は破棄されます

保護された属性名の前には「*」が付きます

面 プライベート属性はプレハブとしてプレフィックスとして追加されます (大文字と小文字はクラス名とまったく同じです)

これらの接頭辞の前後にスペース文字を追加します

たとえば、オブジェクトから変換された配列は次のようになります:

リーリー

元のオブジェクトには以下が含まれます:

パブリック属性 a2、保護された属性 v、p、これらの属性がどのクラスに由来するかを識別することは不可能です (オーバーライドされた場合、サブクラスの属性が取得されます)

          来自类 b 的 private 属性 f、k,(从数组 key 来看,以bf为例,无法判断他是属性名为bf,还是来自类b的私有属性f)

          来自类 A 的 private 属性 k 

          无法鉴别 b 和 A 哪个是子类哪个是父类(仅从 array 的key来看,也无法推断出原对象构造自哪个类)

 

例子:

PHP 比較演算と論理演算、PHP 演算ロジック_PHP チュートリアル
<span>class</span><span> A {
    </span><span>private</span> <span>$A</span> = 'private property, $A of class A'; <span>//</span><span> This will become '\0A\0A'</span>
    <span>protected</span> <span>$C</span> = 'protected property, $C of class A'<span>;
}

</span><span>class</span> B <span>extends</span><span> A {
    </span><span>private</span> <span>$A</span> = 'private property, $A of class B'; <span>//</span><span> This will become '\0B\0A'</span>
    <span>public</span> <span>$AA</span> = 'public property, $AA of class B'; <span>//</span><span> This will become 'AA'</span>
    <span>protected</span> <span>$B</span> = 'protected property, $B of class B'<span>;
}

</span><span>$arr</span> = (<span>array</span>) <span>new</span><span> B();

</span><span>foreach</span> (<span>$arr</span> <span>as</span> <span>$key</span> => <span>$value</span><span>) {
    </span><span>echo</span> '<br />'<span>;
    </span><span>echo</span> <span>$key</span> .',length: '.<span>strlen</span>(<span>$key</span>).' value: '.<span>$value</span><span>;
}</span>
PHP 比較演算と論理演算、PHP 演算ロジック_PHP チュートリアル

 

输出结果:

BA,length: 4 value: <span>private</span> property, <span>$A</span> of <span>class</span><span> B
AA</span>,length: 2 value: <span>public</span> property, <span>$AA</span> of <span>class</span><span> B
</span>*B,length: 4 value: <span>protected</span> property, <span>$B</span> of <span>class</span><span> B
AA</span>,length: 4 value: <span>private</span> property, <span>$A</span> of <span>class</span><span> A
</span>*C,length: 4 value: <span>protected</span> property, <span>$C</span> of <span>class</span> A

 

 

5、 逻辑运算总是返回 true 或 false (写多了 javascript 的人要注意),逻辑运算符优先级从高到低 为 &&、 ||、 and、 or ,逻辑运算符的短路效果可以使用语句中,但记住他们不会像 javascript 中那样返回一个 不是 boolean 类型的值,在表达式中使用要注意。

PHP 比較演算と論理演算、PHP 演算ロジック_PHP チュートリアル
<span>$a</span> = 1<span>;
</span><span>$b</span>=0<span>;
</span><span>$b</span> and <span>$a</span> = 100<span>;
</span><span>echo</span> <span>$a</span>; <span>//</span><span>1</span>
<span>$b</span> || <span>$a</span> = 200<span>;
</span><span>echo</span> <span>$a</span>; <span>//</span><span>200</span>
PHP 比較演算と論理演算、PHP 演算ロジック_PHP チュートリアル

 

 

 

6、switch 的比较不是 "===" 而是 "==" (在 javascript 中是 "===")

 

7、 在 php4 中,object 之间的比较方式与 array 相同,在 php5 中 , object 类型间的 "==" 比较为 true的前 提是,他们属于同一个类的实例(当然还要进行属性的比较,这类似标量的"==="比较),object 间的 "===" 比较为 true 的前提是他 们 就是同一个对象。

 

在 PHP4 中 ,不包括任何成员变量的对象 被 empty() 判断为 true

字符串偏移 offset 取字符的 empty() 判定: 取对应 offset 的字符进行判断,在PHP5.4 以前,使用索引从字符串中取字符时会先将索引进行取整,因此左侧不包含数字的字符串都被转换成0,PHP5.4之后,不再对非整形格式的字符串索引进行取整,因此判断为 true, 同理,isset() 判定为false. 如:

PHP 比較演算と論理演算、PHP 演算ロジック_PHP チュートリアル
<span>$str</span> = 'ab0d'<span>;
</span><span>empty</span>(<span>$str</span>[0]); <span>//</span><span>false</span>
<span>empty</span>(<span>$str</span>[0.5]); <span>//</span><span>false  索引被向下取整 为 0</span>
<span>empty</span>(<span>$str</span>["0.5"]); <span>//</span><span>false 索引被向下取整 为 0,PHP5.4之后不取证,判定为 true </span>
<span>empty</span>(<span>$str</span>[2]); <span>//</span><span>true ,取得的字符为 "0"</span>
<span>empty</span>(<span>$str</span>["3"]); <span>//</span><span>false ,取得的字符为 "d"</span>
<span>empty</span>(<span>$str</span>[4]); <span>//</span><span>true ,索引超出范围,notice 警告,但 empty() 会忽略警告</span>
<span>empty</span>(<span>$str</span>['a']); <span>//</span><span> false ,左侧不包含数字字符串索引 PHP5.4之前被处理为 $str[0],PHP5.4之后,直接为判定 true </span>
PHP 比較演算と論理演算、PHP 演算ロジック_PHP チュートリアル

 

无论是“不等于”还是”==“ ,不要在 PHP 的跨类型数据比较中使用”传递性“:

$a == $b; //true

$b == $c; //true

并不能说明 $a == $c 为 true

 

数组的比较方法

PHP 比較演算と論理演算、PHP 演算ロジック_PHP チュートリアル
<span>//</span><span> 数组是用标准比较运算符这样比较的</span>
<span>function</span> standard_array_compare(<span>$op1</span>, <span>$op2</span><span>)
{
    </span><span>if</span> (<span>count</span>(<span>$op1</span>) < <span>count</span>(<span>$op2</span><span>)) {
        </span><span>return</span> -1; <span>//</span><span> $op1 < $op2</span>
    } <span>elseif</span> (<span>count</span>(<span>$op1</span>) > <span>count</span>(<span>$op2</span><span>)) {
        </span><span>return</span> 1; <span>//</span><span> $op1 > $op2</span>
<span>    }
    </span><span>foreach</span> (<span>$op1</span> <span>as</span> <span>$key</span> => <span>$val</span><span>) {
        </span><span>if</span> (!<span>array_key_exists</span>(<span>$key</span>, <span>$op2</span><span>)) {
            </span><span>return</span> <span>null</span>; <span>//</span><span> uncomparable</span>
        } <span>elseif</span> (<span>$val</span> < <span>$op2</span>[<span>$key</span><span>]) {
            </span><span>return</span> -1<span>;
        } </span><span>elseif</span> (<span>$val</span> > <span>$op2</span>[<span>$key</span><span>]) {
            </span><span>return</span> 1<span>;
        }
    }
    </span><span>return</span> 0; <span>//</span><span> $op1 == $op2</span>
}
PHP 比較演算と論理演算、PHP 演算ロジック_PHP チュートリアル

 

 

 

8、三元运算符 ?: ,跟其他大多数编程语言不一样,PHP 的三元运算符是左结合的!

PHP 比較演算と論理演算、PHP 演算ロジック_PHP チュートリアル
    <span>$arg</span> = 'T'<span>;    
    </span><span>$vehicle</span> = ( ( <span>$arg</span> == 'B' ) ? 'bus' :<span>    
                 ( </span><span>$arg</span> == 'A' ) ? 'airplane' :<span>   
                 ( </span><span>$arg</span> == 'T' ) ? 'train' :<span>    
                 ( </span><span>$arg</span> == 'C' ) ? 'car' :<span>    
                 ( </span><span>$arg</span> == 'H' ) ? 'horse' :    
                 'feet'<span> );    
    </span><span>echo</span> <span>$vehicle</span>;   <span>//</span><span>horse</span>
PHP 比較演算と論理演算、PHP 演算ロジック_PHP チュートリアル


 

三元运算表达式被划分为

( <span>$arg</span> == 'B' ) ? 'bus' : ( <span>$arg</span> == 'A'<span> ) 
                                    </span>? 'airplane' : ( <span>$arg</span> == 'T'<span> ) 
                                                             </span>? 'train' : ( <span>$arg</span> == 'C'<span> )
                                                                               </span>? 'car' : ( <span>$arg</span> == 'H'<span> )
                                                                                                    </span>? 'horse' : 'feet' ;   

www.bkjia.com本当http://www.bkjia.com/PHPjc/1125682.html技術記事 PHPの比較演算と論理演算、PHPの演算ロジック1. empty()を使用して以下の値がtrueと判定されます:未割り当ての変数、未宣言の変数、0、"0"、""、false、null、空の配列array( ) ...
声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
PHPの継続的な使用:その持久力の理由PHPの継続的な使用:その持久力の理由Apr 19, 2025 am 12:23 AM

まだ人気があるのは、使いやすさ、柔軟性、強力なエコシステムです。 1)使いやすさとシンプルな構文により、初心者にとって最初の選択肢になります。 2)Web開発、HTTP要求とデータベースとの優れた相互作用と密接に統合されています。 3)巨大なエコシステムは、豊富なツールとライブラリを提供します。 4)アクティブなコミュニティとオープンソースの性質は、それらを新しいニーズとテクノロジーの傾向に適応させます。

PHPおよびPython:類似点と相違点を調査しますPHPおよびPython:類似点と相違点を調査しますApr 19, 2025 am 12:21 AM

PHPとPythonはどちらも、Web開発、データ処理、自動化タスクで広く使用されている高レベルのプログラミング言語です。 1.PHPは、ダイナミックウェブサイトとコンテンツ管理システムの構築によく使用されますが、PythonはWebフレームワークとデータサイエンスの構築に使用されることがよくあります。 2.PHPはエコーを使用してコンテンツを出力し、Pythonは印刷を使用します。 3.両方ともオブジェクト指向プログラミングをサポートしますが、構文とキーワードは異なります。 4。PHPは弱いタイプの変換をサポートしますが、Pythonはより厳しくなります。 5. PHPパフォーマンスの最適化には、Opcacheおよび非同期プログラミングの使用が含まれますが、PythonはCprofileおよび非同期プログラミングを使用します。

PHPおよびPython:さまざまなパラダイムが説明されていますPHPおよびPython:さまざまなパラダイムが説明されていますApr 18, 2025 am 12:26 AM

PHPは主に手順プログラミングですが、オブジェクト指向プログラミング(OOP)もサポートしています。 Pythonは、OOP、機能、手続き上のプログラミングなど、さまざまなパラダイムをサポートしています。 PHPはWeb開発に適しており、Pythonはデータ分析や機械学習などのさまざまなアプリケーションに適しています。

PHPとPython:彼らの歴史を深く掘り下げますPHPとPython:彼らの歴史を深く掘り下げますApr 18, 2025 am 12:25 AM

PHPは1994年に発信され、Rasmuslerdorfによって開発されました。もともとはウェブサイトの訪問者を追跡するために使用され、サーバー側のスクリプト言語に徐々に進化し、Web開発で広く使用されていました。 Pythonは、1980年代後半にGuidovan Rossumによって開発され、1991年に最初にリリースされました。コードの読みやすさとシンプルさを強調し、科学的コンピューティング、データ分析、その他の分野に適しています。

PHPとPythonの選択:ガイドPHPとPythonの選択:ガイドApr 18, 2025 am 12:24 AM

PHPはWeb開発と迅速なプロトタイピングに適しており、Pythonはデータサイエンスと機械学習に適しています。 1.PHPは、単純な構文と迅速な開発に適した動的なWeb開発に使用されます。 2。Pythonには簡潔な構文があり、複数のフィールドに適しており、強力なライブラリエコシステムがあります。

PHPとフレームワーク:言語の近代化PHPとフレームワーク:言語の近代化Apr 18, 2025 am 12:14 AM

PHPは、多数のWebサイトとアプリケーションをサポートし、フレームワークを通じて開発ニーズに適応するため、近代化プロセスで依然として重要です。 1.PHP7はパフォーマンスを向上させ、新機能を紹介します。 2。Laravel、Symfony、Codeigniterなどの最新のフレームワークは、開発を簡素化し、コードの品質を向上させます。 3.パフォーマンスの最適化とベストプラクティスは、アプリケーションの効率をさらに改善します。

PHPの影響:Web開発などPHPの影響:Web開発などApr 18, 2025 am 12:10 AM

phphassiblasifly-impactedwebdevevermentandsbeyondit.1)itpowersmajorplatformslikewordpratsandexcelsindatabase interactions.2)php'sadaptableability allowsitale forlargeapplicationsusingframeworkslikelavel.3)

スカラータイプ、リターンタイプ、ユニオンタイプ、ヌル可能なタイプなど、PHPタイプのヒントはどのように機能しますか?スカラータイプ、リターンタイプ、ユニオンタイプ、ヌル可能なタイプなど、PHPタイプのヒントはどのように機能しますか?Apr 17, 2025 am 12:25 AM

PHPタイプは、コードの品質と読みやすさを向上させるためのプロンプトがあります。 1)スカラータイプのヒント:php7.0であるため、基本データ型は、int、floatなどの関数パラメーターで指定できます。 3)ユニオンタイプのプロンプト:PHP8.0であるため、関数パラメーターまたは戻り値で複数のタイプを指定することができます。 4)Nullable Typeプロンプト:null値を含めることができ、null値を返す可能性のある機能を処理できます。

See all articles

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SecLists

SecLists

SecLists は、セキュリティ テスターの究極の相棒です。これは、セキュリティ評価中に頻繁に使用されるさまざまな種類のリストを 1 か所にまとめたものです。 SecLists は、セキュリティ テスターが必要とする可能性のあるすべてのリストを便利に提供することで、セキュリティ テストをより効率的かつ生産的にするのに役立ちます。リストの種類には、ユーザー名、パスワード、URL、ファジング ペイロード、機密データ パターン、Web シェルなどが含まれます。テスターはこのリポジトリを新しいテスト マシンにプルするだけで、必要なあらゆる種類のリストにアクセスできるようになります。

PhpStorm Mac バージョン

PhpStorm Mac バージョン

最新(2018.2.1)のプロフェッショナル向けPHP統合開発ツール

AtomエディタMac版ダウンロード

AtomエディタMac版ダウンロード

最も人気のあるオープンソースエディター

ZendStudio 13.5.1 Mac

ZendStudio 13.5.1 Mac

強力な PHP 統合開発環境