PHP中私有变量的衍生类中的未定义变量?

时间:2017-05-15 22:16:55

标签: php class oop undefined

我试图在PHP中使用OOP创建一个mysql查询。在类" database_disconnection"下面的代码中不会抛出任何错误或通知,但是最后一个类" database_query"给我一个通知,$ database_handle是未定义的。我不知道导致这种情况的原因是因为我创建了database_query类作为database_connection的派生类,其中包含$ database_handle变量作为private。任何帮助将不胜感激!

实例化对象:

 include("includes/database_classes.php");

 new database_connection;
 new database_query('SELECT * FROM users');

和班级:

<?php
/*----------------------------------------------------------------------------------------------------*/
class database_connection
{

    private $username = 'root';
    private $password = '';
    private $hostname = 'localhost';
    private $database = 'assistant';    
    private $database_handle;

    function connect()
    {
        try
        {
            $database_handle = new PDO("mysql:host=$hostname;dbname=$database", $username, $password);
        }

        catch (PDOException $e) 
        {
            print "Error!: " . $e ->getMessage() . "<br/>";
            die();
        }
    }
}

/*----------------------------------------------------------------------------------------------------*/
class database_disconnection extends database_connection
{
    function disconnect()
    {
        $database_handle = null;
    }
}

/*----------------------------------------------------------------------------------------------------*/
class database_query extends database_connection
{
    private $mysql_statement;

    function __construct( $mysql_statement )
    {
        $this->mysql_statement = $mysql_statement;

        foreach($database_handle->query("$mysql_statement") as $row) {
            print_r($row);
        }
    }

}

/*----------------------------------------------------------------------------------------------------*/
?>

1 个答案:

答案 0 :(得分:0)

database_query构造函数中,您在初始化之前尝试使用$database_handle。如果您注意到,则只在父类(connect)的database_connection函数中初始化。

在尝试引用它之前调用connect,或者在父构造函数中初始化它,然后调用它(parent::__construct();)。