Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/codeigniter/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
没有赋值给变量的PHP类的实例化_Php_Codeigniter - Fatal编程技术网

没有赋值给变量的PHP类的实例化

没有赋值给变量的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

我在Codeigniter HMVC扩展(由Wiredesignz编写)中遇到了这一行代码,其中一个类在没有分配给变量的情况下被实例化(Base.php中的类CI)

守则:

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的一个。