PHPのisset関数で困らない!5分でわかる類似関数比較

あなたはPHPで開発作業する時に、デバックの作業で変数の中身や関数の結果を調べるなど、開発に思ったよりも時間がかかっていることで悩んでいませんか?

この記事を読むことで、あなたは、PHPのisset関数とそれに類似した関数を知り、変数の中身や関数の結果を知ることができ、PHPでの開発の効率が向上します。実際に私は、正確に、早くデバック作業をすることができるようになりました。

TECH::NOTE(テックノート)は、未経験から最先端のテクノロジー人材へTECH::CAMP(テックキャンプ)、10週間でエンジニア転職実現までサポートを行う(転職できなかったら全額返金)TECH::EXPERT(テックエキスパート)、これらのサービスを運営する株式会社divのオウンドメディアです。

アイキャッチ画像出典: PHP.net

今回は、自分が比較的に長く勉強しているPHP(webアプリに使われる言語の一種)という言語で、isset関数という関数について、記事を書いていきます。

isset関数の定義

php-7-features-that-will-woo-every-php-fan

出典: php.gang.com

isset関数ってそもそも何?

Isset 関数 – 変数がセットされていること、そしてnullではないことを検査する。(PHP documentationより。) 返す値は、true(真)かfalse(偽) のboolean型である。

文章で説明しても、理解が深まらないので、使い方を紹介します。

isset.php
?php
<strong><span style="color: #339966;">// 変数に値をいれてみる。</span></strong>
$hoge = 'hoge';
if(isset($hoge)) // if(Isset($hoge) == true)という書き方の省略
{
echo "変数hogeには、文字列hogeが入っている。\n" ;
}
else
{
echo "変数hogeには、nullが入ってる。\n";
}

<strong><span style="color: #339966;">// 今度は、変数にnullを代入。</span></strong>
$hoge2 = null;
if(isset($hoge2))
{
echo "変数hoge2には、文字列hogeが入っている。\n";
}
else
{
echo "変数hogeには、nullが入っている。\n";
}

出力結果

/data/practice/php (*'-') php isset.php	
変数hogeには、文字列hogeが入っている。
変数hoge2には、nullが入っている。

isset関数は他のPHPの関数と比べて、比較的わかりやすく、変数に値が入っているかnullが入っているかによって、true(真)かfalse(偽)を返すものです。 基本的な使い方は、上記ですが、もう少し詳しい使い方を他の関数と比べながら、見ていきたいと思います。

isset関数と類似している関数と比べてみよう。

ここで、isset関数と類似している数の中身に対して、検査していく関数とisset関数を比べてみたいと思います。

isset関数 と empty関数の違い

empty関数の定義

download 

出典: Quantum3d

empty関数は、変数が空がどうかを検査する関数です(PHP documentationより)。返す値は、isset関数と一緒で、true(真)かfalse(偽)のboolean型です。

それでは、使い方を見てみましょう。

?php

$hoge = 'hoge';

if(empty($hoge))
{
echo "変数hogeはからである";
}
else
{
echo "変数hogeは空ではない。";
}

$hoge2 = '';

if(empty($hoge2))
{
echo "変数hoge2は空である";
}
else
{
echo "変数hoge2は空ではない。";
}

実行結果

/data/practice/php (*'-') php empty.php
変数hogeは空ではない。
変数hoge2は空である。

変数hogeの中身が空であるかそうではないかそれで、empty関数は、trueかfalseを返します。上のhogeは、中身があるので、false、下のhogeは、中身がないので、trueとなり、それに対する実行結果が出力されます。

ここで、is_set関数とempty関数の違いは、変数がnullか何も入っていないかです。ここで、一言言うべきことがあり、nullと空文字は、違うため、注意が必要です。詳しくは、一番下の表をご覧いただけると幸いです。

isset関数 と is_null関数の違い

timthumb

出典: Kelly Dun

is_null関数の定義

is_null関数は、指定した変数がnullかどうか調べる関数です。完璧にisset関数の逆のことをする関数です。使い方は下記になります。

?php

$hoge = 'hoge';

if(is_null($hoge))
{
echo "変数hogeには、nullが入っている。\n";
}
else
{
echo "変数hogeには、nullが入っていない。\n";
}

$hoge2 = null;

if(is_null($hoge2))
{
echo "変数hoge2には、nullが入っている。\n";
}
else_
{
echo "変数hoge2には。nullが入っていない。\n";
}

実行結果

/data/practice/php/technote (*'-') php is_null.php
変数hogeには、nullが入っていない。
変数hoge2には、nullが入っている。

isset関数との違いは、trueとfalseの結果を出す対象が逆ということです。isset関数なら、nullだと、false、is_null関数なら、nullだとtrueが返ってきます。

isset関数 と array_key_exists関数の違い

Array_key_exists関数は、指定したキーが配列のなかにあるかを調べる関数です。isset関数が指定した変数の中身をみる一方で、array_key_exists関数は、配列のキーを確認する関数です。さっそく使い方を見てみましょう。

array_key_exists関数の定義

php4

出典: Edward Designer

array_key_exists.php

?php
$search_array = array('first' = 'first_result', 'second' = 'second_result');

if(array_key_exists('first', $search_array))
{
echo 'この配列にはfirstというキーがあります。';
}
else
{
echo 'この配列には、firstというキーはありません。';
}

実行結果


/data/practice/php (*'-') php array_key_exists.php

この配列にはhogeというキーがあります。

様々な内部関数を見てきましたが、それぞれをisset関数と比較しただけでは、理解度はあまり深まったとは言えないと思います。なので、変数を一定にして、それぞれの関数を使い、違いを見てみましょう。

isset関数の中身が…だったら?

question-mark_318-52837

出典: Freepik

では、早速、様々な関数を紹介してきたなかで、それぞれの関数を使い、理解度を深めるために、結果を比べてみましょう。

変数が空文字だったら?

var_noletter.php

?php

$hoge = '';

var_dump(isset($hoge));

var_dump(empty($hoge));

var_dump(is_null($hoge));


出力結果


/data/practice/php/technote (*'-') php var_noletter.php
bool(true)
bool(true)
bool(false)

今回は、var_dump関数という関数を使って、変数の中身を調べました。

変数が0だったら…?

では、今度は、変数の中身を0にしてみましょう。

var_zero.php

php

$zero = 0;
var_dump(isset($zero));

var_dump(empty($zero));

var_dump(is_null($zero));

出力結果


/data/practice/php/technote (*'-') php var_zero.php

bool(true)
bool(true)
bool(false)

変数が配列だったら…?

var_noarray.php

?php

$array = array();

var_dump(isset($array));

var_dump(empty($array));

var_dump(is_null($array));

出力結果


/data/practice/php/technote (*'-') php var_noarray.php

bool(true)
bool(true)
bool(false)

結局、isset関数の結果が、falseのときは、変数がどうなっているとき?

定義に沿っている言い方かもしれませんが、isset関数はnullが入っているときにfalseを返します。nullとは、何もないという意味です。ここで、注意して欲しいことは、空の値を変数に代入すると何もない状態は違います。

変数の中身が、初期化(=中身が空なとき)でも変数に値が代入されているのでnullとはなりません。isset関数とempty関数の使いどきもそのような観点で変化があるので、状況によっての使いわけが必要になります。

三項演算子を使った、isset関数の使い方

便利な三項演算子の使い方

ここで、ちょっと話を変えて、三項演算子を紹介していきます。三項演算子とは、条件式の書き方の1つです。書式は


条件式 ? 式1: 式2

条件式が真の場合は、式1が実行され、偽の場合は式2が実行されます。

文章に書いても理解を得るのが難しいと思われるので、具体例を紹介していきます。

tenary_operator.php

?php

$hoge = 'hoge';
$fuga = isset($hoge) ? $hoge : null;

echo $fuga;

$hoge2 = 'hoge2';
if(isset($hoge2))
{
$fuga2 = $hoge2;
}
else
{
$fuga2 = null;
}

echo $hoge2;

実行結果

/data/practice/php/technote (*'-') php ternary_operator.php
hogehoge2

変数$hogeには、変数が入っている(isset関数の結果が真である)ため三項演算子の式1が実行されます。それにより、変数fugaには$hogeの値つまりhogeが代入され実行結果はhogeとなります。

三項演算子を利用すると、下のようにif/else文を使う必要がないのでPHPを書き慣れた人は三項演算子を使うことをお勧めします。


$hoge2 = 'hoge2';
if(isset($hoge2))
{
$fuga2 = $hoge2;
}
else
{
$fuga2 = null;
}

echo $hoge2;

isset関数の変数を複数にするのって、あり?なし?

ありです。何回も$isset関数を書かなくても大丈夫になり効率があがるのでぜひ使ってください。

?php

$hoge = 'hoge';
$hoge2 = 'hoge2';

var_dump(isset($hoge));

var_dump(isset($hoge, $fuga));

出力結果


/data/practice/php/technote (*'-') php multiple_isset.php
bool(true)
bool(false)

ここで、気をつけて欲しいのは変数の全てに値が入っていないとfalseが返ってしまうことです。ですので、どの変数にnullが入っているかは下のように調べなければなりません。

?php 
$hoge = 'hoge'; 
$hoge2 = 'hoge2'; 
var_dump(isset($hoge)); 
var_dump(isset($hoge, $fuga)); 
$hoge3 = 'hoge3'; 
$hoge4 = null; 
$hoge_array = compact("hoge", "hoge2", "hoge3", "hoge4"); 
foreach($hoge_array as $key = $value)
{
echo '変数' .$hoge_array[$key] . 'は' . (isset($hoge_array[$key])). 'で、' 
. '中身は、' . $value . "です。\n";
}

出力結果

/data/practice/php (*'-') php multiple_isset.php
bool(true)
bool(false)
変数hogeは1で、中身は、hogeです。
変数hoge2は1で、中身は、hoge2です。
変数hoge3は1で、中身は、hoge3です。
変数はで、中身は、です。

もう一つ、大事なことがあります。isset関数は、boolean型を返すのでint型だと真のときに1を返します。

上記の方法は、自分もアプリを作成していて、この配列のこのキーには何が入っているのかと確認するときのデバックの作業でもよく使うのでぜひ使ってみてください。

さいごに

isset関数は、変数の中身を確かめる関数の1つですのでデータがしっかり転送されたかを確認する関数ですので、比較的に使用頻度が高くなります。

PHPの勉強を始める/PHPで開発する/PHPで開発経験が長い人の誰でも、復習しておくと開発作業が進むかと思われます。

isset関数だけではなく、その他の関数や自分が業務で使っている言語の内部関数を定期的に調べておくと技術も向上するのかなと思います。

 

こちらの記事もご参考ください。

【Webプログラマー必見言語】エンジニアがおすすめする厳選PHP入門書

 

TECH::CAMPについて

TECH::CAMPは、講義形式で知識だけを学ぶのではなく、実際にサービスを作りながら実践的に学んでいきます。

TECH::CAMPならプログラミングが、なんとなく分かるではなく、一人で出来るようになります。

また、質問し放題のため、分からないところを質問しすぐに解決することで、どんどん新たなスキルを身につけることができます。

この機会にプログラミングを学びませんか?

banner_techcamp

 

TECH::CAMPについて

TECH::CAMPはあなたを最先端のスキルと知識を身に着けたテクノロジー人材に変えます。
講義形式で知識だけを学ぶのではなく、実際にサービスを作りながら実践的に学んでいきます。
独学では、わからないことを調べることに膨大な時間がかかりますが、TECH::CAMPは教室やオンラインでメンター(講師)へ質問し放題。

プログラミングが「なんとなく分かる」ではなく「形になるものを作る」にコミットします。
プログラミング以外もデザインやVR・3Dゲームなどコンテンツが多数あり、月額で全て受講可能です。無料プログラミング体験会・説明会のお申し込みはこちら
お待ちしています!

梅木綾佑 梅木綾佑が書きました
  • このエントリーをはてなブックマークに追加
  • Pocket
  • LINEで送る

SNSでもご購読できます。

  • カテゴリー
  • このエントリーをはてなブックマークに追加
    記事をシェア→