$this->name — свойство, но что дальше? Т.е. как понимать такие длинные конструкции? Видел в коде фреймворков и в чужом коде, но никто в попадавшихся мне видеоуроках ни разу не показал такую длинную конструкцию и что именно в ней происходит.
Ещё пример: $this->data->name = $name;
Что значит: ->data->name
Это композиция, или ассоциация. Случай когда полем класса является другой клас, имеющий свои собственные поля и методы.
Например:
class foo
{
public $nameFoo;
public someMethod()
{
return "какое то значение";
}
}
class bar
{
public $nameBar;
__construct()
{
$this->nameBar = new foo();
}
}
Тогда обращение к полю nameFoo поля nameBar (являющегося объектом класса foo) будет выглядеть так:
$item = new bar();
//обращаемся к полю (nameFoo будет присвоена строка "присваиваемое значение")
$item->nameBar->nameFoo = "присваиваемое значение";
//обращаемся к методу (будет возвращена строка "какое то значение")
$item->nameBar->someMethod()
И таких вложенностей может быть много.
В видеороках такого не рассказывают. Потому что авторы видеоуроков сами ничего не знают, а лишь как обезьяны повторяют выученные у другого такого же балбеса пару команд.
Объяснение при этом очень простое: в РНР ты всегда можешь обратиться к результату, возвращаемому переменной. Например, запись вида
$name = $array[1]["name"];
означает, что сначала мы обратились к переменной $array[1], но она тоже представляет собой массив, и мы можем сразу обратиться к его элементу ["name"]
То же самое и с объектами. Если выражение возвращает объект, то мы можем пририсовать стрелочку и обратиться к его свойству или методу. И так до бесконечности. По-английски это называется method chaining, то есть нанизывание одного метода на другой. Например в PDO можно написать так:
$id = $pdo->query("INSERT INTO t VALUES(NULL)")->insertId();
Соответственно, написать $this->data->name можно только если data - это объект.
Сборка персонального компьютера от Artline: умный выбор для современных пользователей