PHP Object Dynamic Binding, существует ли такой термин?

Я знаю, что если $var НИКОГДА не объявляется, его можно объявить С помощью подобъекта, такого как $var->mysubvar=1; Но если $var = «123» будет упомянуто заранее, то $var->mysubvar=1 вызовет ошибку. Как заявлено заранее

Я слышал, что это называется «Динамическое связывание». Но когда я на самом деле изучаю этот термин, я не могу найти такое описание в руководстве по PHP, которое соответствует этому сценарию и поведению.

Это поведение называется «Динамическое связывание»? Есть ли для него конкретное название. Но если это имя, то почему руководство по PHP не включает такую ​​технику или поведение?

Вопрос в том, как назвать такое поведение, при котором не нужно объявлять объект заранее, и объект будет автоматически сгенерирован, если будет объявлен подобъект. (например, javascript не позволит манипулировать объектом, не выполнив сначала var myvar=1 (или эквивалент).)

Ответ: Ах да, это действительно связано с динамической типизацией. Что такое динамическая типизация?


person Ezeewei    schedule 23.10.2014    source источник
comment
какой у Вас вопрос?   -  person rojoca    schedule 24.10.2014
comment
@rojoca Обновил вопрос   -  person Ezeewei    schedule 24.10.2014
comment
Я думаю, что это больше связано с динамической типизацией, чем с динамической привязкой.   -  person Mr. Llama    schedule 24.10.2014
comment
@ Mr.Llama Да, это так. Спасибо!   -  person Ezeewei    schedule 24.10.2014


Ответы (1)


Упомянутая вами проблема связана с динамической типизацией, а не обязательно с динамической привязкой. Это описано в документации PHP по типам переменных.

Тип переменной обычно не устанавливается программистом; скорее, это определяется PHP во время выполнения в зависимости от контекста, в котором используется эта переменная.

Причина, по которой ваши примеры выдают ошибки, связана с несоответствием типов.
Например, если $var не задано, выполнение $var->mysubvar = 1 создаст $var как объект. Попытка следовать за ним с помощью $var = 5 приведет к ошибке, поскольку ваша предыдущая команда указывала, что $var будет объектом, а не скаляром.

person Mr. Llama    schedule 23.10.2014