Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- <?php
- header("Content-type:text/html; charset=utf-8");
- /**
- * Created by PhpStorm.
- * User: evgen
- * Date: 30.05.16
- * Time: 21:32
- */
- class test{
- private $color="red";
- public static $form="круг";//зачем писать public static, а не по одному параметру
- /* Ответ: Вопрос непонятен, приведите пример написание "по одному параметру" */
- public function getColor(){
- return $this->color;
- }
- public function setColor($color){
- $this->color=$color;
- }
- static function setForm($form){
- self::$form=$form;
- }
- static function getForm(){
- return self::$form;
- }
- }
- class test2 extends test{
- // static::$form="ellips";//почему ошибка, как тогда обращаться к статическому св-ву
- //, оно же доступно из любого места кода
- /* Ответ. Вне методов мы пишем объявление переменной.
- Если она статическая, она объявляется как [public|private|protected] static $varName;
- А далее уже используется как [self|static]::$varName внутри методов
- */
- public static $form="ellips"; /* Пример перезначения свойство */
- static function proba(){
- return static::$form="ellips";//почему я могу переназначить св-во только через метод
- // и почему если использую self или static код работает
- /* Ответ: вы можете переназначить свойство напрямую, см. выше. И использовать его, см. ниже. */
- }
- }
- echo test2::$form."\n"; /* Пример использования свойства */
- $test = new test();
- echo $test::$form."\n";
- /* Ответ: Статические свойства не могут быть вызваны через ->
- "Static properties cannot be accessed through the object using the arrow operator ->"
- А почему-то к статическим методам можно. См. в том числе объяснение ниже.
- На мой взгляд это создаёт путаницу.
- http://php.net/manual/en/language.oop5.static.php
- */
- $test->setColor("green");
- echo $test->getColor();
- $test->setForm("oval");//вызываю статическую ф-ю через объект класса, зачем тогда static
- test::getForm();//получается масло-масляное могу так, а могу и
- $test->getForm();//так, почему статическая функция вызывается через объект класса?
- /*
- Как и в Java, можно вызывать и через название класса, и через объект.
- Почему так? Потому что объект видит всё, что принадлежит классу, т.к. является его экземпляром.
- А вот через название класса можно вызывать только то, что объявлено на уровне класса, т.е. только статические методы и поля.
- Хотя правильно, конечно, не использовать объекты при вызове статических методов, т.к. они всё-таки объявлены на уровне класса.
- Чтобы не запутывать.
- */
- echo "<br>";
- echo test::$form;//почему не могу обратиться к свойству через объект класса($test->...)?
- echo "<br>";
- test::setForm("квадрат");
- echo $test->getForm();
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement