Hai*_*ood 35 php function tostring
我正在编写一个调试方法.
我拥有的是什么
if(is_xxx($item)){
//echo output info for type
}
what I want to do at the end is
if(can_be_string($item))
echo $item;
Run Code Online (Sandbox Code Playgroud)
有can_be_string类型功能吗?
Dec*_*ler 29
好的,编辑,结合了Michiel Pater的建议(现在他的答案已经消失)和@ eisberg的建议.无论如何,settype都会true带着物体回归.
if(
( !is_array( $item ) ) &&
( ( !is_object( $item ) && settype( $item, 'string' ) !== false ) ||
( is_object( $item ) && method_exists( $item, '__toString' ) ) )
)
{
echo $item;
}
Run Code Online (Sandbox Code Playgroud)
Rol*_*sen 25
为了完成...
http://www.php.net/is_scalar,自PHP 4起可用; 关于它没有一个单词.. :)
mpe*_*pen 14
怎么样
function can_be_string($var) {
return $var === null || is_scalar($var) || (is_object($var) && method_exists($var, '__toString'));
}
Run Code Online (Sandbox Code Playgroud)
Max*_*nce 10
通过测试快速而肮脏的实现:
function canBeString($value)
{
if (is_object($value) and method_exists($value, '__toString')) return true;
if (is_null($value)) return true;
return is_scalar($value);
}
class MyClass
{
}
$object = new MyClass();
var_dump(canBeString($object)); // bool(false)
class MyClassWithToString
{
public function __toString()
{
return 'foo';
}
}
$objectWithToString = new MyClassWithToString();
var_dump(canBeString($objectWithToString)); // bool(true)
var_dump(canBeString(1)); // bool(true)
echo (string)1 . "\n";
var_dump(canBeString(false)); // bool(true)
echo (string)true . "\n";
var_dump(canBeString(1.0)); // bool(true)
echo (string)1.0 . "\n";
var_dump(canBeString(null)); // bool(false)
var_dump((string)null); // string(0) ""
Run Code Online (Sandbox Code Playgroud)