ОПП. Как передать свойства внутрь класса?

Есть класс родитель. Который используется повсеместно в коде. Я пытаюсь воспользоваться одним из его потомков и передать значение переменной, чтобы внутри метода родителя воспользоваться этой переменной. Но почему то не выходит. Заранее спасибо за ответ.

<?
    class class1{
        public $value;
        
        public function setFlag($flag)
        {
            $this->value = $flag;
        }

        public function getFlag(){
            return $this->value;
        }
            
        function registerVar(){
            $this->value; // почему ту является null
        }
    }
    class class2 extends class1{
        function fu2(){
            $this->registerVar();
        }
    }
    class class3 extends class2{
        function fu3(){
            $this->fu2();
        }
    }
    
    class class4{
    //  точка входа
    //  Этот метод, дергается ajax
        public function indexAction(){ 
            $module = new class3();
            $module->setFlag(true);  // что я передаю и надеюсь увидеть
            $module->fu3();
        }
    }
?>

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

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

Ну вот ты создал объект класса 4: $obj = new class4();

Вызвал метод: $obj->indexAction();

Внутри метода indexAction() у тебя и будет объект $module. Ты либо там же с ним продолжай что-то делать, например дополни: var_dump($module->value); тебе это $obj->indexAction(); выдаст bool(true);

Либо создавай public $module поле внутри class4 и внутри indexAction() уже пиши:

$this->module = new class3();
$this->module->setFlag(true);

А потом уже через объект обращайся, например: var_dump($obj->module->value); тебе так же выдаст bool(true)

class class1
{
    public $value;
    public $asd;

    public function setFlag($flag)
    {
        $this->value = $flag;
    }

    public function getFlag()
    {
        return $this->value;
    }

    function registerVar($name)
    {
        $this->$name = $this->value;
    }
}

class class2 extends class1
{

}

class class3 extends class2
{

}

class class4
{
    public $module;
    public function indexAction()
    {
        $this->module = new class3();
        $this->module->setFlag(true);
    }
}

$zxcv = new class4();
$zxcv->indexAction();
$zxcv->module->registerVar('asd');
var_dump($zxcv->module->asd);

Если ты внутри метода создашь просто так объект, то только внутри метода он и будет доступен, метод выполнится и все, больше ты этот объект не увидишь, и значение которое там присвоил исчезнет.

→ Ссылка