2015-04-03 81 views
0

我有一個類設置了一個API來解析外部網站的DOM,以便用遊戲中的角色數據填充某人的個人資料。我的問題是,與此頁面上的任何類關聯的每個變量都返回null。爲什麼?以下是相關的代碼。我沒有以這種方式獲得ID,但我將代碼解壓到臨時頁面以簡化調試。返回NULL的類方法變量

$id = $_GET['id']; 

require_once '../bootstrap.php'; 
$api = new GetCharacter($id,$db); 
$data = $api->output(); 

Bootstrap只是您通常運行的數據庫連接和定義設置。那裏的所有東西都可以正常工作,所有變量都返回正確的結果(也就是說,$ db變量有一個有效的連接 - 也是內聯測試的。)如果我從bootstrap.php中回顯或var_dump每個變量的結果,它們都是正確的。

這裏是GetCharacter(我已刪除了所有的方法,因爲我的問題不涉及他們):

class GetCharacter { 

    private $api, $db, $html; 
    public $data, $id; 

    public function __constructor($id, $db) { 

     $this->id = $id; 
     $this->api = new GetAPI; 
     $this->db = $db; 

    } 
} 

現在,如果我做一個虛擬函數返回,後續代碼var_dump,print_r的$ DB,它是NULL。 $ api和$ id相同。這是怎麼回事?我覺得我必須失去一些特別明顯的東西。我通過依賴注入將$ id和$ db傳遞給構造類,並且我從來沒有以這種方式工作。這只是不工作,我不知道爲什麼。

我已經試過無數的事情:

  • 改變了$ DB到這個 - $> DB =新的數據庫;相反,要查看注射是否存在範圍問題。仍爲NULL。
  • 使$ this-> id在構造函數中定義,而不是通過注入。它仍然返回NULL。讓我真正清楚發生在那裏的事情。 在構造函數中,我放置$ this-> id ='123456',返回值爲NULL。 - WTF?
  • 使用全局$ id(我不想要,但絕望的時候...),仍然是NULL。

我然後做一個虛擬函數:

public function WTF() { 

    return 'WHAT THE HELL IS GOING ON'; 
} 

當我把這個與回聲$ API - 頁> WTF()什麼也不會發生。對於所有的意圖和目的,似乎我的類未定義,但它不是,因爲否則它甚至不會在var_dump上返回NULL。我也收到error_reporting(-1)設置零錯誤。

經過近兩個小時的試圖調試,我完全被難住了。

+1

爲什麼只傳遞$ api中的一個參數= new GetCharacter($ id);而不是兩個,即$ api = new GetCharacter($ id,$ db); – 2015-04-03 11:46:10

+0

這只是一個剪切/粘貼問題,我會改變它。這是我在列表中的第一個嘗試修復後的數學。感謝您指出。 – 2015-04-03 11:48:39

+2

'__constructor'?是不是'__construct' – Ghost 2015-04-03 11:49:21

回答

1

它應該是__construct()的構造:

public function __construct($id, $db) { // not constructor 

    $this->id = $id; 
    $this->api = new GetAPI; 
    $this->db = $db; 

} 

然後當你實例。

$id = $_GET['id']; 

require_once '../bootstrap.php'; 
$api = new GetCharacter($id,$db); 
echo $api->WTF(); // WHAT THE HELL IS GOING ON 

旁註:您還應該打開錯誤報告,以便知道最新情況。

error_reporting(E_ALL); 
ini_set('display_errors', '1');