我正在编写调试方法。
我拥有的是
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;
是否有can_be_string
类型的功能?
答案 0 :(得分: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;
}
答案 1 :(得分:21)
为了完成...
http://www.php.net/is_scalar,自PHP 4开始提供;关于它的一句话......:)
答案 2 :(得分:13)
怎么样
function can_be_string($var) {
return $var === null || is_scalar($var) || (is_object($var) && method_exists($var, '__toString'));
}
答案 3 :(得分:9)
使用测试快速而肮脏的实现:
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) ""
答案 4 :(得分:2)
这是我能找到的最短路:
/**
* Determine if we can cast a value to a string.
*
* @param mixed $v
*
* @return bool
*/
function can_be_string($v): bool
{
return method_exists($v, '__toString') || $v === null || is_scalar($v);
}
答案 5 :(得分:2)
这个决定怎么样?
function canBeString ($value) {
try {
$value = (string) $value;
} catch (\ErrorException $exception) {
return false;
}
return true;
}
答案 6 :(得分:0)
如果is_string()对您没有帮助,那么我只能提出一些想法:
答案 7 :(得分:0)
我认为任何答案都不令人满意。
最简单的实施:
function can_be_string()
{
return is_string($value)
|| (is_object($value) && method_exists($value, '__toString'));
}
答案 8 :(得分:0)
这很简单:
void do_bootm_linux (cmd_tbl_t * cmdtp, int flag, int argc, char *argv[],
ulong addr, ulong * len_ptr, int verify)
{
...
void (*theKernel) (int, char **, char **, int *);
theKernel = (void (*)(int, char **, char **, int *)) ntohl (hdr->ih_ep);
...
theKernel (linux_argc, linux_argv, linux_env, 0); // <--- pass a control to a linux kernel
}
该代码已经过测试。
如果function can_be_string($var)
{
return method_exists($var, '__toString') || (is_scalar($var) && !is_null($var));
}
不是对象,则method_exists()
函数将返回false
,因此此验证是不必要的。
答案 9 :(得分:-7)
使用print_r()
和var_dump()
函数,您可以打印出任何变量的内容。
如果你不喜欢上述函数的输出,那么这里有很多类型检查函数http://www.php.net/manual/en/ref.var.php