分析PHP require和require_once 错误

i-w 发布于 2012/08/10 17:04
阅读 3K+
收藏 0
PHP
class abc{

	function ad(){
		require_once 'db_connect.php';
		$a=$this->bc();
		echo $a;
	}
	function bc(){
		require_once 'db_connect.php';
		$sql='select * from fp_software limit 10';
		$st=$pdo->prepare($sql);
		$st->execute();
		return 123;
	}
}
$a=new abc();
$a->ad();

Fatal error: Call to a member function prepare() on a non-object in F:\webconf\Apache2.2\htdocs\test2\pdo\pdo_.php on line 16

如上

     db_connect.php路径正确

    单独执行bc()不会出错 但将bc()放另一个函数中调用会找不到$pdo  将bc()中require_once改为require不出错

求分析为何会这样。。。

加载中
0
i-w
i-w
求大神分析。。。
0
i-w
i-w
@php大神
0
游侠
游侠

你的代码说明的是方法ad()的错误;

其次

单独执行bc()不会出错 但将bc()放另一个函数中调用会找不到$pdo 将bc()中require_once改为require不出错
这里的出错又没说是什么错。

说的这么含糊不好解决。

 

 

i-w
i-w
呃……错误就是上面那个啊
0
游侠
游侠

变量作用域的问题啊!

我猜,在你的 db_connect.php 中肯定是实例化了 pdo 并赋值给变量 $pdo, 这时在你的ad()(因为require了这个db_connect.php)方法中是可以访问到$pdo 这个变量的,这时ad()又调用了bc(),如果bc()中没有包含db_connect.php 是访问不到$pdo这个变量的。你使用reuqire_one 是不会包含db_connect.php这个文件了,因为在之前 ad()中已经包换过一次,但是你使用require 又强制包含了一遍,所以可以访问$pdo 变量。 

楼主我这么说,你能明白吗?

i-w
i-w
呃……明白了,谢谢
0
游侠
游侠
还有楼主你这么个代码结构会不好维护的。。。
i-w
i-w
求喷……
i-w
i-w
不好维护?为何呢
0
Jiazz
Jiazz
神级别的代码!!!
i-w
i-w
啥?不懂……
0
i-w
i-w
求喷……
0
Jason阿坚
Jason阿坚
额,变量!完整代码
0
老陌
老陌
使用绝对路径, 保证不出错。
返回顶部
顶部