我正在使用第三方日志记录库,并且在一个循环中运行substr()
的行。它周围有if (!is_array($value))
,但似乎$value
几乎可以形成任何类型的变量。几周前,我们不得不在if语句中添加!is_object($value)
的pull请求,因为另一个库导致$value
成为对象。现在我们遇到了$value
是资源的情况。
所以我认为这种排他性的策略可能无法维持,为什么不这样做呢:
if (is_string($value){ substr($value,0,3);...
但这不起作用,因为有时$value
是int
, 可以substr()
使用<{1}}而无怨言。
if (is_string($value) || is_int($value) )
是否足够?如何正确检查变量是否“可串”。
因为此代码在应用程序内运行,但是在应用程序外部记录内容,我们真的不希望它抛出不会导致应用程序失效的异常,或隐藏应用程序失败的原因
答案 0 :(得分:1)
对象只有在具有魔法__toString()
方法时才能进行投射。其他所有内容都可以转换为字符串,但可能有用也可能没用。
"Array"
"Resource id #..."
null
和false
转换为空字符串(""
)true
转换为字符串"1"
有关此内容的更多信息,请参阅官方文档中的here。
使用var_export($value, true)
,serialize($value)
或内置的其他序列化函数之一来处理未能投放或不投放任何有用的值的一个选项是到PHP。
有关完整信息,请参阅官方文档中的var_export和serialize。