公共属性无法访问面向对象的PHP


Public Property unable to access Object Oriented PHP

请查看我的数据库class I使用了一个名为"connection"的公共属性,但我无法访问该属性其他.php文件。我正在学习面向对象PHP。请帮帮我。这是另一个文件链接http://pastebin.com/0Nh1uc8D

<?php 
require_once('config.php');//calling config.php
class Database{
    public $connection;//property
    //__construct();
    public function __construct(){
        $this->openDbConnection();
    }
    //method
    public function openDbConnection(){
        $this->connection = mysqli_connect(DB_HOST,DB_USER,DB_PASS,DB_NAME);
        if (mysqli_connect_errno()) {
            # code...
            die("Database Connection Failed Badly" . mysqli_error());
        }else{
            echo "DB Connected Successfully.";
        }
    }
}
//instance of the class
$database = new Database();

?>

这是我的confi.php文件代码http://pastebin.com/wQ9BFGf4

提前感谢。

对于类和属性的全局访问,您可以将其用作静态属性和方法:

class Database
{
    public static $connection;//property
    //method
    public static function openDbConnection()
    {
        self::$connection = mysqli_connect(DB_HOST,DB_USER,DB_PASS,DB_NAME);
        if (mysqli_connect_errno()) {
            # code...
            die("Database Connection Failed Badly" . mysqli_error());
        }else{
            echo "DB Connected Successfully.";
        }
    }
}
// once "create" connection
Database::openDbConnection();
// and for all other files
var_dump(Database::$connection);

问题是$database根本没有被第16行adminContent.php定义,如果这确实是Pastebin中该文件的所有代码的话。

你被公共财产范围分散了注意力,这一切都很好。公共属性肯定可以从其他函数或类作用域中未包含的其他文件访问,但如果您实际上首先需要实例化$database对象的文件,则只能访问

如果不向我们展示更多关于adminContent.php是如何从中包含的代码,我们就无法调试为什么$database没有在第16行实例化。

使用调试器来跟踪代码执行流,或者只需将echo或error_log添加到数据库实例化文件和adminContent.php代码中并运行它。我想你会发现$database根本没有实例化,或者至少在你在adminContent.php 中访问它之前