PHP升級到5.4後 private調用類庫不能執行

來源:互聯網
上載者:User
小白求助!!!
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 累的定義只會載入一次



謝謝講解
  • 聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

    如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

    A Free Trial That Lets You Build Big!

    Start building with 50+ products and up to 12 months usage for Elastic Compute Service

    • Sales Support

      1 on 1 presale consultation

    • After-Sales Support

      24/7 Technical Support 6 Free Tickets per Quarter Faster Response

    • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.