доступ к полному набору данных объекта из другого класса в основной класс

#php

#php

Вопрос:

Я долго искал решение этой проблемы, но безуспешно, поэтому я публикую в качестве последнего средства в надежде, что кто-нибудь сможет мне помочь.

 
class Main
{
    private $data = array();

    private $a;
    private $b;

    function __contruct()
    {
    }

    public function a()
    {
        if (!is_object($this->a))
        {
            $this->a = new A();
        }

        return $this->a;

    }

    public function b()
    {
        if (!is_object($this->b))
        {
            $this->b = new B();
        }

        return $this->b;

    }

    protected function set_data($value)
    {
        $this->data = $value;
    }
}

class A extends Main
{
    function __contrust()
    {
        parent::_construct();
    }

    public function test($value)
    {
        $this->set_data($value);

        return $this;
    }
}

class B extends Main
{
    function __contrust()
    {
        parent::_construct();
    }

    public function test($value)
    {
        $this->set_data($value);

        return $this;
    }

    public function get_data()
    {
        print_r($this->a);
    }
}

$m = new Main();
$m->a()->test('add A class data');
$m->b()->test('add B class data');
$m->b()->get_data(); // want to use class A object data here
  

Редактировать

 
[a:private] => A Object
        (
            [data:private] => Array
                (
                    [0] => Array
                        (
                            [name] => foo
                            [data] => 65
                        )
                    [1] => Array
                        (
                            [name] => bar
                            [data] => 65
                        )
                )

            [a:private] => 
            [b:private] => 
        )
  

У меня есть метод в основном классе, который находит ключ имени, который я ищу, и возвращает его индекс, чтобы я мог манипулировать его данными, которые отлично работают из его вызывающего класса. Однако класс B должен иметь возможность возвращать свои собственные данные обратно в массив данных, а также получать доступ к данным объекта класса A, чтобы я мог манипулировать его данными.

Итак, как вы можете видеть, после создания экземпляра основного класса и запуска класса я хочу иметь возможность использовать объектные данные A в моем классе B…

Был бы очень признателен за любую возможную помощь.

Спасибо,

Даррен

Комментарии:

1. Надеюсь, вам будет проще объяснить, чего вы пытаетесь достичь с помощью этого, т. Е. Почему вы думаете, что вам это нужно, чем нам объяснять, что с этим не так 😉

2. Привет, VolkerK… я сделаю все возможное, чтобы объяснить 🙂 В принципе, у меня есть основной класс для настройки / получения данных и т.д., Затем у меня есть 7 или около того классов, которые выходят за его пределы, каждый из которых устанавливает свои собственные различные данные обратно в основной. Теперь один из этих классов добавляет ключ имени для каждых данных, которые он создает, в основной массив данных. Итак, мне нужно иметь доступ к этому ключу name из другого класса, чтобы я мог обновлять / добавлять больше элементов в «его» массив. Не уверен, имеет ли это смысл или нет, в противном случае я могу отредактировать основной пост и предоставить больше информации?

Ответ №1:

Это код, который вам может понадобиться:

 class Main
    {
        private $data = array();

        protected $a;
        protected $b;

        function __construct()
        {
        }

        public function a()
        {
            if (!is_object($this->a))
            {
                $this->a = new A();
            }

            return $this->a;

        }

        public function b()
        {
            if (!is_object($this->b))
            {
                $this->b = new B();
            }

            return $this->b;

        }

        protected function set_data($value,$object)
        {
            $object->data = $value;
        }
    }

    class A extends Main
    {
        function __contruct()
        {
            parent::_construct();
        }

        public function test($value,$object)
        {
            $this->set_data($value,$object);

            return $this;
        }
    }

    class B extends Main
    {
        function __contruct()
        {
            parent::_construct();
        }

        public function test($value,$object)
        {
            $this->set_data($value,$object);

            return $this;
        }

        public function get_data()
        {
            print_r($this);
        }
    }

    $m = new Main();
    $m->a()->test('add A class data',$m->b());
    $m->b()->test('add B class data',$m->a());
    $m->b()->get_data(); // want to use class A object data here
  

и это результат:

 B Object
(
    [data:private] => add A class data
    [a:protected] =>
    [b:protected] =>
)
  

Комментарии:

1. привет, K102, спасибо, но не совсем то, что я ищу, поскольку данные в объектах A и B меняются местами, а также означают, что все цепочки методов должны были бы передавать параметр object… $m-> b()-> test(‘добавить данные класса B’, $ m-> a())->method(‘abc’, $ m->a())->method1(‘cde’, $ m-> a()); что непрактично … но я ценю ответ