【PHP8.x】is_string関数の使い方

is_string関数の使い方について、初心者にもわかりやすく解説します。

作成日: 更新日:

基本的な使い方

is_string関数は、指定された変数が文字列型であるかどうかを判定する関数です。この関数は、検査したい変数ひとつを引数として受け取ります。引数として渡された変数が実際に文字列型であればtrue(真)を返し、文字列型でなければfalse(偽)を返します。

PHPは動的な型付け言語であるため、変数の型がプログラムの実行中に変わることがあります。そのため、特定の処理を行う前に、変数が意図したデータ型であることを確実に確認する必要がある場面が多く存在します。is_string関数は、このような状況で、変数が文字列であるかを安全にチェックするために使用されます。

例えば、Webアプリケーションでユーザーからの入力を受け取った際、それが期待する文字列データであるかを検証する場合や、関数やメソッドの引数として渡された値が確実に文字列であることを保証したい場合などに活用されます。この型チェックを行うことで、予期せぬデータ型によるエラー(例えば、文字列として扱えない値を文字列操作しようとするなど)を防ぎ、プログラムの安定性と信頼性を高めることができます。

is_string関数は、データ型の確認を簡潔に行うための基本的な機能であり、PHPプログラミングにおいて非常に頻繁に利用される重要な関数の一つです。

構文(syntax)

1<?php
2
3$value = "Hello World";
4
5if (is_string($value)) {
6    echo "変数は文字列です。";
7} else {
8    echo "変数は文字列ではありません。";
9}
10
11?>

引数(parameters)

mixed $value

  • mixed $value: 文字列かどうかを判定したい値

戻り値(return)

bool

引数として渡された値が文字列型である場合に true を返します。それ以外の場合は false を返します。

サンプルコード

is_string() で厳密な文字列型を判定する

1<?php
2
3/**
4 * is_string() 関数の使い方をデモンストレーションします。
5 * この関数は、指定された変数が厳密に文字列型であるかをチェックします。
6 * 'stringable' (PHP 8のStringableインターフェースを実装または__toString()メソッドを持つオブジェクト)
7 * とは異なる点に注意してください。is_string() は厳密な型チェックを行います。
8 *
9 * @param mixed $value チェック対象の値
10 * @return void
11 */
12function checkStringType(mixed $value): void
13{
14    // 変数の実際の型を取得
15    $type = gettype($value);
16    // is_string() 関数で文字列型であるかを確認
17    $isStringResult = is_string($value);
18
19    // デモンストレーション用に値を整形して表示
20    $displayValue = match (true) {
21        is_string($value) => "'" . $value . "'",
22        is_int($value), is_float($value) => (string)$value,
23        is_bool($value) => $value ? 'true' : 'false',
24        is_array($value) => 'array',
25        is_object($value) => get_class($value) . ' object',
26        is_null($value) => 'NULL',
27        default => 'unknown type',
28    };
29
30    echo "値: {$displayValue} (gettype(): '{$type}') -> is_string() の結果: " . ($isStringResult ? 'true' : 'false') . PHP_EOL;
31}
32
33// --- デモンストレーション ---
34
35// 1. 文字列型の変数
36$stringValue = "Hello, PHP!";
37// 2. 整数型の変数
38$integerValue = 123;
39// 3. 浮動小数点数型の変数
40$floatValue = 1.23;
41// 4. 真偽値型の変数
42$booleanValue = true;
43// 5. 配列型の変数
44$arrayValue = ['a', 'b'];
45// 6. NULL値
46$nullValue = null;
47
48// 7. PHP 8 で導入された Stringable インターフェースを実装するオブジェクトの例
49//    このオブジェクトは文字列に変換可能ですが、データ型は 'object' です。
50$stringableObject = new class implements Stringable {
51    public function __toString(): string
52    {
53        return "私はStringableオブジェクトです。";
54    }
55};
56
57echo "--- is_string() 関数のデモンストレーション ---" . PHP_EOL;
58
59// 各変数をチェックし、is_string() の結果を出力
60checkStringType($stringValue);
61checkStringType($integerValue);
62checkStringType($floatValue);
63checkStringType($booleanValue);
64checkStringType($arrayValue);
65checkStringType($nullValue);
66checkStringType($stringableObject); // Stringableオブジェクトであっても、is_string() は false を返す
67
68echo PHP_EOL;
69// 補足:
70// is_string() は変数のデータ型が 'string' であるかのみを判定します。
71// PHP 8 で導入された Stringable インターフェースを実装する、または __toString() メソッドを持つオブジェクトは、
72// 文字列に変換可能 (stringable) ですが、その型は 'object' であり 'string' ではないため、
73// is_string() は false を返します。
74// オブジェクトが文字列に変換可能であるかをチェックするには、PHP 8 以降では `instanceof Stringable` で確認するのが一般的です。
75

PHPのis_string()関数は、指定された変数が厳密に文字列型であるかどうかを判定します。この関数は引数として任意の型の値を受け取り、その値が文字列型であればtrue、そうでなければfalseを真偽値で返します。

提供されたサンプルコードでは、checkStringType関数がさまざまなデータ型の値(文字列、整数、真偽値、配列、NULLなど)に対してis_string()関数を適用した場合の結果を具体的にデモンストレーションしています。

特に注目すべきは、「stringable」なオブジェクトとの違いです。PHP 8以降で導入されたStringableインターフェースを実装する、または__toString()メソッドを持つオブジェクトは、文字列に変換可能(stringable)ですが、is_string()はこれらのオブジェクトに対してfalseを返します。これは、is_string()が変数の実際のデータ型が「string」であるかを厳密にチェックするためです。オブジェクトの型はあくまで「object」であり、たとえ文字列として扱えても、データ型そのものは文字列ではありません。

したがって、変数のデータ型が厳密に文字列であるかを確認したい場合にis_string()を使用し、オブジェクトが文字列に変換可能であるかを確認したい場合は、PHP 8以降ではinstanceof Stringableを使用するのが一般的です。

is_string()関数は、変数のデータ型が厳密に文字列であるかを確認します。注意点として、数値や真偽値など、画面に表示でき文字列のように見える値でも、データ型が異なるためfalseを返します。特に、PHP 8で導入されたStringableインターフェースを実装したオブジェクトは、文字列に変換可能ですがデータ型はあくまでオブジェクトです。そのため、is_string()の結果はfalseになります。もし、オブジェクトが文字列として扱えるかを判定したい場合は、is_string()の代わりにinstanceof Stringableのような別の方法で確認する必要があります。この関数は値の内容ではなく、純粋な「型」だけを判定するものと覚えておきましょう。

PHP is_string() で null かどうか判定する

1<?php
2
3/**
4 * is_string関数の基本的な使用例と、null値に対する動作を示すサンプルコード。
5 *
6 * このスクリプトは、異なる型の変数に対してis_string関数を適用し、
7 * それぞれの結果(trueまたはfalse)を表示します。
8 * 特に、null値が文字列とは見なされないことを明確にします。
9 */
10
11// サンプルデータとして、いくつかの異なる型の変数を定義します。
12$stringExample = "Hello, world!"; // 文字列型の変数
13$integerExample = 123;             // 整数型の変数
14$booleanExample = true;            // 真偽値型の変数
15$nullExample = null;               // null値の変数 (キーワードに関連)
16$emptyStringExample = "";          // 空文字列の変数 (これも文字列型)
17
18echo "--- is_string() 関数の結果 ---" . PHP_EOL;
19
20// 各変数に対して is_string 関数を適用し、結果を表示します。
21echo "変数 \$stringExample ('" . $stringExample . "') は文字列ですか?: " . (is_string($stringExample) ? 'はい' : 'いいえ') . PHP_EOL;
22echo "変数 \$integerExample (" . $integerExample . ") は文字列ですか?: " . (is_string($integerExample) ? 'はい' : 'いいえ') . PHP_EOL;
23echo "変数 \$booleanExample (" . ($booleanExample ? 'true' : 'false') . ") は文字列ですか?: " . (is_string($booleanExample) ? 'はい' : 'いいえ') . PHP_EOL;
24echo "変数 \$nullExample (null) は文字列ですか?: " . (is_string($nullExample) ? 'はい' : 'いいえ') . PHP_EOL; // nullに対する動作
25echo "変数 \$emptyStringExample ('" . $emptyStringExample . "') は文字列ですか?: " . (is_string($emptyStringExample) ? 'はい' : 'いいえ') . PHP_EOL;
26
27echo "------------------------------" . PHP_EOL;
28
29// is_string関数の戻り値はboolean型です。
30// var_dump() を使用すると、値とその型を詳しく確認できます。
31echo "is_string() の戻り値の型を確認:" . PHP_EOL;
32var_dump(is_string($stringExample)); // 文字列の場合の戻り値
33var_dump(is_string($nullExample));   // nullの場合の戻り値

PHPのis_string関数は、指定された変数が文字列型であるかを判定するために使用されます。この関数は、引数$valueとして任意の型の値を受け取ります。そして、もし$valueが文字列型であればtrue(真)、そうでなければfalse(偽)という真偽値boolを戻り値として返します。

このサンプルコードは、様々なデータ型の変数に対してis_string関数を適用し、その結果を示しています。例えば、"Hello, world!"のような明らかな文字列や、""のような空の文字列に対してはtrueが返されます。これは、空文字列もPHPでは有効な文字列型として扱われるためです。

一方、123のような整数、trueのような真偽値、そしてキーワードにもあるnull値に対してはfalseが返されます。is_string関数はnullを文字列とは見なさないため、この点は特に重要です。

コードの最後では、var_dump関数を使ってis_stringの戻り値が実際にboolean型であることを確認しています。このようにis_string関数は、プログラムで変数の型を正確にチェックし、予期せぬエラーを防ぐための基本的なツールとして活用されます。

is_string関数は、引数が厳密に文字列型であるかを判定します。初心者が間違いやすい点として、null値は文字列とは見なされず、falseを返しますのでご注意ください。また、数値や真偽値も文字列型ではないため、同様にfalseを返します。一方で、""(空文字列)は文字列型ですので、trueと判定されます。この関数はPHPの型変換を行わず、引数の現在の型をそのまま確認します。戻り値は必ずtruefalseの真偽値(bool型)となりますので、if文などの条件分岐に直接利用できます。変数の値が本当に文字列であることを確認したい場合に、安全かつ正確に利用できる関数です。

関連コンテンツ

関連プログラミング言語

【PHP8.x】is_string関数の使い方 | いっしー@Webエンジニア