没有赋值给变量的PHP类的实例化
我在Codeigniter HMVC扩展(由Wiredesignz编写)中遇到了这一行代码,其中一个类在没有分配给变量的情况下被实例化(Base.php中的类CI) 守则:没有赋值给变量的PHP类的实例化,php,codeigniter,Php,Codeigniter,我在Codeigniter HMVC扩展(由Wiredesignz编写)中遇到了这一行代码,其中一个类在没有分配给变量的情况下被实例化(Base.php中的类CI) 守则: class CI extends CI_Controller { public static $APP; public function __construct() { /* assign the application instance */ self::$APP = $this; g
class CI extends CI_Controller
{
public static $APP;
public function __construct() {
/* assign the application instance */
self::$APP = $this;
global $LANG, $CFG;
/* re-assign language and config for modules */
if ( ! is_a($LANG, 'MX_Lang')) $LANG = new MX_Lang;
if ( ! is_a($CFG, 'MX_Config')) $CFG = new MX_Config;
parent::__construct();
}
}
/* create the application object */
new CI;
这种技术叫什么名字?
这意味着什么?这没有名字,这意味着构造函数肯定做得太多了。一个人想要创建一个类的实例而不引用它的原因是,他只想要构造函数被执行,而不是别的。这意味着,构造函数“做”了一些事情,但构造函数只应确保对象处于稳定/有效状态,仅此而已
简而言之:不要认为这是一个好的实践。
global
和self::$APP=$this
证实了我的观点,即这是一段糟糕的代码。这段代码没有名字,其含义是,构造函数肯定做得太多了。一个人想要创建一个类的实例而不引用它的原因是,他只想要构造函数被执行,而不是别的。这意味着,构造函数“做”了一些事情,但构造函数只应确保对象处于稳定/有效状态,仅此而已
简而言之:不要认为这是一个好的实践。
global
和self::$APP=$this
证实了我的观点,这是一段糟糕的代码。我想这可能被看作是某种外观设计。
-类(调用构造函数)并完成赋值,尽管是在构造函数本身中
因此,newci
只是扩展了超级对象并初始化了它自己的构造函数。
与函数类似,函数somefun(){return};somefunc()//调用somefunc
CI_控制器加载运行Codeigniter所需的所有类,它是超级对象
$ci = &get_instance() // CI_Controller
我想这可以看作是某种立面设计。
-类(调用构造函数)并完成赋值,尽管是在构造函数本身中
因此,newci
只是扩展了超级对象并初始化了它自己的构造函数。
与函数类似,函数somefun(){return};somefunc()//调用somefunc
CI_控制器加载运行Codeigniter所需的所有类,它是超级对象
$ci = &get_instance() // CI_Controller
如果这是CodeIgniter,我只是对学习它失去了兴趣,甚至与它有任何共同之处。@shadyyx阅读了问题的第一行。@Vlakarados,这是一个扩展,所以不是真正的CI?但是我想CI仍然使用global
s,那么…@shadyyx不是官方的扩展。无论如何,我同意目前的情况是不好的。@Vlakarados IMHO,在现代OO编程和(H)MV[C | P]体系结构中,没有global
s的位置。如果这是CodeIgniter,我只是失去了学习它的兴趣,甚至与它有任何共同之处。@Shadyx阅读了问题的第一行。@Vlakarados说它是一个扩展,那么不是真正的CI?但是我想CI仍然使用global
s,那么…@shadyyx不是官方的扩展。无论如何,我同意目前的情况是不好的。@Vlakarados IMHO,在现代OO编程和(H)MV[C | P]体系结构中,没有global
s的位置。对不起,但你真的想在最后一句话中加逗号吗?:)我同意,确实是一段非常糟糕的代码。还有非常糟糕的练习。啊,现在我明白了,谢谢。不是母语和标点符号。。。甚至用我的语言也不行:D@KingCrunch它发生了:)每次都让我觉得有趣,一个小的,
完全颠倒了句子的意思:)@KingCrunch-我并没有这样假设,只是好奇它是如何工作的,也就是说,对象可以在没有引用(变量)的情况下被引用。已删除扩展,难以导航和调试。谢谢你的回答。对不起,你真的想把逗号放在最后一句话里吗?:)我同意,确实是一段非常糟糕的代码。还有非常糟糕的练习。啊,现在我明白了,谢谢。不是母语和标点符号。。。甚至用我的语言也不行:D@KingCrunch它发生了:)每次都让我觉得有趣,一个小的,
完全颠倒了句子的意思:)@KingCrunch-我并没有这样假设,只是好奇它是如何工作的,也就是说,对象可以在没有引用(变量)的情况下被引用。已删除扩展,难以导航和调试。谢谢你的回答。让我困惑的是CI的实例化,而没有将其分配给变量。。。已经在index.php中声明了一个CI_Controller类型的$CI。现在是CI类型的CI。CI和$CI都是对象,后者是变量,但前者呢?PHP是如何管理它的?起初我认为它可能是单例的,但在任何其他地方,任何人都可以声明另一个CI类型的对象,尽管这次他可能不得不将其分配给一个变量。但已删除扩展名。。。使用Jens Segers的一个。让我困惑的是CI的实例化没有将其分配给变量。。。已经在index.php中声明了一个CI_Controller类型的$CI。现在是CI类型的CI。CI和$CI都是对象,后者是变量,但前者呢?PHP是如何管理它的?起初我认为它可能是单例的,但在任何其他地方,任何人都可以声明另一个CI类型的对象,尽管这次他可能不得不将其分配给一个变量。但已删除扩展名。。。使用Jens Segers的一个。