4

我有一个用于处理 SQL 的通用函数。我收到了这个错误(一天只有几次,不经常)。

PHP Catchable fatal error:  Object of class PDO could not be converted to string in...

基本上,为我正在使用的函数传递了一个值数组,我必须在我的代码中滑倒并在该数组中放置了一个 PDO 对象。

我需要创建一个 array_filter 函数来检查变量是否是 PDO 对象。我该如何为此做一个简单的 if 语句?

if($var == PDO)

编辑:感谢您的精彩回答!如果有人感兴趣,这就是我解决问题的方法。我能够找到无效输入的来源。

$before=$original_array;
$after = array_filter($before, "find_error");
if(count($before)!=count($after)){
    $error=print_r(debug_backtrace(false),true);
    $arr=print_r($before,true);
    send_message("admin@email.com","Error Report",$arr.$error); 
//send_message is a simple function for sending emails. You could also write information to a txt file, etc.
}

function find_error($var){
    return !($var instanceof PDO);
}
4

3 回答 3

13

instanceof 用于判断 PHP 变量是否为某个类的实例化对象:

if($var instanceof PDO) {
   // your code
}
于 2013-03-24T07:53:24.770 回答
2
  1. 你试图治愈症状而不是疾病。
  2. 你只是出于猜测而尝试它。

你想要做的就是所谓的“错误信息抑制”。有了好心人已经给你带来的期望if声明,你只是闭上眼睛假装程序流程没有错误。虽然它仍然存在。

一个好的程序员必须问“如何追踪错误以及如何修复它”,而不是“如何堵嘴”。

因此,您必须使用debug_backtrace()跟踪添加错误数据的位置。此功能必须放置在您的错误消息标记的行中。
然后您需要调试代码以确保您添加 PDO 结果的假设是正确的。
最后修复错误。

在我写这个答案时,您似乎设法以正确的方式解决了问题。但我必须把它留给未来的读者。

于 2013-03-24T08:16:48.130 回答
2

您可以为此使用instanceof 。

if($var instanceof PDO){
    //code here
}

然而你说

我一定是在我的代码中滑倒并在该数组中放置了一个 PDO 对象

我建议您找出并纠正错误,否则您可能会在继续开发时为自己存储其他问题,并可能将该数组传递给应用程序的其他部分。

始终解决问题,而不是专注于治疗症状。

于 2013-03-24T07:55:12.433 回答