Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: статические методы

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (1): [1]   

> Описание: теория
Faab
Отправлено: 17 Февраля, 2013 - 23:31:12
Post Id


Гость


Покинул форум
Сообщений всего: 80
Дата рег-ции: Апр. 2012  


Помог: 0 раз(а)




прочитал обзац про статические методы: 3 страницы.

Вывод автора книги: создавать статические методы удобно потому что:

- статические методы доступны из любой точки сценария.

- так можно избежать создание класса, ради вызова простой функции.

- статическое свойство доступно каждому экземпляру класса.

Последний пункт мне не понятен с точки зрения обычных методов. Разве нестатическое свойства не доступно каждому экземпляру класса?
 
 Top
DelphinPRO
Отправлено: 17 Февраля, 2013 - 23:47:13
Post Id



Активный участник


Покинул форум
Сообщений всего: 7187
Дата рег-ции: Февр. 2012  


Помог: 353 раз(а)




PHP:
скопировать код в буфер обмена
  1. class A {
  2.   public static $property_static = 1;
  3.   public $property = 1;
  4.   function getStatic(){
  5.     return self::$property_static;
  6.   }
  7.   function setStatic($var){
  8.     self::$property_static = $var;
  9.   }
  10. }
  11.  
  12. $a = new A;
  13. $b = new A;
  14.  
  15. $a->property = 10;
  16.  
  17. echo $a->property; // 10
  18. echo $b->property; // 1
  19.  
  20. $a->setStatic(100);
  21. echo $a->getStatic(); // 100
  22. echo $b->getStatic(); // 100

(Отредактировано автором: 17 Февраля, 2013 - 23:47:33)



-----
Чем больше узнаю, тем больше я не знаю.
 
 Top
Faab
Отправлено: 18 Февраля, 2013 - 00:00:53
Post Id


Гость


Покинул форум
Сообщений всего: 80
Дата рег-ции: Апр. 2012  


Помог: 0 раз(а)




DelphinPRO пишет:


Вроде нашёл разницу в Вашем примере. Радость Я правильно понимаю: задавая статическое свойство, мы задаём это свойство для всех (уже созданных) экземпляров?

(Отредактировано автором: 18 Февраля, 2013 - 00:02:08)

 
 Top
DelphinPRO
Отправлено: 18 Февраля, 2013 - 00:07:52
Post Id



Активный участник


Покинул форум
Сообщений всего: 7187
Дата рег-ции: Февр. 2012  


Помог: 353 раз(а)




Faab пишет:
Я правильно понимаю: задавая статическое свойство, мы задаём это свойство для всех (уже созданных) экземпляров?
не совсем.
статический метод или свойство - это метод\свойство класса, а не объекта. Класс у вас всегда один. Не бывает двух одинаковых классов. Поэтому и статическое свойство одно.


-----
Чем больше узнаю, тем больше я не знаю.
 
 Top
OrmaJever Модератор
Отправлено: 18 Февраля, 2013 - 00:41:54
Post Id



Активный участник


Покинул форум
Сообщений всего: 7540
Дата рег-ции: Янв. 2010  
Откуда: Чернигов


Помог: 299 раз(а)




Что бы было проще понять, разделите для себя на классы и обьекты.
Класс - один, обьектов - много.
Статические свойства/методы пренадлежат классу, а остальные обьектам.
Вывод: статические свойства/методы - едины для всех обьектов, простые - уникальны для каждого обьекта.


-----
Если вы хотя бы 3-4 раза не решите всё выкинуть и начать заново - вы явно что-то делаете не так.
 
 Top
Faab
Отправлено: 18 Февраля, 2013 - 11:53:07
Post Id


Гость


Покинул форум
Сообщений всего: 80
Дата рег-ции: Апр. 2012  


Помог: 0 раз(а)




Примитивно перефразировав приведённый пример, вроде я понял суть примера:

CODE (htmlphp):
скопировать код в буфер обмена
  1. [PHP]
  2. class StaticTest {
  3.     public $common_variable = "Good morning";
  4.     public static $static_variable = "Good night";
  5.  
  6.     public function getHello () {
  7.         return $this->common_variable;
  8.     }
  9.    
  10.     public function sayHello ($ll) {
  11.         return $this->common_variable = $ll;
  12.     }
  13.    
  14.     public static function getBye(){
  15.         return self::$static_variable;
  16.     }
  17.    
  18.     public static function sayBye ($bb){
  19.         return self::$static_variable = $bb;
  20.     }
  21. }
  22.  
  23. $a = new StaticTest ();
  24. $b = new StaticTest ();
  25.  
  26. echo "{$a->getHello()}<br>";
  27. echo "{$b->getHello()}<br><br>";
  28.  
  29. $a->sayHello("Hello");
  30.  
  31. echo "{$a->getHello()}<br>";
  32. echo "{$b->getHello()}<br><br>";
  33.  
  34. //--------------------
  35.  
  36. echo "{$a->getBye()}<br>";
  37. echo "{$b->getBye()}<br><br>";
  38.  
  39. $a->sayBye("Bye");
  40.  
  41. echo "{$a->getBye()}<br>";
  42. echo "{$b->getBye()}<br><br>";
  43. [/PHP]


У меня ещё вопрос. Мы легко можем вывести обычное свойство напрямую через (без функции get() ):

CODE (htmlphp):
скопировать код в буфер обмена
  1. echo "{$a->common_variable}";


Со статическим свойством такой фокус закончиться ошибкой:

Strict Standards: Accessing static property StaticTest::$static_variable as non static in...

Notice: Undefined property: StaticTest::$static_variable in ...


Дело в неправильном обращение, тупо синтакс? Или так вообще нельзя делать?
 
 Top
DelphinPRO
Отправлено: 18 Февраля, 2013 - 12:07:55
Post Id



Активный участник


Покинул форум
Сообщений всего: 7187
Дата рег-ции: Февр. 2012  


Помог: 353 раз(а)




Faab пишет:
echo "{$a->getBye()}<br>";

Это, извините, извращение


Faab пишет:
Со статическим свойством такой фокус закончиться ошибкой


PHP:
скопировать код в буфер обмена
  1. echo StaticTest::$static_variable;

(Отредактировано автором: 18 Февраля, 2013 - 12:08:22)



-----
Чем больше узнаю, тем больше я не знаю.
 
 Top
Faab
Отправлено: 18 Февраля, 2013 - 12:23:09
Post Id


Гость


Покинул форум
Сообщений всего: 80
Дата рег-ции: Апр. 2012  


Помог: 0 раз(а)




Спасибо за помощь. Вроде статические свойства/функции стали немного понятнее. Надеюсь я смогу их различать в чужом коде и увижу как они используются в практике)). Спасибо.
 
 Top
OrmaJever Модератор
Отправлено: 18 Февраля, 2013 - 15:04:14
Post Id



Активный участник


Покинул форум
Сообщений всего: 7540
Дата рег-ции: Янв. 2010  
Откуда: Чернигов


Помог: 299 раз(а)




Статические свойства и методы похожи на простые функции просто обьеденёные в класс, но к ним всётаки можно обращатся и из обьекта, не только по имени класса.
PHP:
скопировать код в буфер обмена
  1. class A {
  2.         public static $a = 1;
  3.         public $b = 2;
  4. }
  5. $A = new A();
  6. echo $A::$a;
  7. echo $A->b;


-----
Если вы хотя бы 3-4 раза не решите всё выкинуть и начать заново - вы явно что-то делаете не так.
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Вопросы новичков »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB