(もともと彼の質問でleepowersによって投稿されました)
エラーメッセージは、1つの大きな理由で混乱しています。
プリミティブ型名はPHPでは予約されていません
以下はすべて有効なクラス宣言です。
class string { }
class int { }
class float { }
class double { }
私の間違いは、エラーメッセージが文字列プリミティブ型のみを参照していると思っていた-「インスタンス」という単語で一時停止したはずだ。さらに説明する例:
class string { }
$n = 1234;
$s1 = (string)$n;
$s2 = new string();
$a = array('no', 'yes');
printf("\$s1 - primitive string? %s - string instance? %s\n",
$a[is_string($s1)], $a[is_a($s1, 'string')]);
printf("\$s2 - primitive string? %s - string instance? %s\n",
$a[is_string($s2)], $a[is_a($s2, 'string')]);
出力:
$ s1-プリミティブ文字列?はい-文字列インスタンス?番号
$ s2-プリミティブ文字列?いいえ-文字列インスタンス?はい
PHPでは、実際にである場合を除いてstring
、string
をにすることができstring
ます。暗黙の型変換を使用する言語と同様に、コンテキストがすべてです。