【问题标题】:Public Property unable to access Object Oriented PHP公共属性无法访问面向对象的 PHP
【发布时间】:2016-01-08 19:13:59
【问题描述】:

请查看我的 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();

?>

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

提前致谢。

【问题讨论】:

  • 您究竟是如何尝试访问其他文件中的连接属性的?
  • 哎呀!!这是错误注意:未定义的变量:第 16 行 /home/asad/workspace/public_html/oop/gallery/admin/inc/adminContent.php 中的数据库注意:尝试在 /home/asad/ 中获取非对象的属性工作区/public_html/oop/gallery/admin/inc/adminContent.php 第 16 行
  • 没有看到更多代码,很难更具体,但基本上,你试图从不可见的地方访问 $database。问题不在于您无法访问该物业;问题是您无法访问对象本身。
  • 无法访问对象,我创建了一个名为“$database”的类实例。我正在使用此文件上的对象 pastebin.com/0Nh1uc8D 连接数据库,我添加了所有代码,请访问链接。
  • 这似乎不是所有代码。你在哪里包含包含数据库类的文件?

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


【解决方案1】:

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

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::$connection = 'WUT'; - 是时候找出错误了。
  • @u_mulder 这只是示例!并没有解释很多问题。但是对于你来说——这是开发人员失败))或者你总是像这样部署代码?或者您修复生产实例上的错误?
【解决方案2】:

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

您会被公共财产范围分心,这可以正常工作。公共属性绝对可以从不包含在其他函数或类范围内的其他文件访问,但只有如果您确实需要实例化 $database 对象的文件第一名。

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

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

【讨论】:

    猜你喜欢
    • 2013-01-05
    • 1970-01-01
    • 1970-01-01
    • 2018-10-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-11-20
    相关资源
    最近更新 更多