«phpClub» — архив тем ("тредов"), посвящённых изучению PHP и веб-технологий.
Аноним 2019/04/13 20:39:54  №1380549 1
Решаю список студентов и возникли некоторые вопросы.

1. Будет ли хорошим решением получать объект студента статическим методом из класса-помощника?
Например:
$student = Utils::createStudentFromGlobals();

2. Хорошим ли решением будет хранить введенные студентом данные на стороне сервера, чтобы в случае вывода ошибки при валидации вставлять их в html-атрибут value?

3. Можно ли вызывать встроенные в php функции из логики шаблонов? Да и обычные функции, ведь они могут содержать в себе сложную логику.
Или всё что серьезнее if/else/for/foreach низяяя?

4. Я забрёл слишком далеко и начал тестировать с phpunit валидатор студента, а у меня в нём большинство методов защищенные. Пришлось использовать Reflectionclass для получения доступа к ним, это нормальная практика?

И про валидатор, в нём самые часто используемые конструкции по типу измерения длины строки/проверки на пустоту, я обобщил в отдельные методы. Как вам такое решение?

5. Вопрос по тестированию.

Например у меня есть метод валидации имени студента. Он умеет:

1. Проверять переданное значение на пустоту.
2. Проверять длину на min, max значения и возвращать соответствующие ошибки.
3. Проверять регуляркой на кириллические символы.

В конце возвращает массив с ошибками или null.

Для каждой способности этого метода писать отдельный тест-метод?

Надеюсь, не отнял много времени. Заранее спасибо!
Ответы: >>1380793 >>1383810 >>1394736
Аноним 2019/04/14 10:56:04  №1380793 2
>>1380549
>2. Хорошим ли решением будет хранить введенные студентом данные на стороне сервера, чтобы в случае вывода ошибки при валидации вставлять их в html-атрибут value?

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

Есть несколько вариантов решения этой проблемы, какой бы лучше выбрать?
https://ideone.com/1B8bMH
Ответы: >>1380807 >>1394736
Аноним 2019/04/14 11:16:36  №1380807 3
>>1380793
Дошло, что можно использовать в шаблоне объект студента
<input type="text" value="<?= $student->getFirstName()"?>
Ответы: >>1394735
Аноним 2019/04/15 10:12:43  №1381736 4
Котаны, в документации, в примерах функции зачастую типа такая запись аргументво что идут в функцию:

public PDO::prepare ( string $statement [, array $driver_options = array() ] )
или
mail ( string $to , string $subject , string $message [, mixed $additional_headers [, string $additional_parameters ]] )

Почему тут конструкция типа '[,' - т.е. сначала скобка квадратная а потом запятая. Зачем квадратные скобки?
Ответы: >>1381737
Аноним 2019/04/15 10:15:11  №1381737 5
>>1381736
Это значит, что аргументы в скобках не обязательны
Ответы: >>1381740
Аноним 2019/04/15 10:20:55  №1381740 6
>>1381737
Спасибо.

А еще кстати подскажите порядок работы или где почитать по почте:
Я делаю форму с отправкой почты. Читал что правильнее это все реализовывать не просто через вызов mail() - но устанавливать отдельный почтовый сервер, и уже на него отправлять из пхп письма.
Ответы: >>1381833 >>1394735
Аноним 2019/04/15 11:33:31  №1381775 7
Сап аноны, я тут новенький. Пару дней ковырял задачу на опечатки в регулярных выражениях были траблы с типами данных. Задачу решил, но хочется что-бы кто-нибудь оценил. Буду рад если скажете где и почему было написано хуёво и как сделать лучше. Алсо реквестирую каких-нибудь статей про типы данных в PHP.
Сама программа: https://ideone.com/rg3cAy
p.s. Старался в комментарии на английском. Может быть понятно, а может и нет.
Ответы: >>1381796 >>1394735
Аноним 2019/04/15 23:13:18  №1382113 8
Аноны, как можно сделать по другому?
http://sandbox.onlinephpfunctions.com/code/36216a124252e2f05ed9d0a55dd1238d7931c980: ошибка

http://sandbox.onlinephpfunctions.com/code/7ab17081d971e1361863d569f390cdd85a382b46: пофиксил добавлением пробелов в строках 7-20.

Есть вариант найти максимальное кол-во символов в строке (32) и дополнить все строки где кол-во символов <32 пробелами. Но мне кажется что можно сделать мудрее
Ответы: >>1394735
Аноним 2019/05/06 05:58:39  №1394735 9
>>1382113

Для разбиения на строки хватило бы explode().

Переменные можно назвать лучше: afterSplit -> lines, stringAfter -> line, text1 -> characters

> $i<34

Это лучше бы вычислять, например, как макс. из длины строк, одной строкой, используя array_map() и max().

> $text1[$k][$i] != "\0"

В реальном тексте там нет символа с нулевым кодом и твоя проверка не имеет смысла.

Ты тут обращаешься к несуществующим элементам массива и это вызвает ошибки. Тебе стоило бы сделать проверку, что $k меньше чем число символов в текущей строке. У тебя есть проверка, но она некорректная (она сравнивает не с числом символов в текущей строке, а с числом в последней).

То есть тебе стоит сделать так:

если (k меньше чем число символов в данной строке) то вывести пробел.

>>1381775

Комментарии лучше писать над строкой, а не справа, а то слишком длинные строки выходят.

ё не входит в диапазон а-я и её надо писать отдельно.

> for ($i=(count($matches)-1); $i>=0; $i--) {

Не стоит заниматься такими микрооптимизациями, они ухудшают читабельность. Также, для обхода массива стоит использовать foreach().

> like in 20 line

Не стоит ссылаться на номера строк, так как они меняются при доработке кода.

Для замены букв по массиву замен есть функция strtr().

Ты считаешь все латинские буквы неправильными, но могут быть и латинские слова с русскими буквами - лучше проверять по первой букве или как-то еще.

Про преобразования типов: https://www.php.net/manual/ru/language.types.type-juggling.php

>>1381740

Отдельный сервер нужен для больших объемов отправки.

>>1380807

Добавь еще экранирование выводимых данных.
Ответы: >>1395036
Аноним 2019/05/07 06:32:56  №1395036 10
>>1394735
>Отдельный сервер нужен для больших объемов отправки
Большой объём -- это сколько? Есть какое-то правило или просто "не работает в лоб -- поднимай сервер"?
Если я раз в два месяца отправляю пачку около 150 писем, нужен сервер?
Ответы: >>1395044
Аноним 2019/05/07 06:51:41  №1395044 11
>>1395036

По идее, если ты правильно настроил sendmail на своем сервере (а также, возможно, всякие антиспам меры вроде SPF итд, которые описываются в статьях по теме), то все должно работать. Антиспам нужен для массовых рассылок.

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

Или, возможно, ты увлекся микросервисами и хочешь усложнить себе жизнь на ровном месте. Тогда тоже можно сделать отдельный сервер.

Соответственно, у меня ощущение, что ты либо неправильно понял статью, либо в ней ошибки.

Ответы: >>1395430
Аноним 2019/05/07 19:26:36  №1395430 12
>>1395044
Статью не читал, просто в своё время делали с корешем прогу на питоне для рассылки оценок и прочей инфы, чтобы сократить ёблю единственной девочке из учебного офиса нашего института, которая всем этим занималась. Тогда мы поднимали smtp-сервер, потому что вроде как других способов не нашли, а сейчас мне просто интересно, как это можно было бы сделать на пхп
Ответы: >>1395435
Аноним 2019/05/07 19:36:23  №1395435 13
>>1395430
>в своё время делали с корешем прогу на питоне для рассылки оценок и прочей инфы, чтобы сократить ёблю единственной девочке из учебного офиса нашего института, которая всем этим занималась
м-м-максимум куколдизм
Ответы: >>1395778
Аноним 2019/05/08 14:59:23  №1395778 14
>>1395435
Да, нам действительно нечем было заняться. До сих пор с болью вспоминаю, как мы пытались всё собрать в ехе-шник.