2015-04-03 79 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');