class_exists无法检测未定义的类

时间:2017-02-03 15:50:59

标签: php class error-handling

我收到的PHP错误是没有定义特定的类(当我引用成员方法时),并且在某些情况下没有定义。所以我创建了一个IF语句来首先检查该类是否存在,然后检查它的方法是否存在。现在我的IF语句正在生成错误。这是IF声明:

$visitordataavailable = ((isset($_SESSION['VISITOR'])) && (class_exists("Visitor",false)) && method_exists($_SESSION['VISITOR'],'toArray'));

这就是错误:

  

致命错误:method_exists():脚本尝试执行方法或访问不完整对象的属性。请确保课程定义& quot; Visitor& quot;您尝试操作的对象是在 unserialize()被调用之前加载或提供__autoload()函数来加载类定义...

这怎么会产生错误!? class_exists返回true,"访客" class存在,但是method_exists崩溃,因为class" Visitor"没有定义。是一个课程'定义'不同于班级'存在'?

我在这里做错了什么?

1 个答案:

答案 0 :(得分:0)

您需要实例化Class并将对象传递给method_exists,或者使用is_callable并传递包含Class名称和方法名称的数组。您必须在类名中包含任何名称空间。所以试试

    isset($_SESSION['VISITOR']) && class_exists("Visitor",false) 
     && is_callable(array('Namespace\Here\'.$_SESSION['VISITOR'],'toArray'))

如果您没有命名空间,请使用

    isset($_SESSION['VISITOR']) && class_exists("Visitor",false) 
         && is_callable(array($_SESSION['VISITOR'],'toArray'));

编辑: 考虑一下,你可以省略class_exists,因为它隐含在is_callable检查中