is_string
(PHP 4, PHP 5, PHP 7, PHP 8)
is_string — 检测变量是否是字符串
描述
如果 var
是 string 则返回 true
,否则返回 false
。
参见 is_bool()、is_int()、is_integer()、is_float()、is_real()、is_object() 和 is_array()。

User Contributed Notes 3 notes
laszlo dot heredy shift-two gmail etc ¶
8 years ago
Using is_string() on an object will always return false (even with __toString()).
<?php
class B {
public function __toString() {
return "Instances of B() can be treated as a strings!\n";
}
}
$b = new B();
print($b); //Instances of B() can be treated as a strings!
print(is_string($b) ? 'true' : 'false'); //false
?>
Peter Barney ¶
4 years ago
As noted earlier, is_string() returns false on an object that has a __toString() method. Here is a simple way to do a check that will work:
<?php
// determine if the passed argument can be treated like a string.
function is_stringy($text) {
return (is_string($text) || (is_object($text) && method_exists($text, '__toString' ));
}
jcours at numifinancial dot com ¶
1 year ago
is_string() of an integer or float returns false, so it might be useful to include an is_numeric() when checking if a value is stringy:
<?php
function is_stringy($val) {
return (is_string($val) || is_numeric($val)
|| (is_object($val) && method_exists($val, '__toString')));
}
?>
Test code (which should print "vector N OK" for each test vector):
<?php
foreach ([[NULL, false], [false, false], [true, false],
[0, true], [[], false], [0.1, true], ["x", true],
["", true], [new Exception("x"), true]] as $idx => $vector) {
list ($val, $expected) = $vector;
if (is_stringy($val) != $expected) {
print ("mismatch at $idx\n");
var_dump($val);
} else {
print ("vector $idx OK\n");
}
}
?>