Передача данных с класса в класс php

Есть два класса hello и world

class hello {

    public $data;

    public function setup() {

        $this->data = 'lorem ipsum';

        $world = new world;
        $world->data = $this->data

    }

}

class world {

    public $data;

    public function setup() {

        echo $this->data;

    }

}

Создал экземпляр класса и присвоил данные с переменной в переменную но результат null

Функцию я вызываю в отдельном фале, но данные не передаются в класс world

Что я не так делаю?


Ответы (1 шт):

Автор решения: Johny

Данные передаются. Просто вы с ними ничего не делаете. В вашем коде не хватает вызова метода дочернего объекта.

    class hello {
    
        public $data;
    
        public function setup() {
    
            $this->data = 'lorem ipsum';
    
            $world = new world;
            $world->data = $this->data

            $world->setup();    
        }    
    }

После выхода из метода hello::setup объект $world перестает существовать, поскольку он находится в области видимости только этой функции. Чтобы можно было к этому объекту обратиться позже, попробуйте

  1. либо вернуть объект через return $world; в методе hello::setup и потом дернуть уже его метод setup()

    $hello = new hello()
    $world = $hello->setup()
    $world->setup()
    // или же все это одной строкой:
    (new hello())->setup()->setup()
    
  2. либо положить его в какое-нибудь свойство класса hello. Например, так:

    class hello {
    
        public $data;
    
        private $world;
    
        public function setup() {
    
            $this->data = 'lorem ipsum';
    
            $this->world = new world;
            $this->world->data = $this->data    
        }
    
        public function getWorld() {
            return $this->world;
        }
    }
    
    $hello = new hello();
    $hello->setup();
    $world = $hello->getWorld()
    $world->setup();
    

P.S. Огромная просьба! Следуйте рекомендациям PSR-1, именуйте классы в StudlyCaps! В вашем примере это будут имена Hello и World.

→ Ссылка