我试图用构造函数中的变量扩展一个类。这是一个小例子。
我的index.php包含以下代码。
<?php
namespace System;
require_once 'App/Config.php';
spl_autoload_register(function($class) use ($config) {
require_once $config['app']['root'] . '/' . $class . '.php';
});
$app = new App($config);
$app->Start();
?>
一切正常。现在我在类App
的构造函数中传递了配置文件。
<?php
namespace System;
use System\Librarys\Database;
class App
{
protected $config;
protected $connection;
public function __construct($config)
{
$this->config = $config;
$this->connection = $this->getConnection();
}
public function getConnection()
{
$this->connection = new Database;
$this->connection = $this->connection->Connect();
return $this->connection;
}
public function Start()
{
echo 'test';
}
public function __destruct()
{
$this->config = null;
$this->connection = null;
}
}
?>
好的,一切都好!但现在,我想建立数据库连接。我扩展了应用程序&#34;数据库类中的类。如下所示:
<?php
namespace System\Librarys;
use System\App;
class Database extends App
{
public function __construct()
{
parent::__construct(??? HOW DO I GET THE VARIABLE FROM THE "APP" CLASS ???);
var_dump($this->config);
}
}
?>
现在,如果我在var_dump()
上执行$this->config
,则返回null
。这很清楚,因为我没有在父构造函数中传递$config var
。但是我该怎么做?我想在App
类中设置所有变量,以便我可以扩展它,并且不需要将变量传递给其他类。
答案 0 :(得分:1)
我不清楚为什么你在Database
课上没有使用相同的构造函数。
代码如下:
public function __construct($config)
{
parent::__construct($config);
}
然后在App
班级
$this->connection = new Database($this->config);
顺便说一句,如果您不打算向Database
构造函数添加更多代码,那么您实际上并不需要它。
P.S。
我在你的代码中看到了糟糕的类设计。您可能正在使用App
类进行全局配置,并且数据库连接是其中的一部分。因此,您需要创建一个可以处理所有数据库操作的类。然后,您只需在App
的实例中使用它。例如:
class DB {
function connect() { /* Some code */ }
// More functions
}
class App {
protected $db;
// contructorts etc
function run() {
$this->db = new DB(/* some config */);
// use it
}
}
答案 1 :(得分:0)
当您在__construct()
上致电Database
时,您无法从$this->config
获取App
,因为它尚未设置。
您必须先在构造函数中设置变量才能使用它。
class Database extends App
{
public function __construct()
{
parent::__construct("localhost");
var_dump($this->config); // $this->config is now "localhost"
}
}