PHPのis_null、empty、issetの違い

Blog Admin
Blog Admin

ウェブサイトのソースに出力する内容をPHPの関数で切替えたいというお話です。
PHPの関数を使って、WordPressの関数で取得した値を判定して処理を切替えます。

プログラミング

PHP
「変数に何もなかったら」
の違い

このサイトではないのですが。
すでに存在するサイトでは、過去にいろいろと場当たり的な設定があるものですよね。困ります。

どういった設定になっているのか紐解く方が大変なので、見えている状態に合わせて、場当たり的な設定を施すのでした。。いいのかな。。
いくつかの値を確認して、優先順に沿って値を出力します。

descriptionを出力したいだけなのに

SEO対策ということで、descriptionを出力したいということなのですが。
すでにいくつかのカスタム投稿タイプが存在し、それぞれでカスタムフィールドや抜粋の使い方がバラバラで、長い物に巻かれることになりました。

WordPress

カスタムフィールドがあれば、その内容をdescriptionにします。
カスタムフィールドがなければ、抜粋から取得することにして、抜粋に何もなければ、本文の冒頭部分を取得してこようというわけです。
言うは易し。

カスタム投稿タイプごとに事情が異なり、例外処理もけっこうあるのでした。
ロジックを整理するだけでもまあまあな時間を要しました。。(愚痴ですね。。)

カスタムフィールドと抜粋を確認したい

WordPress

いろいろなパターンがありましたが、おおむねのところで。
カスタムフィールドの存在確認は、返り値がNULLかどうかで判定する方法にしました。(もともとあったロジックを活用したということでもあります。)
存在確認とは別に、値が入っているかどうかの確認も必要なわけです。

おおむね、以下のようなことになりました。

$custom_fields = get_post_custom();
if is_null( $custom_fields ) {
	// カスタムフィールドが設定されていない場合の処理
	$description = (略)
} else {
	// カスタムフィールドがある場合の処理
	$description = (略)
}
if empty( $description ) {
	// 取得した値が空っぽの場合の処理
	$description = (略)
}

get_post_custom() は、カスタムフィールドが設定されていないとNULLを返します。(今回はカスタムフィールドが設定されている = description がある というロジックが成立したのでコードがシンプルでした。)
ただし、取得した値に対してはさらなる確認を入れました。
たとえば、抜粋を取得(get_the_excerpt())した場合、抜粋に1文字も書かれていなければ、NULLではなく空っぽが返ってきます。この判定が今回のキモです。

PHPの関数を利用して判定しています。
似たようなものが3つあるようで、それぞれで結果が異なるので、仕様を確認して使いました。

種類未宣言NULL0‘hoge’array()array(‘a’)
is_nullFALSETRUEFALSEFALSEFALSEFALSEFALSE
emptyTRUETRUETRUETRUEFALSETRUEFALSE
issetFALSEFALSETRUETRUETRUETRUETRUE

PHPのお勉強が進んでいきます。
こうやって賢くなっていくのですね。
どんどん上を目指しましょう。

is_null

対象がNULLかどうかを判定します。
NULLは何もない状態であって、空文字とは異なります。
配列は判定できません。

変数が宣言されていなければ判定できないのでFALSEです。

empty

PHP

対象が存在しないことを判定します。
以下のときにTRUEになります。

  • 存在していない
  • NULL
  • 空文字
  • 0

配列も対象です。
「存在していない」とは、変数が宣言されていない場合もしくはunsetされた場合です。

isset

変数が宣言されていてNULLではないことを判定します。
結果として、is_nullの反対になるということです。

参考: 公式マニュアル

公式マニュアルは見ておきましょう。

この投稿を書いたのは・・・
Blog Admin

ガジェットが大好きで、ほぼ毎月何かしら調達しております。
無駄遣い扱いされたくないのと、何かの役に立つかと思い、記録を書くことにしたのでした。

お出かけのときには、スマホを複数台とタブレットとパソコンを持ち歩きます。
両手首にはスマートウォッチです。
こんなスタイルで生活している中での備忘録を書いています。

「Blog Admin」をフォローしてみる
ブログ関連
「Blog Admin」をフォローしてみる

ご意見やご感想などお聞かせください! コメント機能です。

タイトルとURLをコピーしました