PHP使用子变量在父类中创建一个类

时间:2015-08-26 18:42:21

标签: php

我有3个班级:

  1. A类 - 父类
  2. B类 - 儿童班
  3. C类 - A类使用的类
  4. 我想使用来自我的Child类的变量来使用C类中的函数。

    <?php
    
    class A
    {
        public function __construct()
        {
            $this->load();
        }
    
        public function load()
        {
            $class = new C();
            $class->test = $this->test;
            $this->c = $class;
        }
    }
    
    class B extends A
    {
    
        public function __construct()
        {
            parent::__construct();
        }
    }
    
    class C
    {
        public function display()
        {
            echo $this->test;
        }
    }
    
    $b = new B();
    $b->test = 1;
    $b->c->display();
    

1 个答案:

答案 0 :(得分:1)

你的问题在这里:

$class->test = $this->test;

您正在尝试使用尚未定义的属性,因为当您执行此操作时:

$b->test = 1;

构造函数已被调用,并且您的类中没有任何内容可以使用B的test属性值更新C.

您可以通过几种不同的方式解决此问题。

1)在B的构造函数中发送值,并将其传递给整个链:

class A
{
    public function __construct($test)
    {
        $this->load($test);
    }

    public function load($test)
    {
        $class = new C();

        $class->test = $test;
        $this->c = $class;
    }
}

class B extends A
{

    public function __construct($test)
    {
        parent::__construct($test);
    }
}

class C
{
    public function display()
    {
        echo $this->test;
    }
}

$b = new B(123);
$b->c->display();

2)向B添加一个更新C属性的方法:

<?php

class A
{
    public function __construct()
    {
        $this->load();
    }

    public function load()
    {
        $class = new C();
        $this->c = $class;
    }
}

class B extends A
{

    public function __construct()
    {
        parent::__construct();
    }

    public function setTest($test)
    {
        $this->c->test = $test;
    }
}

class C
{
    public function display()
    {
        echo $this->test;
    }
}

$b = new B();
$b->setTest(123);
$b->c->display();

或者两者兼而有之。