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

时间:2014-07-17 12:48:54

标签: php include

我使用自定义主题的Wordpress。

在主题的header.php顶部,我有一个Mobile Detect脚本。

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

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

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

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

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

我收到此错误:

  

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

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

我在include,include_once,require和require_once之间有点混淆,所以有人可以帮忙解决这个问题吗?

2 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分:0)

我的猜测是,$detect行的某个地方正在重置为其他内容。搜索$detect的所有实例并查找使用单个等号而不是双倍或三倍的内容。它也可能是另一个包含重置它的地方。

如果变量$detect没有存在,那么您会收到不同的通知Undefined variable: detect

如果$detect是有效对象,但该方法已不存在,则您会收到Fatal error: Call to undefined method Mobile_Detect::isMobile

但是,您的错误表明您使用的变量不是对象,因此首先不能拥有成员函数。