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 Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


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

> Без описания
tato
Отправлено: 26 Февраля, 2013 - 02:13:44
Post Id



Посетитель


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


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




Правила просты, исходный класс Start:

PHP:
скопировать код в буфер обмена
  1.  
  2. class Start
  3. {
  4.     protected $var;
  5.  
  6.     public fucntion __construct( $var )
  7.     {
  8.         $this->var = $var;
  9.     }
  10. }
  11.  


Первый расширяет этот класс, называет его своим ником и добовляет метод с какой-либо простой логикой(над переменой $var).

Например Я начну:
PHP:
скопировать код в буфер обмена
  1.  
  2. class Tato extends Start
  3. {
  4.     proteceted function getVar()
  5.     {
  6.         return $this->var;
  7.     }
  8. }
  9.  


Следующий расширяет мой класс, перекрывать существующие методы нельзя!
(Добавление)
Для повторного участия называйте класс NickVer2 и т.д.
(Добавление)
Использовать чужие методы конечно же можно (=


-----
просто ?: сложно
 
 Top
DeepVarvar Супермодератор
Отправлено: 26 Февраля, 2013 - 02:21:41
Post Id



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


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


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




PHP:
скопировать код в буфер обмена
  1. class DeepVarvar extends Tato
  2. {
  3.   protected $data = array();
  4.  
  5.   public function appendToData($value)
  6.   {
  7.  
  8.     if (is_array($value) or is_object($value)) {
  9.       // TODO сделать класс исключений, обернуть проверку в try catch
  10.       throw new startException("Method expects only simple values");
  11.     }
  12.  
  13.     array_push($this->data, $value);
  14.  
  15.   }
  16.  
  17. }
 
 Top
DelphinPRO
Отправлено: 26 Февраля, 2013 - 03:06:40
Post Id



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


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


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




PHP:
скопировать код в буфер обмена
  1. class DelphinPRO extends DeepVarvar {
  2.  
  3.   /**
  4.    * @return mixed
  5.    */
  6.   public function extractData()
  7.   {
  8.     return array_pop($this->data);
  9.   }
  10. }

(Отредактировано автором: 26 Февраля, 2013 - 03:13:02)



-----
Чем больше узнаю, тем больше я не знаю.
 
 Top
DeepVarvar Супермодератор
Отправлено: 26 Февраля, 2013 - 05:19:25
Post Id



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


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


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




PHP:
скопировать код в буфер обмена
  1. class DeepVarvar_Version2 extends DelphinPRO
  2. {
  3.  
  4.   public function setVar($var)
  5.   {
  6.     // TODO Тут тоже нужна проверка входных данных
  7.     // Пока без нее
  8.     $this->var = $var;
  9.   }
  10.  
  11.   public function shuffleAllAndResetVar()
  12.   {
  13.     shuffle(array_push($this->data, $this->var));
  14.     $this->setVar(null);
  15.   }
  16.  
  17. }
 
 Top
EuGen Администратор
Отправлено: 26 Февраля, 2013 - 08:01:13
Post Id


Профессионал


Покинул форум
Сообщений всего: 9095
Дата рег-ции: Июнь 2007  
Откуда: Berlin


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




PHP:
скопировать код в буфер обмена
  1. final class EuGen extends DeepVarvar_Version2
  2. {
  3.    public function __destruct()
  4.    {
  5.       return new EuGen;
  6.    }
  7. }


-----
Есть в мире две бесконечные вещи - это Вселенная и человеческая глупость. Но насчет первой .. я не уверен.
 
 Top
Vinyl
Отправлено: 26 Февраля, 2013 - 08:08:59
Post Id



Частый посетитель


Покинул форум
Сообщений всего: 645
Дата рег-ции: Янв. 2012  
Откуда: Армавир, Краснодарский край


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




Фигасе вы тут отжигаете Радость


-----
Пессимисты пользуются die(), оптимисты - exit()
 
 Top
DeepVarvar Супермодератор
Отправлено: 26 Февраля, 2013 - 08:13:30
Post Id



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


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


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




EuGen, так не чесно! Ха-ха
Посоны, даёш форк!
 
 Top
EuGen Администратор
Отправлено: 26 Февраля, 2013 - 08:16:00
Post Id


Профессионал


Покинул форум
Сообщений всего: 9095
Дата рег-ции: Июнь 2007  
Откуда: Berlin


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




Вот и я к тому. А именно - что правила неоднозначны и не защищают от "замкнутых" вариантов, когда игра завершается по причине невозможности её продолжения.
Вообще, любопытно, как далеко это бы зашло и какие методы работы в итоге бы возникли. К ООП, наверное, это все же имело бы слабое отношение (после 30-40 наследований), но тем не менее.
Можно считать мой комментарий - лишь примером и не учитывать его в дискуссии.


-----
Есть в мире две бесконечные вещи - это Вселенная и человеческая глупость. Но насчет первой .. я не уверен.
 
 Top
DelphinPRO
Отправлено: 26 Февраля, 2013 - 09:05:23
Post Id



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


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


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




CODE (bash):
скопировать код в буфер обмена
  1. git clone --branch DeepVarvar_Version2


Спойлер (Отобразить)


-----
Чем больше узнаю, тем больше я не знаю.
 
 Top
tato
Отправлено: 26 Февраля, 2013 - 09:19:12
Post Id



Посетитель


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


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




Этот так сказать тестовый заезд (=, на самом деле пока обедал такая вот идейка пришла.
А правила можно всегда поправить и выпустить 2.0 версию игры, надо бы лучше продумать.


-----
просто ?: сложно
 
 Top
EuGen Администратор
Отправлено: 26 Февраля, 2013 - 09:24:15
Post Id


Профессионал


Покинул форум
Сообщений всего: 9095
Дата рег-ции: Июнь 2007  
Откуда: Berlin


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




Суть в том, что плохо наследоваться от одной сущности. Добавить сюда, скажем, интерфейсы (стартовые), и пусть участники либо наследуются от имеющихся сущностей, либо реализуют базовый интерфейс(ы), сообразно тому, правильно ли по его (участника) ощущениям это или нет. Этим можно будет избавиться от десятков наследований, да и система получится более разветвтленная и сбалансированная.
Разумеется, стандартные интерфейсы(Traversable, Serializable и т.п.) точно так же можно реализовывать. А, возможно, стоит дать возможность добавлять и свои интерфейсы, которые станут базовыми (однако не каждый комментарий, он же "ход")


-----
Есть в мире две бесконечные вещи - это Вселенная и человеческая глупость. Но насчет первой .. я не уверен.
 
 Top
DlTA
Отправлено: 26 Февраля, 2013 - 09:27:39
Post Id



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


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


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




а еще стоит использовать иной способ хранения кода,
не в постах, а то как потом проверять валидность (отсутствие переопределения и т.д.)
а так бы компилятор проверял
(Добавление)
и договориться о версии пыха
 
 Top
OrmaJever
Отправлено: 26 Февраля, 2013 - 10:08:31
Post Id



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


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


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




Блин, а идея то интересная! Даже очень интересная, только нужно как уже многие говорили, обговорить правила, версию php и где хранить код.


-----
Если вы хотя бы 3-4 раза не решите всё выкинуть и начать заново - вы явно что-то делаете не так.
 
 Top
EuGen Администратор
Отправлено: 26 Февраля, 2013 - 10:23:10
Post Id


Профессионал


Покинул форум
Сообщений всего: 9095
Дата рег-ции: Июнь 2007  
Откуда: Berlin


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




Верно. С интерфейсами - так вообще игра в "ассоциации" выходит. Вот я напишу прототип в интерфейсе - и пусть все догадываются, что же я имел ввиду и пишут реализации.
Предлагаю условиться: версия PHP строго 5.4 - тогда, например, рефлексию можно будет использовать.
Начало:
PHP:
скопировать код в буфер обмена
  1. interface Universe
  2. {
  3.    const C = 299792458;
  4.    const h = 6.62606957;
  5.  
  6.    public function getEnergyByMass($fMass);
  7. }

PHP:
скопировать код в буфер обмена
  1.  
  2. class Reality implements Universe
  3. {
  4.    public function getEnergyByMass($fMass)
  5.    {
  6.       return is_numeric($fMass)&&$fMass>=0?$fMass*pow(Universe::C, 2):null;
  7.    }  
  8. }

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


-----
Есть в мире две бесконечные вещи - это Вселенная и человеческая глупость. Но насчет первой .. я не уверен.
 
 Top
DlTA
Отправлено: 26 Февраля, 2013 - 11:25:48
Post Id



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


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


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




может все же и тему выбрать
а то уж сильно большие ребусы получаются...
(Добавление)
а еще б хорошо описание прикручивать в корректной форме, а то только код как то не корректно.
 
 Top
Страниц (2): [1] 2 »
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Прочее »


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



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

 
Powered by ExBB FM 1.0 RC1. InvisionExBB