Help us understand the problem. What is going on with this article?

PHP trueになるもの・falseになるもの確認 falseを入れた配列はどっちに?

More than 1 year has passed since last update.

はじめに

PHPにどのような型があるのかは、
こちらの記事でご確認ください。
PHPの型一覧

PHPでは暗黙的な型変換が行われるため、
bool以外の型の変数でも、
必要な状況では自動的にboolに変換されます。

bool型以外の変数で、
どのような値はtrueになりどのような値はfalseになるのか確認します。

falseになるもの

わかりやすいのでまずはfalseになるものから。

  • stringの空文字列
  • stringの0
  • intの0
  • floatの0.0
  • 要素が0個のarray
  • null

がfalseとなります。

実際に検証。

$stringEmpty = '';
var_dump((bool)$stringEmpty);
// bool(false)

$stringZero = '0';
var_dump((bool)$stringZero);
// bool(false)

$int0 = 0;
var_dump((bool)$int0);
// bool(false)

$float0 = 0.0;
var_dump((bool)$float0);
// bool(false)

$arrayEmpty = [];
var_dump((bool)$arrayEmpty);
// bool(false)

$null = null;
var_dump((bool)$null);
// bool(false)

すべてfalseになりました。

trueになるもの

上記のfalseになるもの以外はすべてtrueになります。

いくつか検証してみます。

まずは普通の例。

$string = 'aaa';
var_dump((bool)$string);
// bool(true)

$int = 123;
var_dump((bool)$int);
// bool(true)

$float = 0.1;
var_dump((bool)$float);
// bool(true)

$array = ['a'];
var_dump((bool)$array);
// bool(true)

これは普通に全部trueです。
 
 
 
次はちょっと特殊な例で、
何かfalseになるものがないかいろいろ試してみます。

// 文字列のfalse
$stringFalse = 'false';
var_dump((bool)$stringFalse);
// bool(true)


// 文字列の半角スペース
$stringSpace = ' ';
var_dump((bool)$stringSpace);
// bool(true)


//マイナスのint
$intNegative = -1;
var_dump((bool)$intNegative);
// bool(true)


//falseを入れた配列
$arrayFalse = [false];
var_dump((bool)$arrayFalse);
// bool(true)

//intの0を入れた配列
$arrayZero = [0];
var_dump((bool)$arrayZero);
// bool(true)


//インスタンス
class MyClass {};
$object = new MyClass();
var_dump((bool)$object);
// bool(true)


//クロージャ
$closure = function(){};
var_dump((bool)$closure);
// bool(true)


//リソース
$resource = fopen('index.php', 'r');
var_dump((bool)$resource);
// bool(true)

全部trueになりました。

まとめ

まずは、下記のfalseになるもの一覧を把握し、
それ以外はすべてtrueになるということを把握しておく。

  • stringの空文字列
  • stringの0
  • intの0
  • floatの0.0
  • 要素が0個のarray
  • null

 
そのうえで、
ちょっと混乱しそうな
上で書いた特殊な例のようなものも把握しておくとよさそうです。

参考

独習PHP
PHP: 論理型 (boolean) - Manual

minato-naka
アジアクエスト株式会社(福岡オフィス) PHP/Laravel/AWS/Vue.js/Docker
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away