这一行在课堂上做了什么? codeigniter相关(parent :: and =& $ this)

时间:2013-11-01 16:05:24

标签: php codeigniter

问题1

在CodeIgniter中......我见过一些奇怪的东西......例如:

父:: __构建体();没有参数传入它加载到扩展类的构造中。

我认为它必须来自较旧的PHP版本...我真的不明白上面会做什么...如果你将某些内容传递给扩展类的构造,我只会看到值。

class Sausage
{
    private $name;
    function __Construct( $something )
    {
        $this->name = $something;
    }
}

class Something extends Sausage
{
    parent::__Construct( "Hi" ); 
    echo $this->name; // outputs "Hi"
}

在Codeigniter中,他们没有将任何内容传递给父:: _ Construct ..所以我不明白它的用途是什么:S

问题2

其次,地球上的内容是什么意思:

self::$instance =& $this;

在Code Igniter的以下代码段中:

class CI_Controller {

 private static $instance;

 public function __construct()
 {
  self::$instance =& $this;

使$ instance变量等于$ this的引用? $ this不考虑静态上下文中的任何内容?我很困惑。

感谢您的帮助,让我在这里疯狂。

3 个答案:

答案 0 :(得分:0)

对于第一个问题,想象一下这个设置:

class Animal {
    private $alive;
    public function __construct() {
        $this->alive = true;
    }
    public function isAlive() {
        return $this->alive;
    }
    public function kill() {
        $this->alive = false;
    }
}

class Dog extends Animal {
    private $sound;
    public function __construct() {
        $this->sound = "bark";
    }
}

$dog = new Dog;

如果我们现在致电$dog->isAlive()会怎样?我们得到null,因为$alive从未设置过。您需要在parent::__construct()中调用Dog::__construct,否则父函数中的引导将永远不会发生。

显然,在现实世界的情况下,构造函数会复杂得多,但这应该说明为什么会使用parent::__construct()

答案 1 :(得分:0)

从子句中调用 parent :: __ construct()意味着我们希望在创建子对象时也可以调用父构造函数以及子构造函数。

传递参数取决于构造函数本身。即如何定义构造函数。

您并不总是需要将参数传递给函数才能使其正常运行;)

对于你的第二个问题,我认为这是

self::$instance =& $this;

你正在使你的静态变量 $ instance 成为你自己类的引用变量,即$ this

答案 2 :(得分:0)

以下代码

parent::__Construct();

调用派生当前类的父类的构造函数方法,未传递参数,因为它不接受任何调用,因为当你从父类扩展子类时,你必须调用它明确地constructor,否则,它的构造函数将不会被调用。

Follwing代码(目标版本-4)

self::$instance = & $this;

由于$instance是一个静态属性,为了访问它,他们使用self::$instance& $this来指定类实例作为参考。

在这段代码private static $instance;中,属性被声明为静态,即使你第二次调用类,它也会保持它的状态,这意味着如果它包含类的引用,那么它将不会分配它再次,所以你总是只得到一个类的实例,它被称为singleton设计模式,这被称为反模式,不推荐。