チャチャッとPHPブログ

初心者むけプログラミング・PHP学習
2020/07/09

【STEP 6】PHPを学ぼう 無名関数 / 三項演算子 / NULL

STEP 6

22
「無名関数」を
知る

◎慣れてからつかおう
この内容は、はじめのうちは、特に意識しなくとも大丈夫です。そういうのもあるんだなぁ程度で構いません。すぐ理解できなくとも、前にすすめましょう。

これまでの関数は名前をつけ定義して、使ってきました。「無名関数」とは名前がついていない関数のことです。名前をつけずとも使える方法もあります。

使われる状況としてはすくないです。
使用例としては

関数名がなくても困らない状況において
関数名を付けるのを省略したいとき


だったり

「呼び出す関数名」を引数として渡して実行したいとき

に使われます。

以下のような形式でつかわれます。
サンプルをみてみましょう。

サンプルコード

<?php
$func = function($str){
    echo $str. "です";
};

$func("お寿司");
?>

実行結果

お寿司です

サンプルコードの解説

変数 $func に無名の関数 function がはいります。$func("お寿司") のような変数()で呼び出せます。

この前提の上で、次のような方法が必要な場合があり、つかわれます。コールバック関数と呼ばれます。

ここでは説明はいったん割愛して、わかりやすくすると、「関数で関数をよぶやり方」です。

サンプルをみてみましょう。

サンプルコード

<?php

function func(){
   return "ファンク!!";
}
     
function yobidashi($name){
   echo "呼んだのは ".$name(). " です";
}
     
yobidashi("func");

?>

実行結果

呼んだのは ファンク!! です

サンプルコードの解説

今までは引数にデータ(値、文字列)を渡してきました。基本は今回も同じです。今回は「関数の名前」の文字列を渡しています。

yobidashi関数では $name() となっています。ここで、渡されてきた引数の文字列である func と名前のついた関数が呼ばれています。func() がよばれ、文字が表示されました。

「呼び出す関数名を変数にいれてコントロールする」ことが必要になることがあります。
そのときにつかいます。

こんな使い方もできるよってぐらいです。はじめのうちは意識せずで構いません。関数を定義して使えば充分です。無名関数は慣れて、メリットが説明できるぐらいになってから使うといいと思います。

経験者のコードを読む機会にででくるかもしれません。内容を理解するのに役立ててください。

23
「三項演算子」を
知る

◎慣れてからつかおう
この内容は、はじめのうちは、特に意識しなくとも大丈夫です。そういうのもあるんだなぁ程度で構いません。すぐ理解できなくとも、前にすすめましょう。

条件分岐のif文については前に演習しました。

if文と同じ内容を短かくして作れる別の方法として「三項演算子」という構文があります。条件演算子とも呼ばれます。

次のような形式で書くことができます。

(条件式) ? 真の場合の式 : 偽の場合の式;

この書き方でも、If文のような条件式からの分岐処理をつくることができます。

条件分岐から変数にいれるまでを1行で書くことができます。サンプルをみてみましょう。

サンプルコード

<?php
$eigo = "80";
$kekka = $eigo > 75 ? "合格" : "がんばろう";
echo $kekka;
?>

実行結果

合格

サンプルコードの解説

2択の結果を変数にしまうことを1行で達成できます。

if文で書くこともできます。はじめのうちは、数行かかっても、わかりやすいif文で書くことができれば充分です。

経験者のコードでこの形式をみるかもしれません。読み方として役立てください。

◎普通にif文で書いたほうが簡潔で見やすい場合のほうが多いです。むりに三項演算子を使う必要はありません。こういった表記と処理の表現があると知る程度でも構いません。

24
「NULL」を
知る

変数に値を持たないことを「NULL」と表します。

変数にカラようなイメージを示すものに「0」「’’(文字なし)」「false」があります。

これらはすべて別々のデータです。そして、NULLもまた、これらとも異なります。

データが存在していない状態が「NULL」です。サンプルコードをみてみましょう。

サンプルコード

<?php

$atai;
if (is_null($atai)) {
  echo 'NULLです';
}

?>

実行結果

NULLです

サンプルコードの解説

$ataiは変数はありますが、中身がありません。$ataiはNULLになっています。

is_null()はNULLを判定する関数です。is_null関数は NULL であるため、trueを返しています。

◎NULLがでてくる例
代表的なPHPプログラムの使い方として、お問い合わせフォームがあります。HTMLフォームからの入力データを受け取り処理します。

複数の項目があるお問い合わせフォームを作るとした際、「必須で入力しなくてもよい項目」あるとします。

この「必須で入力しなくてもよい項目」は入力がないとき、NULLで渡ってきます。受け取る変数はNULLが入り、あとの処理がすすむことになります。

つづくプログラムコードで値なしの NULL を想定したコードになっていなければ、エラーが起こります。

このように、変数の値があるかないか、NULLかどうかが重要になってきます。


(補足)変数が空(カラ)ようなイメージを示すもの
変数に空(カラ)ようなイメージを示すものとして [0, "", false, NULL]ですが、厳密にはそれぞれ違うものです。

気をつけたいのがif文の条件式です。サンプルコードをみてみましょう。

サンプルコード

<?php
$atai = NULL;
if($atai == 0) echo 'A';
if($atai == "") echo 'B';
if($atai == false) echo 'C';
if($atai == NULL) echo 'D';

if($atai === 0) echo 'E';
if($atai === "") echo 'F';
if($atai === false) echo 'G';
if($atai === NULL) echo 'H';
?>

実行結果

ABCDH

サンプルコードの解説

if文の「==」は厳密に判断してくれません。すべて通しています。

「==」と「===」が混在するコードになると条件式が想定する機能をしていません。想定外の動きを起こすことになるため、注意と理解が必要です。

記事

カテゴリ

About me

Name : sin (@Sin_Programming)
ディレクター | プログラマ | プログラム開発15年目 | PHP/JavaScript/Swiftが好きです。 プログラミング初心者の方向けのPHP学習iPhoneアプリ「チャチャッとPHP」を作成しました。 PHPプログラムをムダなく学習できる方法としてまとめています。
iPhoneアプリ「チャチャッとPHP」8日で覚えるPHP