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]   

> Без описания
imper
Отправлено: 10 Сентября, 2012 - 10:10:11
Post Id



Частый гость


Покинул форум
Сообщений всего: 134
Дата рег-ции: Февр. 2012  
Откуда: Тольятти


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

[+]


Ребят здравствуйте, подскажите пожалуйста литературу про "перегрузка свойств классов"
читал мануал но там (лично мне) непонятно, для чего это нужно, и хотелось бы что бы "по русски" объяснили, и пояснили с примерами синтаксис и т д =-)


-----
Самое лучшее решение проблемы
самое простое
 
 Top
Okula
Отправлено: 10 Сентября, 2012 - 10:45:14
Post Id



Участник


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


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




imper, вот тебе простой пример с использованием магического метода __set()
PHP:
скопировать код в буфер обмена
  1. class A {
  2.    
  3.     private $name;
  4.    
  5.     public function __construct($name) {
  6.         $this->name = $name;
  7.     }
  8.    
  9.     public function __set($name, $value) {
  10.         $this->$name = $value;
  11.     }
  12.    
  13.     public function showHello() {
  14.         echo 'Привет, '.$this->name.'.<br>';
  15.     }
  16.    
  17. }
  18.  
  19. #------------#
  20.  
  21. $a = new A('Джон');
  22. $a->showHello();
  23. $a->name = 'Лили';
  24. $a->showHello();
 
 Top
KingStar
Отправлено: 10 Сентября, 2012 - 10:47:58
Post Id



Участник


Покинул форум
Сообщений всего: 1889
Дата рег-ции: Авг. 2011  
Откуда: Беларусь


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




не поймет, таких примеров можно привести кучу, ему разжевать нужно Подмигивание


-----
То что программа работает, не означает что она написана правильно!
 
 Top
Okula
Отправлено: 10 Сентября, 2012 - 14:40:42
Post Id



Участник


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


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




KingStar, моё дело показать пример, а его понимать как он работает Улыбка

(Отредактировано автором: 10 Сентября, 2012 - 15:20:21)

 
 Top
imper
Отправлено: 10 Сентября, 2012 - 22:14:51
Post Id



Частый гость


Покинул форум
Сообщений всего: 134
Дата рег-ции: Февр. 2012  
Откуда: Тольятти


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

[+]


вы молодцы! Радость

PHP:
скопировать код в буфер обмена
  1. http://ruseller.com/lessons.php?rub=37&id=1162



Вот развёрнутое объяснение по русски с примерами )


-----
Самое лучшее решение проблемы
самое простое
 
 Top
DlTA
Отправлено: 10 Сентября, 2012 - 23:43:57
Post Id



Постоянный участник


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


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




Okula пишет:
моё дело показать пример, а его понимать как он работает
вообще плохой пример. бессмысленный, и запутывающий.
 
 Top
Okula
Отправлено: 10 Сентября, 2012 - 23:50:25
Post Id



Участник


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


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




DlTA, и чем же плох мой пример? Он какраз показывает как перезагрузить приватное свойтство класса с помощью магического метода.
Без аргументов твоё заявление просто пустой звук.
 
 Top
DlTA
Отправлено: 10 Сентября, 2012 - 23:57:51
Post Id



Постоянный участник


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


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




аргументирую:
Okula пишет:
пример (Отобразить)

1) вопрос стоит о перегрузке свойств, нафига тут засоряет взгляд конструктор
2) если уж показываете сетер, то куда спрятался геттер.
3) вытикает из 2, смысл в функции showHello??
4) использовать имя свойства такое же как и имя скрытого поля, вводит в заблуждение ибо. опосля возникает мысль что можно только так и делать
5) где коменты???
 
 Top
Okula
Отправлено: 11 Сентября, 2012 - 00:10:52
Post Id



Участник


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


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




DlTA,
1) через конструктор я задаю первичное значение свойтву. Можно было сделать это статически
но я выбрал такой вариант.

2) не вижу смылсла объявлеть метод __get() так как тема о перезагрузке, а не об отображении приватных свойст. Тогда теряется весь смысл в значении private, потому что доступ к свойству будет возможен так же как и публичному, что опять "введёт в заблуждение" Улыбка


3) смысл метода showHello() вытекает из его названия - демонстрация приветствия. Прошу заметить что это не рабочий класс какого-то приложения, а пример. Смысл примера - доступно показать как работает перезагрузка без лишних действий.

4) не неси чепуху! Если у тебя возникает такое впечатление то стоит перечитать страницы мануала про области видимости.

5) Не вижу необходимости. Класс довольно прост и коментировать там нечего. Пользователем будет выполнен только один метод showHello(), назначение которого вытекает из названия метода (о чём я уже писал ранее).
(Добавление)
С таким же успехом я мог показать такой пример:
PHP:
скопировать код в буфер обмена
  1. class A {
  2.     public $name = 'Джон';
  3. }
  4.  
  5. #-------#
  6.  
  7. $a = new A;
  8. echo $a->name.'<br>';
  9. $a->name = 'Лили';
  10. echo $a->name.'<br>';

Теперь ничего лишнего? Радость
Правда перезагрузка методов таким способом является дурным тоном.
 
 Top
Мелкий Супермодератор
Отправлено: 11 Сентября, 2012 - 08:33:39
Post Id



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


Покинул форум
Сообщений всего: 11926
Дата рег-ции: Июль 2009  
Откуда: Россия, Санкт-Петербург


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




Главный вопрос по перегрузке - вас интересует общепринятое значение или php'шное?

Общепринятое, но неприменимое к PHP, значение перегрузки - наличие нескольких методов с одинаковым именем, но различающиеся входными аргументами. Например, разное количество аргументов или их типы. А так же переопределение значений таких операторов, как сложение.
В показательный пример не так давно я, непривычно разбалованный PHP и MySQL, уткнулся в PostgreeSQL:
select md5(23856); ->нет такой функции
select md5('23856'); ->да здравствует результат

А PHP под перегрузкой понимает всего-лишь несколько волшебных методов ( http://php.net/manual/ru/languag....overloading.php )


-----
PostgreSQL DBA
 
 Top
DlTA
Отправлено: 11 Сентября, 2012 - 13:00:56
Post Id



Постоянный участник


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


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




Okula, загляни на предложенную ссылку, вот это описание и примеры, четко, ясно и корректно.
imper пишет:
http://ruseller.com/lessons.php?rub=37&id=1162

магические там существенно ниже по странице описаны
 
 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