父变量/类返回null

时间:2012-05-12 15:31:44

标签: php oop class object

我有一个基类和一个扩展基类的第二个类。问题是我无法从子类访问$ db对象,而是所有正常变量。 知道为什么吗?

class Base_Login
{  
    protected $member_uri = 'member.php';
    protected $db;

    public function __construct($db_user, $db_password, $db_name, $db_host)
    {
        $this->db = new ezSQL_mysql($db_user, $db_password, $db_name, $db_host);
        var_dump($this->db); //Output: Object content's
    }   
}

class Facebook_Login extends Base_Login
{       
    public function __construct($app_id, $secret)
    {
        var_dump($this->db); //Output: NULL
        echo $this->member_uri //Output: member.php
    }
}

这就是我所说的:

require("includes/config.php");
$base_login = new Base_Login($db_user,$db_password,$db_name,$db_host);
$base_login->Facebook_Login = new Facebook_Login($facebook_appID,$facebook_secret);

4 个答案:

答案 0 :(得分:2)

在您的父类中,您已定义了构造函数方法。并且数据库对象的初始化在父类中完成。当你定义一个子类并定义与父类同​​名的方法时,php在这里所做的是覆盖父方法将子例如

class Foo {
    public function a() {
        //some code execution are done here
    }
}

现在你有另一个继承父类的类

class Bar {
    public function a() {

    }
}
php在这里做的是忽略父方法并只调用子类。 workarond是通过使用父关键字

在您的子类中调用您的父方法

所以在你的孩子班上

class Bar {
    public function() {
        //call to parent method.
        parent::a();
    }
}

这将导致父和子方法被执行。同样适用于类构造函数。您需要使用parent::__construct();

在子类中对父构造函数方法进行分类

希望这有助于您了解php如何处理方法覆盖。

答案 1 :(得分:0)

简单的你需要调用父构造函数,如:

 public function __construct($app_id, $secret, $db_user, $db_password, $db_name, $db_host)
 {
    parent::__construct($db_user, $db_password, $db_name, $db_host);
    var_dump($this->db); //Output: NULL
    echo $this->member_uri //Output: member.php
 }

//然后创建facebook登录对象

 new Facebook_Login($facebook_appID, $facebook_secret, $db_user, $db_password, $db_name, $db_host);

答案 2 :(得分:0)

您需要在班级Facebook_Login

中调用父级的构造函数

只需添加parent::__construct()所需的参数。

答案 3 :(得分:0)

使用此:

<?php
class Facebook_Login extends Base_Login
{       
    public function __construct($app_id, $secret)
    {
        parent::__construct();
        var_dump($this->db); 
        echo $this->member_uri ;
    }
}
?>