URL: https://www.opennet.me/cgi-bin/openforum/vsluhboard.cgi
Форум: vsluhforumID8
Нить номер: 4693
[ Назад ]

Исходное сообщение
"хитрый член класса"

Отправлено GHopper , 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;
}

...


Содержание

Сообщения в этом обсуждении
"хитрый член класса"
Отправлено prog , 15-Фев-07 08:42 
mojete delat tak

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


"хитрый член класса, но зачем хитрить?"
Отправлено XAnder , 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);

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