Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/231.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/visual-studio/8.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 - Fatal编程技术网

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

PHP使用子变量在父类中创建类,php,Php,我有三门课: A类-父类 B类-儿童班 C类-A类中使用的类别 我想使用C类中的函数和子类中的变量 <?php class A { public function __construct() { $this->load(); } public function load() { $class = new C(); $class->test = $this->test;

我有三门课:

  • A类-父类
  • B类-儿童班
  • C类-A类中使用的类别
  • 我想使用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();
    
    您的问题在于:

    $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();
    

    谢谢您的帮助。我想我会坚持第一种方法。