为什么我不能调用'包含在头文件中的函数?


Why can't I call to a function in a file that's included in the header?

我使用Wordpress自定义主题。

在主题header.php的顶部,我有一个移动检测脚本。

require_once '/extras/Mobile_Detect.php';
$detect = new Mobile_Detect;

然后在header.php页面的下面,我有一行检查用户是否在移动设备上,并相应地显示不同的内容。

if ($detect->isMobile()) { echo "Premium"; } else { echo variable('prem_no'); }

但是,在页面下方的PHP文件中,当我尝试使用相同的脚本时:

if ($detect->isMobile()) { echo "Find a psychic"; } else { echo "Our Psychic Readers"; }

我得到这个错误:

致命错误:在C:'wamp'www'clairvoyant'extras'reader-categories.php中的非对象上调用成员函数isMobile()

我怎样才能使一个文件所需或包含在header.php文件中,可以在整个页面文件的其余部分被引用?

我在include, include_once, require和require_once之间有点困惑,所以有人可以帮助清理吗?

requireinclude之间没有太多区别,但主要的一点是require的文件必须存在,否则你会得到一个错误,而include是可选的。

_once是确保你不包含它超过once


但是,在页面下方的进一步包含的PHP文件中,当我尝试使用相同的脚本,我得到这个错误…

这听起来像$detect不是同一个对象,例如

require_once '/extras/Mobile_Detect.php';
$detect = new Mobile_Detect;
if ($detect->isMobile()) { echo "Premium"; }//Good
....
$detect['mobile'] = 'iPhone';
if ($detect->isMobile()) { echo "Find a psychic"; }//Bad

我的猜测是$detect正在被重置为其他东西。对$detect的所有实例进行搜索,并寻找使用单个等号而不是双等号或三等号的东西。它也可能是另一个正在重置它的include。

如果变量$detect flat out不存在,您将收到一个不同的通知Undefined variable: detect .

如果$detect是一个有效的对象,但是该方法不再存在,那么您将收到Fatal error: Call to undefined method Mobile_Detect::isMobile

然而,你的错误说,你正在处理的变量不是一个对象,因此首先不能有成员函数