(awalnya diposting oleh leepowers dalam pertanyaannya)
Pesan kesalahan membingungkan karena satu alasan besar:
Nama tipe primitif tidak disediakan dalam PHP
Berikut ini adalah semua deklarasi kelas yang valid:
class string { }
class int { }
class float { }
class double { }
Kesalahan saya adalah berpikir bahwa pesan kesalahan merujuk semata-mata ke tipe primitif string - kata 'instance' seharusnya membuat saya berhenti. Contoh untuk menggambarkan lebih lanjut:
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')]);
Keluaran:
$ s1 - string primitif? ya - string misalnya? tidak
$ s2 - string primitif? contoh tanpa string? Iya
Dalam PHP dimungkinkan untuk stringmenjadi stringkecuali ketika itu sebenarnya a string. Seperti bahasa apa pun yang menggunakan konversi tipe implisit, konteks adalah segalanya.