Advertisement
Guest User

Untitled

a guest
May 31st, 2016
61
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
PHP 3.82 KB | None | 0 0
  1. <?php
  2. header("Content-type:text/html; charset=utf-8");
  3. /**
  4.  * Created by PhpStorm.
  5.  * User: evgen
  6.  * Date: 30.05.16
  7.  * Time: 21:32
  8.  */
  9. class test{
  10.     private $color="red";
  11.     public static $form="круг";//зачем писать public static, а не по одному параметру
  12.     /* Ответ: Вопрос непонятен, приведите пример написание "по одному параметру" */
  13.  
  14.     public function getColor(){
  15.         return $this->color;
  16.     }
  17.     public function setColor($color){
  18.         $this->color=$color;
  19.     }
  20.     static function setForm($form){
  21.         self::$form=$form;
  22.     }
  23.     static function getForm(){
  24.         return self::$form;
  25.     }
  26.  
  27. }
  28. class test2 extends test{
  29.     // static::$form="ellips";//почему ошибка, как тогда обращаться к статическому св-ву
  30.     //, оно же доступно из любого места кода
  31.     /* Ответ. Вне методов мы пишем объявление переменной.
  32.     Если она статическая, она объявляется как [public|private|protected] static $varName;
  33.     А далее уже используется как [self|static]::$varName внутри методов
  34.     */
  35.     public static $form="ellips"; /* Пример перезначения свойство */
  36.     static function proba(){
  37.         return static::$form="ellips";//почему я могу переназначить св-во только через метод
  38. // и почему если использую self или static код работает
  39.         /* Ответ: вы можете переназначить свойство напрямую, см. выше. И использовать его, см. ниже. */
  40.     }
  41. }
  42. echo test2::$form."\n"; /* Пример использования свойства */
  43.  
  44. $test = new test();
  45. echo $test::$form."\n";
  46. /* Ответ: Статические свойства не могут быть вызваны через ->
  47. "Static properties cannot be accessed through the object using the arrow operator ->"
  48.  
  49. А почему-то к статическим методам можно. См. в том числе объяснение ниже.
  50. На мой взгляд это создаёт путаницу.
  51.  
  52. http://php.net/manual/en/language.oop5.static.php
  53.  */
  54.  
  55.  
  56. $test->setColor("green");
  57. echo $test->getColor();
  58. $test->setForm("oval");//вызываю статическую ф-ю через объект класса, зачем тогда static
  59. test::getForm();//получается масло-масляное могу так, а могу и
  60. $test->getForm();//так, почему статическая функция вызывается через объект класса?
  61. /*
  62. Как и в Java, можно вызывать и через название класса, и через объект.
  63. Почему так? Потому что объект видит всё, что принадлежит классу, т.к. является его экземпляром.
  64. А вот через название класса можно вызывать только то, что объявлено на уровне класса, т.е. только статические методы и поля.
  65. Хотя правильно, конечно, не использовать объекты при вызове статических методов, т.к. они всё-таки объявлены на уровне класса.
  66. Чтобы не запутывать.
  67. */
  68. echo "<br>";
  69. echo test::$form;//почему не могу обратиться к свойству через объект класса($test->...)?
  70. echo "<br>";
  71. test::setForm("квадрат");
  72. echo $test->getForm();
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement