PHP升级到5.4后 private调用类库不能执行

原创
2016-06-20 12:29:45 641浏览

小白求助!!!
php升级到5.4后
之前可以执行的函数现在不能执行了
整个文件结构如下

class wechatCallbackapiTest
{
public function valid()
{
……
include('db.php');
……
$contentStr= $this->zhiwen($name,$xuehao);
……
}

private function zhiwen($uid,$xuehao) {
include('db.php');
……
}
}

现在zhiwen函数只要到include('db.php'); 下面就不能正常执行了
而db.php在上面valid调用是正常的

db.php文件为调用一个数据库的类库,文件如下
$db_config["hostname"] = "localhost"; //服务器地址
……
include('db.class.php');
$db = new db();
$db->connect($db_config);
?>

小白一个,对于函数、类库继承很是不明白,请教高手帮忙解决 谢谢


回复讨论(解决方案)

这与 PHP升级到5.4 毫无关系!

你在 public function valid() 中
include('db.php');
又在 private function zhiwen($uid,$xuehao) 中
include('db.php');
由于 db.class.php 中有 db 类的定义,就造成了 db 类重复定义的错误
这是连 php4 都不允许出现的!

这与 PHP升级到5.4 毫无关系!

你在 public function valid() 中
include('db.php');
又在 private function zhiwen($uid,$xuehao) 中
include('db.php');
由于 db.class.php 中有 db 类的定义,就造成了 db 类重复定义的错误
这是连 php4 都不允许出现的!



谢谢回答!
但是 我这样写 在升级之前是可以正常执行的
刚才我试着删除private function zhiwen($uid,$xuehao) 里的
include('db.php');
发现 zhiwen函数里对数据库的操作已经不能执行了

只要你的 db.class.php 中有 class db { .... }
那么你的程序在任何版本的 php 中都不可能正确运行

倒是
public function valid()
{
……
include('db.php'); //这个可能是你后加的
……
$contentStr= $this->zhiwen($name,$xuehao);
……
}

倒是
public function valid()
{
……
include('db.php'); //这个可能是你后加的
……
$contentStr= $this->zhiwen($name,$xuehao);
……
}



public function valid()里的 include('db.php');也是之前都有的
我就是升级了lnmp后 就不能使用了
现在 public function valid()
和 private function zhiwen($uid,$xuehao)
都需要调用使用数据库类
那么怎么能够正常调用 include('db.php');
并使用类库呢?

//引用多次造成的,改成如下include_once('db.php');

//引用多次造成的,改成如下include_once('db.php');

谢谢回答 请问哪个改成include_once('db.php');


//引用多次造成的,改成如下include_once('db.php');

谢谢回答 请问哪个改成include_once('db.php');

两个都改



//引用多次造成的,改成如下include_once('db.php');

谢谢回答 请问哪个改成include_once('db.php');

两个都改
我查了下include_once是避免重复调用的,第二次的调用同一个文件 会自动过滤
但是我第二次那个,也就是private function zhiwen($uid,$xuehao) 这个
也需要调用那个类库啊
现在没调用也没有继承 下面有数据库的操作直接用不了
请问有方法能继承吗?

有人能帮忙解决下吧

倒是
public function valid()
{
……
include('db.php'); //这个可能是你后加的
……
$contentStr= $this->zhiwen($name,$xuehao);
……
}



您好 那要是不能重复调用 请问private function zhiwen($uid,$xuehao)应该怎么使用db的类库啊 谢谢

把 b.php 中的 include('db.class.php');
改为 include_once('db.class.php');
include('db.php'); 不用改



//引用多次造成的,改成如下include_once('db.php');

谢谢回答 请问哪个改成include_once('db.php');

两个都改

那要是不能重复调用 请问private function zhiwen($uid,$xuehao)应该怎么使用db的类库啊 谢谢

把 b.php 中的 include('db.class.php');
改为 include_once('db.class.php');
include('db.php'); 不用改



谈感谢了 可以了
请问是什么原理
为什么里面的不需要改成 include_once 只要修改db.php文件里的就可以了?

include_once 是加载过了就不加载
include 是总是加载,不管是否加载过了
所以被多次 include 的文件中不能有 类、函数、常量 的定义,否则就是重复定义了

你的 db.php 中有
include('db.class.php'); //里面含有 db 类的定义
所以当再次 include('db.php'); 时,就会因 db 类已经定义过了,而出错

改成 include_once('db.class.php'); 后就没有这个问题了,因为 db 累的定义只会加载一次

include_once 是加载过了就不加载
include 是总是加载,不管是否加载过了
所以被多次 include 的文件中不能有 类、函数、常量 的定义,否则就是重复定义了

你的 db.php 中有
include('db.class.php'); //里面含有 db 类的定义
所以当再次 include('db.php'); 时,就会因 db 类已经定义过了,而出错

改成 include_once('db.class.php'); 后就没有这个问题了,因为 db 累的定义只会加载一次



谢谢讲解
声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn核实处理。