質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

88.79%

ifによる条件の評価ついて

解決済

回答 3

投稿

  • 評価
  • クリップ 0
  • VIEW 334

toll_tree

score 35

「if($err)」こちらの書き方なのですが、$errが配列であり、要素が一つの空文字の場合、「FALSE」を返すと思うのですが、
「if(!$err)」こちらの書き方では、「TRUE」とは判定されません。
否定演算子により、TRUEになるかと思うのですが、何故、FALSEとなってしまうのでしょうか?

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 過去に投稿した質問と同じ内容の質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 3

checkベストアンサー

+4

$errが配列であり、要素が一つの空文字の場合、「FALSE」を返すと思うのですが、

返しません。PHPでFALSEとみなされる値は、

  • 00.0-0.0
  • ''(空文字列)、'0'
  • FALSE
  • NULL
  • []空の配列)
  • 空のタグから作成された SimpleXML オブジェクト

だけで、['']含まれません

booleanへの変換(PHPマニュアル)

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2019/04/25 19:18

    NaNがtruthyというのはちょっと意外でした。

    https://3v4l.org/cospV

    キャンセル

  • 2019/04/25 20:27

    ご回答ありがとうございます
    空の配列では、FALSEになるが、配列に格納されている、空文字は「FALSE」とはならないのですね...
    勘違いしていました...

    キャンセル

+3

命題が再現できません

if([1,2]) print 1;
if([1,2,null]) print 2;
if([null]) print 3;
if([""]) print 4;
if([false]) print 5;
if([0]) print 6;
if([]) print 7;
print "<hr>";
if(![1,2]) print 1;
if(![1,2,null]) print 2;
if(![null]) print 3;
if(![""]) print 4;
if(![false]) print 5;
if(![0]) print 6;
if(![]) print 7;

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2019/04/25 19:04 編集

    型の比較表:
    https://php.net/manual/ja/types.comparisons.php
    を参照ください

    キャンセル

  • 2019/04/25 20:35

    ご回答ありがとうございます。
    方の比較表のようなものもあるのですね。
    参考になります

    キャンセル

  • 2019/04/25 21:27

    しかし、思ったのですが、配列にnullや空文字が入っていたら、trueとなるのに、ただの変数としてnullや空文字の場合は、falseとなるのは、若干混乱する部分はありますね...

    キャンセル

+2

<?php
$err = [""];

echo gettype($err) . "\n";

if ($err) {
    echo "true\n";
} else {
    echo "false\n";
}

if (!$err) {
    echo "true\n";
} else {
    echo "false\n";
}
[実行結果]

array
true
false

まったく逆の結果になってしまいました。

一つ疑問なのですが、なぜ前半が「~を返すと思う」で、後半が「判定されません」なのでしょうか。
どちらかを確認できる状況なら、前半についても「~思う」じゃなくて、ご自分でも確認できるのでは?

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2019/04/25 20:36

    おっしゃる通りですね...
    ちょっと、混乱してて、なんか訳が分からなくなっていたので、補足的なアドバイスも頂けるかと思い、ご質問させて貰いました

    キャンセル

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 88.79%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る