Как делать не надо

1. Артур (19.06.2013 / 19:35)
Добрый день.

Решил что эта тема будет интересна многим. Курс видео-обзоров на тему - Как не надо программировать на PHP.

1. Класс-сущность (Active Record)
2. Супер-класс
2. Pagination

Выкладывайте свои классы на рассмотрения для продолжения видео-обзора.

2. Вантуз-мен (19.06.2013 / 20:00)
Молодец, только подсветка в редакторе конечно не айс
пока смотрю

3. Артур (19.06.2013 / 20:17)
2. Vantuz, вопрос вкуса

4. Антон (19.06.2013 / 20:44)
1. Башка, жаль я удалил свой класс(обертку) для прикрепления файлов на форуме движка RotorCMS. Там 100% куча ошибок тк я самоучка, хоть все и работало как мне надо.

5. Вантуз-мен (19.06.2013 / 21:48)
Все же сейчас приходят к единому стандарту, отступ tab
и фигурные скобки
if ()
{
}

6. Ant0ha (19.06.2013 / 22:24)
https://github.com/php-fig/fig-standards/tree/master/accepted

Самое актуальное сейчас по стандартам оформления кода.

7. Ant0ha (19.06.2013 / 22:35)
> Code MUST use 4 spaces for indenting, not tabs.

8. Артур (19.06.2013 / 23:36)
Воу воу... В видео мое мнение по поводу форматирования и его я аргументировал. Я считаю что мой подход наиболее достаточный для наглядности, но я нисколько не настаиваю, об этом я упомянул ) Формат это тоже дело вкуса

9. Ant0ha (19.06.2013 / 23:53)
ты пишешь о том "как делать не надо" и сам делаешь так как не надо делать.

10. Михаил (19.06.2013 / 23:57)
Это дело привычки чуть более чем полностью

11. Ant0ha (20.06.2013 / 00:19)
Если работать в команде, то привычки каждого создадут бардак. Есть четко расписанные стандарты, следовать им стоит.

12. Михаил (20.06.2013 / 00:22)
Ant0ha (20 Июня 2013 / 00:19)
Если работать в команде, то привычки каждого создадут бардак. Есть четко расписанные стандарты, следовать им стоит.
Если работать в команде, то достаточно договориться следовать одному стилю в оформлении. А от того будет ли выбран в качестве отступа табулятор или 4 пробела ничего не изменится

13. Ant0ha (20.06.2013 / 00:24)
Вот тебе и договор ведущих php разработчиков всего мира. Нахрена эти посиделки у костра?

14. Михаил (20.06.2013 / 00:26)
их посиделки у костра мало кому нужны))

15. Ant0ha (20.06.2013 / 00:27)
глупости

Добавлено через 05:07 сек.
PSR-0, например, определяет стандарты автолоадинга. Ты можешь создать свою библиотеку, разместить ее на packagist.org и быть уверенным, что эта библиотека без плясок с бубнами будет работать в проектах, использующих composer (Symfony 2, Laravel 4 и тп).

16. Артур (20.06.2013 / 00:42)
Ant0ha (19 Июня 2013 / 23:53)
ты пишешь о том "как делать не надо" и сам делаешь так как не надо делать.
я говорю о том, как делать не надо по моему личному мнению. Нет общепринятых и одновременно обязательных требований к форматированию кода, потому пока я делаю как надо )

Добавлено через 03:36 сек.
По поводу форматирования стоит создать отдельную тему и я с удовольствием в ней поучаствую )

17. Удаленный (20.06.2013 / 06:50)
Ребят, а чем .txt от .dat отличается ? И в чем лучше хранить бинарные данные ?

18. Артур (20.06.2013 / 10:31)
))) буквами после последней точки

19. Михаил (20.06.2013 / 10:39)
KuDaJIKuH (20 Июня 2013 / 06:50)
Ребят, а чем .txt от .dat отличается ? И в чем лучше хранить бинарные данные ?
хоть горшком назови только в печь не ставь

20. Станислав (20.06.2013 / 10:47)
Пробелами пользоваться полезнее. Как минимум, это приучает к хорошему тону.

21. Михаил (21.06.2013 / 17:44)
Может сайт откроешь с уроками? Думаю будет спрос

22. Андрюха (21.06.2013 / 17:57)
Форматирование дело вкуса, здесь спорить смысла нет. Когда работаешь в команде, обговариваешь сразу стиль, а так...

23. Артур (21.06.2013 / 18:00)
О форматировании я заговорил только для того, чтобы акцентировать внимание на разрозненность формата в примере и научить пользователей все таки задуматься о форматировании

Добавлено через 00:13 сек.
Открою, как время появится открою

24. Валерий (21.06.2013 / 18:22)
Очень сложно смотреть такое длинное видео.. целый час идёт..
Думаю лучше рассматривать отдельные маленькие вопросы минут по 10-15 каждый

25. Валерий (21.06.2013 / 18:45)
К тому же 10-15 минутное видео легче обсудить, высказать свои замечания.. А то щас вот хочется сказать что-то, но пока видео досмотришь, уже забываешь с чем там в начале был не согласен..

26. Михаил (21.06.2013 / 18:47)
По-поводу исключений - неужели отлавливать исключения каждый раз при вызове метода объекта удобнее, чем написать что-то вроде
<? if(!$dir->recovery()){
//echo $dir->error; // 
}


27. Валерий (21.06.2013 / 19:32)
Не понял что это такое? Когда и где используется обратный слэш в параметрах функции?
function example(){\$var}
Где про это почитать?

28. Михаил (21.06.2013 / 19:43)
valerik (21 Июня 2013 / 19:32)
Не понял что это такое? Когда и где используется обратный слэш в параметрах функции?
function example(){\$var}
Где про это почитать?
http://habrahabr.ru/post/132736/

29. Артур (21.06.2013 / 23:50)
25. valerik, так этож специально, чтоб не спорили ))))

Добавлено через 01:06 сек.
26. Flyd, вопрос не удобства, вопрос качества и читаемости. Есть механизм исключений, и есть механизм их отлова. Коды ошибок - устарело. Иногда лучше сделать сложнее, но качественее, как в случае с исключениями. Лучше пользуйтесь ими, советую

Добавлено через 01:59 сек.
2. Супер-класс

30. iNeeXT (22.06.2013 / 01:08)
Напишу свой класс для работы с протоколом IRC и выложу для видео.
Рассмотришь, когда будет время.

31. Михаил (22.06.2013 / 01:21)
Башка (21 Июня 2013 / 23:50)
26. Flyd, вопрос не удобства, вопрос качества и читаемости. Есть механизм исключений, и есть механизм их отлова. Коды ошибок - устарело. Иногда лучше сделать сложнее, но качественее, как в случае с исключениями. Лучше пользуйтесь ими, советую
Я что-то не улавливаю улучшение читаемости от того, что написать
<?php 
if(!$dir->recover()){
// $dir->error;
}
И
<?
try {$dir->recover()
} catch (Exception $e) {
    echo 'Выброшено исключение: ',  $e->getMessage(), "\n";
}


32. Артур (22.06.2013 / 11:36)
Постараюсь объяснить.
Ошибка в ОО коде ведет к принудительному завершению выполнения, если ошибка не обрабатывается (The Diaper Pattern Stinks), это нужно для того, чтобы не оставлять в системе не обработанные ошибки. Вообще, если дать волю программистам, они никогда не будут смотреть в свойство $dir->error, а try..catch заставляет это делать, иначе бяда. Потому этот подход хоть и несколько страдает в читаемости в общем смысле, зато делает процесс обработки ошибок более строгим.

33. Валерий (22.06.2013 / 13:04)
Я вижу преимущество исключений вот в чём.
Допустим есть функция, она внутри себя использует ещё какую то функцию, та в свою очередь может использовать ещё что-то..
<?php
function one(){
  //Проверяем что-то, выбиваем ошибку
   if($something){
  throw new Exception('Тут ошибка чувак');
   }
  //Используем ещё какую то функцию
   $a = secondFunc();
}

function secondFunc(){
    //Проверяем что-то, выбиваем ошибку
   if($something){
    throw new Exception('Тут ошибка чувак во второй функции');
   }
  //А тут используем ещё какую то функцию
   $b = thirdFunc();
}

function thirdFunc(){
//Проверяем что-то, выбиваем ошибку
   if($something){
    throw new Exception('Тут ошибка чувак в 3ей функции');
   }
}


//А в итоге мы обрабатываем сразу все возможные внутри ошибки одним движением

try{
$a = one();
}catch(Exception $e){
echo $e->getMessage();
}
?>
Вот в чём удобство то. Все возможные ошибки обрабатываются одним движением, при этом внутри всех этих функций не нужны ни какие свои механизмы обработки ошибок. Как это будет старым способом выглядеть? Хреново будет выглядеть старым способом.

34. Михаил (22.06.2013 / 21:56)
Понял, спасибо

35. GodZiLLa (23.06.2013 / 20:56)
33. valerik, ну да в общем то,
в первом варианте индокод получается,
а во втором как надо ))

36. Артур (24.06.2013 / 00:18)
Слава героям
http://www.youtube.com/watch?v=mUr28o8h1pg

37. Изнаур (27.06.2013 / 12:13)
https://github.com/Reistlin/yandexApi/blob/master/ApiYandex.php если не сложно рассмотри,особенно интересует правильно ли я использовал public,protected,private?и как лучше было бы написать выбрасывание исключений?

38. Артур (28.06.2013 / 20:49)
37. Iznaur95, в твоем коде так мало ошибок, за которые можно зацепиться, что мне стыдно за них цепляться. Потому видеообзор на этот код делать не буду.

39. Артур (28.06.2013 / 22:11)
3. Pagination
http://www.youtube.com/watch?v=l2xaiGHvdsc
http://youtu.be/G6lsKHjlXoA

40. Ant0ha (29.06.2013 / 17:20)
Iznaur95 (27 Июня 2013 / 12:13)
https://github.com/Reistlin/yandexApi/blob/master/ApiYandex.php если не сложно рассмотри,особенно интересует правильно ли я использовал public,protected,private?и как лучше было бы написать выбрасывание исключений?

1. Кода действительно мало чтобы оценивать.
2. В основном, претензии к форматированию (имя переменной с заглавной буквы, нет отступов между конструкциями if и тп). Да и в целом нет принадлежности к стандартам: camelCase (psr) или snake_case (kohana style, etc).
Закрывающий тег php "?>" в полностью php файле - плохой стиль.
3. Вывод ошибки и список ошибок в одном методе - плохо.
4. throw new Exception('Не удалось получить данные'); в методе обработки данных - тоже не гуд. Т.е. данное исключение должен выбрасывать метод получения данных, а не метод обработки.

41. Изнаур (29.06.2013 / 17:39)
38,40 спасибо

42. Tadochi (17.08.2013 / 20:33)
Тема актуальна? если да то вот http://tadochi.spaces.ru/files/?read=42561939

43. Артур (04.12.2013 / 22:23)
http://youtu.be/tZNJy9H2TGg
4. Современная структура гостевой книги

44. Дмитрий (04.12.2013 / 23:57)
43. Башка, скорость у тебя, конечно, впечатляет! Плюс, ты как Цезарь, параллельно выполняешь несколько вещей. Пишешь, объясняешь и продумываешь что-то наперед. Я так не могу.

От себя добавлю, я бы добавил в проект директорию \templates, которая должна хранить .tpl шаблоны. В пакет \libraries - статический класс шаблонизации, используемый в пакете \view. Ну и, само собой, роутинг, куда уж без него. И для общей кошерности не хватает класса кеширования, который бы проверял наличие кеша комнаты или выбранного сообщения и при его отсутствии дергал класс БД для получения информации.

У меня структура немного отличается от приведенной у тебя, хотя общего все равно много.

В директории \apps лежат поддиректории \models, \controllers, \view и \libs. Классы всех моделей хранятся в \models, всех контроллеров - в \controllers. И т.д. В \libs хранятся классы по работе с PDO, куками, шаблонизатор, роутер и прочие общие классы.

Алгоритм примерно такой:
- при HTML запросе дергается роутер, в котором обрабатываются все входящие данные, обрабатываются ошибки и определяется модель, необходимая для обработки запроса;
- запускается контроллер, обрабатывающий именно эту модель;
- контроллер запускает модель и получает из нее результат ее работы;
- после получения информации из модели, контроллер запускает вид, в который передает то, что отдала модель;
- Задача вида - принять то, что передал в нее контроллер, подключить шаблонизатор и отдать ему данные.
- Шаблонизатор выводит все на страницу. Профит.

Все что касается PDO, сессий, кук и прочего - использую аналогичный подход как в твоем примере.

URL: https://visavi.net/topics/38217