Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
Объектно-ориентированное программирование на PHP. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель MySQL 5. Авторы: Кузнецов М.В., Симдянов И.В. MySQL на примерах. Авторы: Кузнецов М.В., Симдянов И.В. C++. Мастер-класс в задачах и примерах. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5/6. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Разное

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: не могу понять для чего и как работают аксессоры __get и __set
 
 автор: iMozgoloMchik   (31.07.2011 в 22:47)   письмо автору
 
 

несли не трудно можете объяснить по подробнее
заранее спасибо

  Ответить  
 
 автор: DEM   (01.08.2011 в 00:59)   письмо автору
 
   для: iMozgoloMchik   (31.07.2011 в 22:47)
 

ну предположим у вас есть класс, хранит данные о пользователе (которые хранятся, к примеру, в БД). тогда ваш класс будет выглядеть так:


<?php

class User{

private 
$info = array();

public function 
__constructor(){
//тут мы берём данные о пользователе и помещать в массив $info
}

public function 
__get($var){
  return 
$this->info[$var];
}

}


$user = new User(/*тут вводим логин и пароль, к примеру */);
echo 
$user->mail;
?>


в этом примере при вызове $user->mail вызывается функция __get(); и вам выведется $info['mail'];

конечно можно сделать этот массив доступным (не private, а public), но это немного... не в духе ООП что ли :)

тожесамое и про __set();. Если вы хотите внести в объект класса много разной информации (к примеру тоже заполнить данные о пользователе, но ручками через форму), то намного удобнее будет писать $user->mail = "mail@mymail.ru"; чем вводить каждые новый данные через функцию (хотя у меня в классе всё равно есть такие функции. К примеру setId(), setLogin(), setPass())

Надеюсь я более-менее понятно объяснил

  Ответить  
 
 автор: Ильдар   (01.08.2011 в 01:04)   письмо автору
 
   для: DEM   (01.08.2011 в 00:59)
 

мне было более менее понятно и полезно. Я как раз только начинающий в ООП и пытаюсь всячески изучить.
только вот один вопрос есть.
Что будет если к примеру метка "mail" совпадает с методом "mail" в этом же классе?

  Ответить  
 
 автор: iMozgoloMchik   (01.08.2011 в 09:33)   письмо автору
 
   для: Ильдар   (01.08.2011 в 01:04)
 

по идее ничего, но можно попробовать

  Ответить  
 
 автор: iMozgoloMchik   (01.08.2011 в 09:30)   письмо автору
 
   для: DEM   (01.08.2011 в 00:59)
 

это как я понял позволяет создавать ассоциативные и индексные массивы
array( 0 => mail ) - __get()

array( mail => mail@mail.ru ) - __set()

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования