首先,我不想扩展一个类。理想情况下,我想这样做。

public function __construct() {
 /* Set Framework Variable */
 global $Five;
 $this =& $Five;
}

我有一个系统,其中变量 $Five 是一个包含其他库的容器类。我可以将它分配给五的局部变量......即
public function __construct() {
 /* Set Framework Variable */
 global $Five;
 $this->Five = $Five;
}

但是,我试图避免这种情况的原因是函数调用会变得有点长。
$this->Five->load->library('library_name');

它有点丑。会好得多。
$this->load->library('library_name');

什么是最好的解决方案?

最佳答案

我觉得

$this->Five->load->library('library_name');

除非您决定让该类扩展助手类,否则将是您的最佳选择。又名
class Something extends Helper_Class

但是,这意味着每次实例化类时都会实例化 Helper_Class

另一种方法是拥有一个伪静态类,将所有帮助类分配给类成员
public function setGlobals($five)
{
    $this->loader = $five->loader;
}

然后调用它
public function __construct($five)
{
    someClass::setGlobals($five);
}

如果 $Five 是一个全局变量,那么每次你想使用它时都可以只使用 global $Five,但是把它放在每个函数的顶部似乎是一种糟糕的编码。

另外,我只想做我的公共(public)服务公告,全局变量通常是一个坏主意,您可能想搜索“依赖注入(inject)”或全局变量的替代品。又名
public function __construct($five);

代替
global $five;

全局变量依赖于存在且已经设置的外部变量,而依赖注入(inject)请求一个变量,该变量假设它是 Five 类的一个实例。

如果您运行的是 PHP 5.1(感谢 Gordon),您可以通过执行以下操作来确保该变量是 FiveClass 的一个实例:
public function__construct(FiveClass $five);

关于php - 有没有办法重新分配 $this ?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/2067258/

10-13 00:55