Помогите с учёбой.

proWoke

Новичок
Прошу совета. Хочу хорошо понять ООП В PHP. Ну вот читаю я Котерова книжку, вроде всё понятно(ну почти всё). Прочитал все главы про ООП, попробовал написать гостевуху с разной проверкой входных данных в ООП стиле. Чую, что всё помё "ООП" сводится к рассовыванию классов по папкам согласно PEAR, потом засунуть в обьект класса переменные, чтобы конструктор запустившись сделал то, что мне надо и т.д. В общем толком не понимаю, что я делаю и что мне это даёт. Пробую перечитывать, и в тоску вгоняет перечитывать тоже самое. В общем я вот, что хочу попросить. Посоветуйте какие задачки может порешать на ООП, или написать что-то такое, где я хорошо подтяну свои знания. Или перечитать все главы в книге ещё раз, пока не буду понимать каждую строчку в книге?
 

tz-lom

Продвинутый новичок
потом засунуть в обьект класса переменные, чтобы конструктор запустившись сделал то, что мне надо и т.д
хотел предложить задачу, но увидив такое решил что лучьше попросить код в студию чтобы хотябы это увидеть
P.S.
Одного_Меня_Бесит_Наименование_В_PEAR ?
 

Духовность™

Продвинутый новичок
Котеров про ООП ничего толкового не писал, у его книги другая функция - познакомить с языком PHP. Он в своей книге явно написал, что его раздел про ООП не может ни в коей мере претендовать на полноценное руководство.

http://phpclub.ru/talk/threads/помогите-врубиться-в-ООП.64945/
http://phpclub.ru/talk/threads/С-Чего-лучше-начать-изучение-правильного-ООП-точнее-mvc.62266/
 

флоппик

promotor fidei
Команда форума
Партнер клуба
Открою страшную тайну — «ООП в PHP» не бывает. Бывает просто ООП - объектно-ориентированное проектирование, которое имеет в некоторых языках (в том числе и в PHP) поддержку объектного синтаксиса. Поэтому надо просто учить объектное программирование/проектирование.
Из лучшего чтива «про ООП» до сих пор считаю Гради Буча — «Объектно-ориентированный анализ и проектирование»

Может, кто еще чего посоветует.
 

tz-lom

Продвинутый новичок
Духовность™
да,использовать namespace , благо и PHP позволяет,и редакторы
 

fixxxer

К.О.
Партнер клуба
в php неймспейсы через жопу

без фичи типа import \* затрахаешься каждый раз \ писать, а тут вам не джава, тут все стандартные функции в global namespace:(

а на код, похожиий на дамп виндового реестра, невозможно смотреть без боли
 

tz-lom

Продвинутый новичок
fixxxer
я просто организовываю себе autoload для классов,и никаких импортов
всё равно IDE не понимает подключен файл или нет и предлагает все классы проекта
может быть это и удобно писать просто имя класса вместо полного пути,но я привык писать полные пути всегда,так что у меня нет никаких проблем
 

proWoke

Новичок
хотел предложить задачу, но увидив такое решил что лучьше попросить код в студию чтобы хотябы это увидеть
P.S.
Ну вот класс, который проверяет входные данные и записывает в файл.
PHP:
<?
class Text {

	protected $fd;
	protected $text;

	public function __construct($text) {
	 $this->text = $text;
	}
	
	public function textproof() {
	 if ($this->text == "") throw new Exception("Текст не должен быть пустым");
	 elseif (strlen($this->text) > 100) throw new Exception("Слишком длинный текст");
	 if (!preg_match("/[A-Za-zА-Яа-я_ё]+/is",$this->text)) throw new Exception("Недопустимые символы");
	}

	public function texthandler($filename) {
	  $this->fd = fopen($filename, "a+");
	  fwrite($this->fd, $this->text."\n");
	}
	
	public function __destruct() {
  	 if ($this->fd) {
	  fclose($this->fd);
	 }
	}
}
Вот как создают обьекты
PHP:
if (@$_POST['button']) {

 $text = $_POST['text'];

try {
 $textobj = new Text($text);
 $textobj->textproof();
 $textobj->texthandler("text.txt");
} catch (Exception $error) { $message = $error->getMessage(); }

}

Открою страшную тайну — «ООП в PHP» не бывает. Бывает просто ООП - объектно-ориентированное проектирование, которое имеет в некоторых языках (в том числе и в PHP) поддержку объектного синтаксиса. Поэтому надо просто учить объектное программирование/проектирование.
Из лучшего чтива «про ООП» до сих пор считаю Гради Буча — «Объектно-ориентированный анализ и проектирование»

Может, кто еще чего посоветует.
Ну я понимаю, что ООП к языку не привязан. Просто книгу сейчас читать по ООП это ппц, я хочу уже прочитать купленную книгу по javascript. Мне хочется общую теорию подтянуть и на практике получше понять, чтобы, если спросят на собеседовании про ООП, я бы смог сказать, что код прочитаю и чёто напишу и вообще в курсе что это. Но я понимаю, пока нормальную литературу вдумчиво не прочту полноценно я не пойму. Ну посоветуйте задачки то какие, или что написать такого, чтобы там ООП было много? Написать свою мини CMS в ООП стиле? Под мини CMS я понимаю, сайт визитка с админкой, которая боле мне автоматизированна.
 

флоппик

promotor fidei
Команда форума
Партнер клуба
ООП в первую очередь это теория. Одна из существующих парадигм проектирования. Поэтому «на практике» ты ее не поймешь никогда.
 

tz-lom

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

флоппик,сори,а как же его тогда понять?
или ты думаешь что его можно освоить просто заучивая понятия и читая о практиках разработки?


proWoke
однако флопик говорит и о том что ООП не бывает много или мало
в CMS сложности никакой нет, объекты будут тривиальными и ничему ты не научишься
напиши лучьше калькулятор простейшей математики (+-*/, скобки , унарный минус , квадратный корень) на ООП , разворачивая строку в дерево операторов, при этом придумай такую архитектуру чтобы можно было легко вводить новые операторы , интерфейс не важен,консольный лучьше всего подойдёт
 

Духовность™

Продвинутый новичок
Духовность™
да,использовать namespace , благо и PHP позволяет,и редакторы
Не знаю как в других языках, а меня на работе ломает каждый раз прописывать пути в use. Тот же include, только сбоку.

в CMS сложности никакой нет, объекты будут тривиальными и ничему ты не научишься
Ололо. Никакой сложности нет? Простите, я не ослышался? Тривиальные объекты? Ничему не научишься? Написав CMS систему на OOP?

Ну посоветуйте задачки то какие, или что написать такого, чтобы там ООП было много? Написать свою мини CMS в ООП стиле?
Свою CMS на OOP, ровно как и фреймворк, написать тяжело. ОЧЕНЬ тяжело. Даже твоя задача гостевой книги - это нетривиальная задача, которую ГРАМОТНО решить вот так сразу - невозможно. Масса тонкостей и нюансов.

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

tz-lom

Продвинутый новичок
Ололо. Никакой сложности нет? Простите, я не ослышался? Тривиальные объекты? Ничему не научишься? Написав CMS систему на OOP?
конечно CMS написать довольно муторно,а если ещё относиться к ней как к некоторому фреймворку под который потом другие программисты могут писать модули так вообще
но серьёзно - с места сразу в карьер ?
человеку сначала прочуствовать ООП надо,понять для чего классы вообще делаются и почему сними бывает удобнее

а так да,объекты выйдут тривиальные (и где в CMS сложное ООП вы видели?) ,тем более что
Под мини CMS я понимаю, сайт визитка с админкой, которая боле мне автоматизированна.
тут вообще задача сварганить CRUD да MVC (если хочется) применить , как на этом учиться ООП я не знаю
 

Духовность™

Продвинутый новичок
объекты выйдут тривиальные
Я не понимаю, почему они выйдут тривиальные. Они будут ровно настолько сложными, насколько это будет нужно системе.

и где в CMS сложное ООП вы видели?
в CRUD как минимум. Если не использовать существующие ORM, то банальный CRUD можно бесконечно долго писать. Я писал и пишу до сих пор.


В ООП абсолютно ничего сложного нет. Сложное - это проектирование на ООП на конкретной платформе. Тот же ORM, без которого ООП в вебе нафиг не нужен в большинстве случаев.
 

AmdY

Пью пиво
Команда форума
proWoke
а ты делай как я, сразу представляй конечный результат, затем пиши код. Это приучит сразу думать, потом писать.
PHP:
/** структура данных
items:
    9:
        id: 9
        count: 1
        price: 50
    3:
        id: 3
        count: 2
        price: 100
totalPrice: 250
totalProductTypes: 2
totalCountItems: 3
*/
          $basket = new Basket();
          $basket->addItem($id, $count);
          $basket->removeItem($id);
          $basket->hasItem($id);
          $basket->getItem($id); //id, price, count
          $basket->getItems(); 	  
          $basket->getTotalPrice();
          $basket->getTotalProductsType();
          $basket->getTotalCountItems();	  
          $basket->clear();

          $shop = new Shop();
          $shop->doBuy( $basket ); //     

// можно оопэшно, но без классов
basket_addItem($id, $count);
basket_getItem($id);
basket_clear();
shop_doBuy( basket_getItems(), basket_getTotalPrice() );
в CRUD как минимум. Если не использовать существующие ORM, то банальный CRUD можно бесконечно долго писать. Я писал и пишу до сих пор.
Посмотри в моём объвлении о работе реализацию CRUD
 

proWoke

Новичок
Ух сколько всего мне понаписали, я прочитал и мало что понял, что мне делать. Начну с
proWoke

однако флопик говорит и о том что ООП не бывает много или мало
в CMS сложности никакой нет, объекты будут тривиальными и ничему ты не научишься
напиши лучьше калькулятор простейшей математики (+-*/, скобки , унарный минус , квадратный корень) на ООП , разворачивая строку в дерево операторов, при этом придумай такую архитектуру чтобы можно было легко вводить новые операторы , интерфейс не важен,консольный лучьше всего подойдёт



Только я не понял как именно мне калькулятор писать. Что значит консольный интерфейс?И как именно должен выглядеть калькулятор на PHP?
Наверное мне ещё надо теории поначитать и почитать код на ООП и со временем пойму, видимо тут таблетки нету никакой.
 
Сверху