icon
Let's create! WordPressサイト制作とメンテ/エラー対応から、PHP/CSS/javascriptプログラミング、動画・音・イラスト等制作まで扱うコラム

【プログラミング学習】PHPで出てくる、紛らわしいクエスチョンマーク(?)について調査した

更新: 2024/08/18 2703文字

今回は、管理人がPHPでのライブラリ解析や自作アプリケーション作り中に遭遇した、『使い始めのうちは紛らわしい・わけがわからないクエスチョンマーク(?)』についてまとめてみます。中にはバージョン8以降追加の新しめのもので、最近まで知らなかった(笑)ものもありました。早速確認していきましょう。

基本的・いつも使うやつ~開始タグ/終了タグ

<?php echo '〇〇〇'; ?>

<? echo '〇〇〇'; ?>(短縮形)

紛らわしいのを述べる前に、PHPでクエスチョンマーク、基本的・いつも使うやつをおさえておきます。それは開始タグ/終了タグ(<?php~?>)として使われる場合です。

このほかにも短縮形があるんですが、php.ini設定の『short_open_tag』が有効になっていないと使えないようです。ためしにpaiza.io(設定が有効になってない?)でやってみたところ、短縮形だとphpプログラムと認識されず文字で出力されてしまいました。

三項演算子(式1 ? 式1がtrueの場合:式1がfalseの場合)

$var = (empty($_POST['var'])) ? '空です' : $_POST['var'];

PHPだけでなく、他の言語でもちょくちょく見かける三項演算子。『式1 ? 式1がtrueの場合:式1がfalseの場合』という形式です。マニュアルに載ってたコードまんまですけど、上の例では$_POST内のvarがemptyかどうか判定して、emptyがtrue(空である)のときは文字列『空です』が変数$varにセット、という感じです。

この構文はいろんなところで見受けられるので、おさえておくとよいでしょう。

Null合体演算子(??)

$var = $_POST[‘var’] ?? ‘defaultです’;

『〇〇??◇◇』みたいなクエスチョンマーク2個の式。管理人はあんまり使ったことなかったんですけど、Null判定に使えます。例えば・・・

この例だと、フォームから値を受け取ったりしたわけでないので$_POSTがセットされておらず、『配列キーが未定義』みたいな内容の警告が出ます。セットされてるかどうかの判定を入れます。

if文でもよいんですけど、上記のNull合体演算子を使って、こんな風に書くこともできます。

nullableな型

PHPマニュアルで『PHP 7.0.x から PHP 7.1.x への移行』の部分で紹介されていた機能です。以下のように・・

<?php
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を渡しても大丈夫になります。

nullsafe演算子『?->』

  $result = $repository?->getUser(5)?->name;

PHP8.0.0以降のバージョンで使える機能。これは管理人は使ったことが無くて、最近知りました。上のnullableに似ていますが、プロパティやメソッドにアクセスするときに使えるそうです。オブジェクト型でプログラムを書きつつ、プロパティ/メソッドのnull判定は簡略化したい、みたいな感じでしょうか。

あとがき・まとめ

  • PHPの『?』マークは、基本的に開始/終了タグ
  • 三項演算子やNull合体演算子などにも使われている
  • 7とか8のバージョンから、nullable・nullsafeとしても使われている

まとめると、こんなところでしょうか。他にも自分の知らないところであるかもしれませんので、今後も調査・学習を行っていきます。


【カテゴリ】- PHP
【タグ】-

関連記事