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

时间:2016-01-08 19:14:00

标签: php html css oop object-oriented-analysis

请查看我的databaseClass我使用了一个名为“connection”的公共属性,但我无法访问该属性的其他.php文件。我正在学习OOP 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();

&GT;

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

先谢谢。

2 个答案:

答案 0 :(得分:0)

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

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);

答案 1 :(得分:0)

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

你被公共财产范围分散了注意力,现在工作正常。公共属性肯定可以从其他函数或类范围中未包含的其他文件访问,但如果您实际需要实例化$database对象的文件,则首先。

如果没有向我们展示有关如何包含adminContent.php的更多代码,我们无法调试第16行未实例化$database的原因。

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

中访问它之前