dongshi2836 2013-11-01 16:05
浏览 23
已采纳

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

This question already has an answer here:

Question 1

In CodeIgniter... I've seen some weird stuff... For example:

parent::__Construct(); with no parameters passed into it to load into the construct of the extended class.

I assumed it must be from older PHP versions... I don't really understand what the above would do... I only see value if you pass something into the construct of the extending class.

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

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

In Codeigniter, they do not pass anything into the parent::_Construct.. So I do not understand what purpose it serves :S

Question 2

Second of all, WHAT ON EARTH does this mean:

self::$instance =& $this;

In the following snippet from Code Igniter:

class CI_Controller {

 private static $instance;

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

make the $instance variable equal the reference of $this?? $this doesn't account for anything in a static context? i'm confused.

Thanks for your help, totally making me go crazy here.

</div>
  • 写回答

3条回答 默认 最新

  • doubaoxue5788 2013-11-01 16:14
    关注

    For the first question, imagine this setup:

    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;
    

    What happens if we now call $dog->isAlive()? We get null, because $alive was never set. You need to call parent::__construct() in Dog::__construct, otherwise the bootstrapping in the parent function would never take place.

    Obviously in a real world situation the constructors would be much more complex, but this should demonstrate why parent::__construct() would be used.

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

悬赏问题

  • ¥15 使用ue5插件narrative时如何切换关卡也保存叙事任务记录
  • ¥20 软件测试决策法疑问求解答
  • ¥15 win11 23H2删除推荐的项目,支持注册表等
  • ¥15 matlab 用yalmip搭建模型,cplex求解,线性化处理的方法
  • ¥15 qt6.6.3 基于百度云的语音识别 不会改
  • ¥15 关于#目标检测#的问题:大概就是类似后台自动检测某下架商品的库存,在他监测到该商品上架并且可以购买的瞬间点击立即购买下单
  • ¥15 神经网络怎么把隐含层变量融合到损失函数中?
  • ¥15 lingo18勾选global solver求解使用的算法
  • ¥15 全部备份安卓app数据包括密码,可以复制到另一手机上运行
  • ¥20 测距传感器数据手册i2c