Я изучил php как функциональный и процедурный язык. Прямо сейчас попробуйте начать объективно ориентироваться и получить важный вопрос.
У меня есть код:
class car { function set_car($model) { $this->model = $model; } function check_model() { if($this->model == "Mercedes") echo "Good car"; } } $mycar = new car; $mycar->set_car("Mercedes"); echo $mycar->check_model();
Почему он работает без объявления $ model?
var $model;
в начале?
Потому что в php работает «авто-декларация» для любых переменных? Я застрял
Каждый объект в PHP может получить участников без объявления их:
$mycar = new car; $mycar->model = "Mercedes"; echo $mycar->check_model(); # Good car
Это поведение PHP по умолчанию. Это публично. См. Руководство .
Да, если он не существует, PHP объявляет его «на лету» для вас.
В любом случае это более элегантно, и при работе с extends это рекомендуется, потому что вы можете получить странные ситуации, если ваши расширения будут использовать одни и те же имена, а также не будут определять его как закрытые, защищенные, так и общедоступные.
Дополнительная информация: http://www.php.net/manual/en/language.oop5.visibility.php
Члены класса PHP могут быть созданы в любое время. Таким образом, это будет рассматриваться как общедоступная переменная. Чтобы объявить приватную переменную, вам нужно объявить ее.
Нет, это потому, что $ model является аргументом функции set_car. Аргументы не являются точно переменными, а заполнителями (ссылками) к переменным или значениям, которые будут установлены при вызове функции (или метода класса). Например, модель $ принимает значение «Мерседес» при вызове set_car.
Да. Но таким образом переменные будут публичными. А переменная класса объявления как «var» устарела – использовать общедоступную, защищенную или приватную.