The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]

форумы  помощь  поиск  регистрация  майллист  ВХОД  слежка  RSS
"хитрый член класса"
Вариант для распечатки  
Пред. тема | След. тема 
Форумы WEB технологии (Public)
Изначальное сообщение [Проследить за развитием треда]

"хитрый член класса"  
Сообщение от GHopper email on 15-Фев-07, 06:16 
Здравствуйте!
PHP4. Есть некоторый php-класс c двумя функциями-членами:

class CClass {
  var x = NULL;
  var y = NULL;
  
  function incX () {
    $this->x = $this->x + 1;
  }

  function incY () {
    $this->y = $this->y + 1;
  }
}

Как создать такую функцию-член, которая принимала бы входным параметром имя члена этого класса и выполняла действия над ним? Тоесть так:

...

function inc ($member) {
//$member - строка с названием переменной (в моем случае либо "x"
//либо "y"
  $this->$member = $this->$member + 1;
}

...

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

 Оглавление

Сообщения по теме [Сортировка по времени, UBB]


1. "хитрый член класса"  
Сообщение от prog email on 15-Фев-07, 08:42 
mojete delat tak

function incremet(&$member){
    $member++;
}

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

2. "хитрый член класса, но зачем хитрить?"  
Сообщение от XAnder (ok) on 15-Фев-07, 08:43 
>PHP4. Есть некоторый php-класс c двумя функциями-членами:
>
>class CClass {
>  var x = NULL;
>  var y = NULL;
>
>  function incX () {
>    $this->x = $this->x + 1;
>  }
>
>  function incY () {
>    $this->y = $this->y + 1;
>  }
>}
>
>Как создать такую функцию-член, которая принимала бы входным параметром имя члена этого
>класса и выполняла действия над ним? Тоесть так:
>
>...
>
>function inc ($member) {
>//$member - строка с названием переменной (в моем случае либо "x"
>//либо "y"
>  $this->$member = $this->$member + 1;
>}
>
>...

В четвертом PHP фокус с такой функцией inc($member) прокатывает, насчет пятого не знаю. В конце концов, можно придумать что-то вроде:

function inc ($member) {
   switch ($member) {
      "x": $this->incX(); break;
      "y": $this->incY(); break;
      ...
      default: die("Ой! Не знаю, кто такой $member!");
   }
}

Можно еще вызывать методы так, но это извращение:

call_user_method("inc$member", $object);

Но если задуматься, то такой подход противоречит объектно-ориентированной идеологии. Пользователь объекта не должен задумываться, какие переменные объявлены внутри класса. Он рулит объектом в целом с помощью методов.

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

Архив | Удалить

Индекс форумов | Темы | Пред. тема | След. тема
Оцените тред (1=ужас, 5=супер)? [ 1 | 2 | 3 | 4 | 5 ] [Рекомендовать для помещения в FAQ]




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру