brussens
Мега-мастер
Дата регистрации:
11.10.2011 22:50:07
Сообщений: 438
Михаил, вот собственно ломаю уже несколько дней голову, для чего же нужны статические свойства(далее СС) и статические методы(далее СМ).
Как я понимаю, СС создаются исключительно для СМ, ведь СМ не могут работать с обычными свойствами, так ведь?
Так же СМ создаются исключительно для работы внутри класса, т.е. при работе непосредственно в контексте объекта они не должны вызываться, так?
И последнее, что хочется узнать, так это то, можно ли изменять значения статических свойств при создании объекта, или все таки нет?
Admin
Администратор
Дата регистрации:
27.05.2010 21:23:42
Сообщений: 3063
Как я понимаю, СС создаются исключительно для СМ, ведь СМ не могут работать с обычными свойствами, так ведь?
Да, однако, можно просто получать доступ к значениям этих свойств.
Так же СМ создаются исключительно для работы внутри класса, т.е. при работе непосредственно в контексте объекта они не должны вызываться, так?
Верно.
И последнее, что хочется узнать, так это то, можно ли изменять значения статических свойств при создании объекта, или все таки нет?
Нет, статические свойства принадлежат классу, а не объекту. Поэтому при создании объектов их менять нельзя.
brussens
Мега-мастер
Дата регистрации:
11.10.2011 22:50:07
Сообщений: 438
Ну к статическим свойствам я так понимаю можно обращаться при использовании конструкции self::$propertyName
, так ведь?
И ещё немного оффтоп, просто есть вопросик:
Вобщем понятно то, что конструктор вызывается при создании объекта, но что именно читает передаваемые данные, т.е. при создании метода
$object = new ClassName($name, $lastname, $age)
Кому сначала передаются в таком случае значения, полям или конструктору? Понимаю, что глупый и непонятный вопрос, но меня очень мучает ответ на него)))
Admin
Администратор
Дата регистрации:
27.05.2010 21:23:42
Сообщений: 3063
Да, это из класса так обращаются. А если из вне класса, то имя_класса::имя_поля.
Значения передаются только в конструктор. Они в поля не записываются, и записывать их туда нужно отдельно через: $this->имя_поля
brussens
Мега-мастер
Дата регистрации:
11.10.2011 22:50:07
Сообщений: 438
Значит при передаче данных при объявлении объекта нужно перечислять данные только в порядке конструктора, правильно?
Admin
Администратор
Дата регистрации:
27.05.2010 21:23:42
Сообщений: 3063
Разумеется, как в обычной функции.
brussens
Мега-мастер
Дата регистрации:
11.10.2011 22:50:07
Сообщений: 438
Спасибо, многое стало понятно) И извиняюсь, ещё один вопросик: для чего например можно использовать статические методы? На ум мне пришло только подключение с БД. И правильно ли их объявлять в абстрактном классе?
Admin
Администратор
Дата регистрации:
27.05.2010 21:23:42
Сообщений: 3063
Их нужно использовать там, где по логике не должно быть создания объектов. Например, класс, отвечающий за математические операции. Глупо создавать объект Math, чтобы просто посчитать какой-нибудь синус. Поэтому можно создать статический метод вычисления синуса аргумента и обращаться к данному методу без создания объекта.
brussens
Мега-мастер
Дата регистрации:
11.10.2011 22:50:07
Сообщений: 438
Спасибо, думаю моё понимание и взгляд новичка на статистические методы и свойства помогут при написании статьи)))