我收到的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"没有定义。是一个课程'定义'不同于班级'存在'?
我在这里做错了什么?
答案 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检查中