«phpClub» — архив тем ("тредов"), посвящённых изучению PHP и веб-технологий.
Аноним 2018/11/21 02:09:10  №1298653 1
Ответы: >>1298654 >>1308851
Аноним 2018/11/21 06:18:37  №1298694 2
Если по мануалу опа я не смог в MVC - я сильно тупой? (Это мой третий проект с MVC, остальные получались неплохо, а сейчас не могу понять что от меня требуется).
Ответы: >>1308851
Аноним 2018/12/10 00:44:22  №1308851 3
>>1298694

> Если по мануалу опа я не смог в MVC - я сильно тупой?

Мануал может быть написан не идеально, лучше задать вопрос в треде.

>>1298653

> https://repl.it/@underbottom/words-out-of-digits - Числа прописью.

> function makeThree($number) {
> $number/=1000;
Тут стоит сделать округление, а то % рассчитан на работу с целыми числами.

> function makeWordOfKeys ($number,$currencyName) {
Эта функция выглядит усложненно. Вот я писал другому анону про то, какие должны быть функции, прочитай пост: https://phpclub.tech/pr/res/1281608.html#1304593

> Видимо ты не понял идею разбиения кода на функции. Суть в том, что длинный кусок кода, который делает несколько вещей, сложно понять. Его сложно править, в нем много переменных, и можно нечаянно что-то сломать. Ну и физически прочитать 1000 или 10 000 строк кода быстро невозможно. Поэтому код разбивают на отдельные действия и выносят эти действия в функции. Так, что мы можем вместо огромной портянки кода читать только небольшую функцию, которая нас интересует.

> Но для этого функции должны быть отделены от других частей кода. Они должны иметь определенное назначение (не размытое, вроде "делает одно действие, кусочек другого и готовит данные для третьего"). Они должны иметь понятное название, в котором описано их назначение. И они должны иметь понятный набор входных аргументов, что они принимают на вход, и что возвращают.

> Вот пример более адекватной функции:

> /** 
> * Принимает на вход целое число от 0 до 999 и возвращает его
> * текстовое представление.
> *
> * Например, для числа 312 вернет "триста двенадцать".
> */
> function spellNumber(int $number): string
>
> Согласись, что даже если ты не прочитал код функции, ты из описания уже понимаешь, что она делает, и как ее можно использовать. Например, так:
>
> echo spellNumber(123) . "\n";
>
> Комментарий /** ... */ - это комментарий в формате phpdoc ( https://ru.wikipedia.org/wiki/PHPDoc ). Слово int и string - это тайп-хинты, советую их изучить:
>
> - http://php.net/manual/ru/functions.arguments.php#functions.arguments.type-declaration
> - http://php.net/manual/ru/functions.returning-values.php
>
> То есть ты должен в идеале каждую функцию так описать. Если ты не можешь понятно описать назначение функции и формат ее аргументов, то скорее всего, ты что-то неудачно спроектировал.

Функция makeWordOfKeys несамостоятельна и неуниверсальна. Она принимает на вход массив из 3 чисел и массив из 9 слов (это кстати не описано в комментариях и надо самому догадываться). И она явно привязана к другой функции, которая содержит этот массив из 9 слов. Лучше было бы сделать функцию, которая получает на вход число, формы слов и выбирает одну из форм. Тогда она будет достаточно отделена от остального кода. А так, у тебя это просто продолжение другой функции.

Вдобавок, в ней еще куча копипасты.

Та же проблема с makeWordOfThree. Непонятно, почему она должна получать именно массив из 3 чисел, а не одно число, например. И написание цифр лучше не передавать в нее, а поместить либо в нее, либо в отдельную функцию. В аргументы мы передаем значения, которые влияют на работу функции. Но этот массив с написанием чисел всегда одинаков и его передавать не надо.