假设我将代码组织在类中,并且每个类都有自己的文件:
- main.php,具有Main类
- config.php具有类Config
- security.php具有类Security
- database.php具有类数据库
现在,Main的构造函数将初始化 3 个对象,每个对象一个用于其他类,这样一切看起来或多或少像一个类/子类。问题是现在Security可能需要来自Config和Database的东西(变量或函数)来自 Security 的东西。
// main.php
// here I include the other files
class Main {
functions __constructor() {
$this->Config = new Config();
$this->Security = new Security();
$this->Database = new Database();
}
}
// config.php
class Config {
public $MyPassword = '123456';
public $LogFile = 'logs.txt';
// other variables and functions
}
// security.php
class Security {
functions __constructor() {
// NOW, HERE I NEED Config->Password
}
function log_error($error) {
// HERE I NEED Config->LogFile
}
}
// database.php
class Database {
functions __constructor() {
// Trying to connect to the database
if (failed) {
// HERE I NEED TO CALL Security->log_error('Connection failed');
}
}
}
那么,如何在Main中的这些嵌套类之间共享这些函数和变量?当然,我可以将这些变量作为参数发送给构造函数,但是当我们需要 5 或 10 个变量时会发生什么?我可以将整个对象Config发送到Security并将Security发送到Database,
// main.php
// here I include the other files
class Main {
functions __constructor() {
$this->Config = new Config();
$this->Security = new Security($this->Config);
$this->Database = new Database($this->Security);
}
}
但这可靠吗?我可以只发送引用(如 C++ 中的指针)吗?也许我可以将孔Main对象的引用作为构造函数中的参数发送,这样就可以使所有内容都可用。
// main.php
// here I include the other files
class Main {
functions __constructor() {
$this->Config = new Config();
$this->Security = new Security(&$this);
$this->Database = new Database(&$this);
}
}
我什至不知道这是否可能。你怎么看?有没有更传统的方法?