【プログラミング学習】PHPで出てくる、紛らわしいクエスチョンマーク(?)について調査した
| 更新: 2024/08/18 | 2703文字
今回は、管理人がPHPでのライブラリ解析や自作アプリケーション作り中に遭遇した、『使い始めのうちは紛らわしい・わけがわからないクエスチョンマーク(?)』についてまとめてみます。中にはバージョン8以降追加の新しめのもので、最近まで知らなかった(笑)ものもありました。早速確認していきましょう。
目次
基本的・いつも使うやつ~開始タグ/終了タグ
<? echo '〇〇〇'; ?>(短縮形)
紛らわしいのを述べる前に、PHPでクエスチョンマーク、基本的・いつも使うやつをおさえておきます。それは開始タグ/終了タグ(<?php~?>)として使われる場合です。
このほかにも短縮形があるんですが、php.ini設定の『short_open_tag』が有効になっていないと使えないようです。ためしにpaiza.io(設定が有効になってない?)でやってみたところ、短縮形だとphpプログラムと認識されず文字で出力されてしまいました。
PHP タグ(PHPマニュアル)
https://www.php.net/manual/ja/language.basic-syntax.phptags.php
三項演算子(式1 ? 式1がtrueの場合:式1がfalseの場合)
PHPだけでなく、他の言語でもちょくちょく見かける三項演算子。『式1 ? 式1がtrueの場合:式1がfalseの場合』という形式です。マニュアルに載ってたコードまんまですけど、上の例では$_POST内のvarがemptyかどうか判定して、emptyがtrue(空である)のときは文字列『空です』が変数$varにセット、という感じです。
この構文はいろんなところで見受けられるので、おさえておくとよいでしょう。
三項演算子(PHPマニュアル)
https://www.php.net/manual/ja/language.operators.comparison.php#language.operators.comparison.ternary
Null合体演算子(??)
『〇〇??◇◇』みたいなクエスチョンマーク2個の式。管理人はあんまり使ったことなかったんですけど、Null判定に使えます。例えば・・・
この例だと、フォームから値を受け取ったりしたわけでないので$_POSTがセットされておらず、『配列キーが未定義』みたいな内容の警告が出ます。セットされてるかどうかの判定を入れます。
if文でもよいんですけど、上記のNull合体演算子を使って、こんな風に書くこともできます。
Null合体演算子 (PHPマニュアル)
https://www.php.net/manual/ja/language.operators.comparison.php#language.operators.comparison.coalesce
nullableな型
PHPマニュアルで『PHP 7.0.x から PHP 7.1.x への移行』の部分で紹介されていた機能です。以下のように・・
function test001(?string $var)
{
return $var . 'てすとっす';
}
$var = null;
echo test001($var);
?>
『?string $var』のように、型の指定に?マークをくっつけた形で書くようです。null渡すとエラーになる状況を、ちょっとpaiza.io使って作ってみました。
エラーになる例です。『受け取る変数をstring型指定したのに、null渡すとエラー』という感じですね。エラーメッセは『Uncaught TypeError: test001(): Argument #1 ($var) must be of type string, null given』が表示されました。
『?』をつけてnullable型で書いた例です。 この場合はnullを渡しても大丈夫になります。
nullableな型(PHP 7.0.x から PHP 7.1.x への移行)
https://www.php.net/manual/ja/migration71.new-features.php
nullsafe演算子『?->』
PHP8.0.0以降のバージョンで使える機能。これは管理人は使ったことが無くて、最近知りました。上のnullableに似ていますが、プロパティやメソッドにアクセスするときに使えるそうです。オブジェクト型でプログラムを書きつつ、プロパティ/メソッドのnull判定は簡略化したい、みたいな感じでしょうか。
nullsafe メソッドとプロパティ(phpマニュアル)
https://www.php.net/manual/ja/language.oop5.basic.php#language.oop5.basic.nullsafe
あとがき・まとめ
- PHPの『?』マークは、基本的に開始/終了タグ
- 三項演算子やNull合体演算子などにも使われている
- 7とか8のバージョンから、nullable・nullsafeとしても使われている
まとめると、こんなところでしょうか。他にも自分の知らないところであるかもしれませんので、今後も調査・学習を行っていきます。
【カテゴリ】- PHP
【タグ】-