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 :: Можно ли $this->$str ?

 PHP.SU

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


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

> Описание: ООП
Elio
Отправлено: 11 Февраля, 2011 - 10:36:11
Post Id



Новичок


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


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




Добрый день, начал кодить на php сравнительно не давно. Начал писать класс для обьекта с количеством параметров около 10. Все параметры доставать с базы не особо охото. Хотелось бы их брать по потребности.

Вот что вышло:
PHP:
скопировать код в буфер обмена
  1. class People {
  2.         var $id;
  3.         var $name;
  4.         var $alt_name;
  5.         ......
  6.         function request($col){ //передается имя колонки в базе которое соответствует параметру ex. 'name'
  7.                 sql_con(); //mysql_connect;
  8.                 $query="SELECT `$col` FROM `people` WHERE `id`='$this->id' LIMIT 1;";
  9.                 $result=mysql_query($query) or die(mysql_error());
  10.                 $return = mysql_result($result, 0);
  11.                 mysql_close();
  12.                 return $return;
  13.         }
  14.         function update($col,$val){
  15.                 sql_con();
  16.                 $query="UPDATE `people` SET `$col`='$val' WHERE `id`='$this->id' LIMIT 1;";
  17.                 mysql_query($query) or die (mysql_error());
  18.                 mysql_close();
  19.         }
  20.         function __construct($id){ //имя нужно всегда где требуется id
  21.                 $this->id = $id;
  22.                 $this->name = $this->request('name');
  23.         }
  24.         function name($set=null){
  25.                 if ($set!=null){
  26.                         $this->update('name',$set);
  27.                         $this->name = $set;
  28.                 }
  29.                 if ($this->name == false) $this->name=$this->request('name');
  30.                 return $this->name;
  31.         }
  32.         function alt_name($set=null){
  33.                 if ($set!=null){
  34.                         $this->update('alt_name',$set);
  35.                         $this->alt_name = $set;
  36.                 }
  37.                 if ($this->alt_name == false) $this->alt_name=$this->request('alt_name');
  38.                 return $this->alt_name;
  39.         }
  40. //...... и пошло поехало... для каждой переменной одна и та же функция но называется по разному с разным аргументов внутри.
  41.  

хотелось бы упростить в вид.
PHP:
скопировать код в буфер обмена
  1.  
  2. function __get($col){
  3.         if(isset $this->$col) return $this->$col;
  4.         else {
  5.               sql_con(); //mysql_connect;
  6.               $query="SELECT `$col` FROM `people` WHERE `id`='$this->id' LIMIT 1;";
  7.               $result=mysql_query($query) or die(mysql_error());
  8.               $return = mysql_result($result, 0);
  9.               mysql_close();
  10.               $this->$col = $return;
  11.               return $return;  
  12.         }
  13.  

или как нибудь по другому, но что бы не копировать функции.
Заранее благодарен!
 
 Top
OrmaJever Модератор
Отправлено: 11 Февраля, 2011 - 12:27:09
Post Id



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


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


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




а зачем копировать метод если в нём всего 1 отличие?
PHP:
скопировать код в буфер обмена
  1.         function name($set=null, $name){
  2.                 if ($set!=null){
  3.                         $this->update($name,$set);
  4.                         $this->{$name} = $set;
  5.                 }
  6.                 if ($this->{$name} == false) $this->name=$this->request($name);
  7.                 return $this->{$name};
  8.         }

и 2 параметром передавать name или alt_name или то что нужно

(Отредактировано автором: 11 Февраля, 2011 - 12:28:16)



-----
Если вы хотя бы 3-4 раза не решите всё выкинуть и начать заново - вы явно что-то делаете не так.
 
 Top
Elio
Отправлено: 11 Февраля, 2011 - 12:32:44
Post Id



Новичок


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


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




все спасибо! значит вот так, можно $this->{$name}
Я многое перепробовал, как после $this-> запихнуть строку, но редактор постоянно жаловался на синтаксическую ошибку... переписал функцию с нуля и он успокоился. 8)

domo arigato!
 
 Top
OrmaJever Модератор
Отправлено: 11 Февраля, 2011 - 12:35:00
Post Id



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


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


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




а тоесть вопрос заключался в этой конструкции? $this->{$name}
Так же можно передавать имя переменых
PHP:
скопировать код в буфер обмена
  1. $name = 'login';
  2. $login = 'OrmaJever';
  3. echo ${$name};


-----
Если вы хотя бы 3-4 раза не решите всё выкинуть и начать заново - вы явно что-то делаете не так.
 
 Top
Elio
Отправлено: 11 Февраля, 2011 - 12:40:46
Post Id



Новичок


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


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




забавно... спасибо буду знать.
 
 Top
JustUserR
Отправлено: 12 Февраля, 2011 - 12:42:04
Post Id



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


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


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




Elio пишет:
Я многое перепробовал, как после $this-> запихнуть строку, но редактор постоянно жаловался на синтаксическую ошибку
Предполагаемая форма обращения к свойствуц или методу объекта основанная на использовании базовой ссылки и идентификатора ассоциированного элемента из описания класса - в действительности осуществляет функционирование на основе проведения неявного преобразования выражения $this->func(args) в виде class::func(&$this,args) для встроенных методов и хранения параметров в ассоциативном массиве для информационных полей


-----
Сделать можно все что угодно - нужно только старание, терпение и хороший поисковик Улыбка
Безлимитный web-хостинг от 15 рублей за 40 МБ дискового пространства - http://ihost[dot]oks71[dot]ru/
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Программирование на PHP »


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



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

 
Powered by ExBB FM 1.0 RC1. InvisionExBB