Jas*_*onS 4 php oop composition
首先,我不想扩展课程.我理想的是喜欢这样做.
public function __construct() {
/* Set Framework Variable */
global $Five;
$this =& $Five;
}
Run Code Online (Sandbox Code Playgroud)
我有一个系统,其中变量$ Five是一个包含其他库的容器类.我可以将它分配给一个局部变量Five ...即
public function __construct() {
/* Set Framework Variable */
global $Five;
$this->Five = $Five;
}
Run Code Online (Sandbox Code Playgroud)
但是,我试图避免这种情况的原因是函数调用会变得有点长.
$this->Five->load->library('library_name');
Run Code Online (Sandbox Code Playgroud)
它有点难看.会好得多.
$this->load->library('library_name');
Run Code Online (Sandbox Code Playgroud)
什么是最好的解决方案?
我觉得
$this->Five->load->library('library_name');
Run Code Online (Sandbox Code Playgroud)
除非你决定让类扩展帮助类,否则它将是你最好的选择.AKA
class Something extends Helper_Class
Run Code Online (Sandbox Code Playgroud)
但是,这意味着Helper_Class每次实例化一个类时都会实例化.
另一种方法是使用伪静态类将所有辅助类分配给类成员
public function setGlobals($five)
{
$this->loader = $five->loader;
}
Run Code Online (Sandbox Code Playgroud)
然后就叫它
public function __construct($five)
{
someClass::setGlobals($five);
}
Run Code Online (Sandbox Code Playgroud)
如果$Five是全局的,你可以只在global $Five每次想要使用它时,但把它放在每个函数的顶部看起来就像编码错误.
另外,我只想做我的公共服务公告,全局变量通常是一个坏主意,你可能想要搜索'依赖注入'或全局变量的替代.AKA
public function __construct($five);
Run Code Online (Sandbox Code Playgroud)
代替
global $five;
Run Code Online (Sandbox Code Playgroud)
Globals依赖于外部变量存在并且已经设置,而依赖注入请求一个变量,它假定它是Five类的一个实例.
如果你运行PHP 5.1(感谢Gordon),你可以确保变量是FiveClass这样做的一个实例:
public function__construct(FiveClass $five);
Run Code Online (Sandbox Code Playgroud)