Home >Backend Development >PHP Tutorial >PHP升级到5.4后 private调用类库不能执行

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

WBOY
WBOYOriginal
2016-06-20 12:29:45956browse

小白求助!!!
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 累的定义只会加载一次



谢谢讲解
Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn