Вопрос по работе с свойствами класса

211
28 октября 2017, 17:54

Здравствуйте, хочу реализовать одну вещь, суть ее в следующем: Есть класс А, в нем метод method и свойство atribute и файл, например index.php. В файле создается экземпляр класса А.

$object = new A();
$object->method();

Однако мне нужно, чтобы свойство я мог получить только после вызова этого метода, т.е. IDE мне подсказывает, что я могу после $object-> выбрать ИЛИ $atribute ИЛИ method(); Нужно, чтобы $atribute я мог получить ТОЛЬКО после вызова method(), например:

$object->method()->atribute;.

Как это можно сделать?

Answer 1

не претендует на ответ, но то что вы описываете обычно выглядит примерно так:

class InnerA {
    public $name = "namenamename";
}

class A {
    private $inner = null;

    public function myMethod(){
        if(!$this->inner){
            $this->inner = new InnerA();
        }
         return $this->inner;
    }
}

$a = new A();
print $a->myMethod()->name;

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

Answer 2

Разобрался

class A
{
    public $atribute;
    protected function method() 
    {
        $this->atribute = "Hello, World";
        return $this->atribute
    }
}
class B extends A
{
    protected $test;
    public function test()
    {
        $this->test = new A();
        $this->test->method();
        return $this->test;
    }
}
$object = new B();
$object->test->test()->atribute;
READ ALSO
Почему JIRA REST API не пускает LDAP пользователей?

Почему JIRA REST API не пускает LDAP пользователей?

Через JIRA REST API создаю инциденты с корпоративного сайтаС логином админа и агентов все работает, а с остальными пользователями (тянутся из LDAP) проблема

228
Вставка символов юникода в строку

Вставка символов юникода в строку

ЗдравствуйтеСайт работает в кодировке Windows-1251, в том числе и соединение с базой MySQL

205
Learn, Share, Build

Learn, Share, Build

I make repository in githubRegister it in packagist

150