请查看我的数据库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
中访问它之前