При инициации класса PHP есть ли польза от передачи зарезервированных переменных через конструктор? - PullRequest
1 голос
/ 04 апреля 2020

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

Любой созданный мной фреймворк делает это. Естественно, любые «применимые» переменные / имена в любом URL-запросе или вводе формы предварительно выделяются специально.

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

function __construct( $get, $post, $server )

и инициализированный как

new TheClass( $_GET, $_POST, $_SERVER );

в противоположность просто захватить их в самом конструкторе, как они определены? Прошу прощения, если это очевидно, я был довольно хорош во всем этом, теперь немного ржавый. Видеть, что вы, ребята, думаете.

1 Ответ

1 голос
/ 04 апреля 2020

Одна хорошая идея в программировании - думать о функциях как о единицах, которые зависят только от входов и влияют только на выходы (и, возможно, объект, к которому они обращаются). Это также один из основных принципов функционального программирования.

Основным принципом c t enet функционального программирования является то, что, насколько это возможно, вычисления должны быть чистыми, в том смысле, что единственный эффект выполнения должен состоять в том, чтобы произвести результат: он не должен иметь побочных эффектов, таких как ввод / вывод, присваивания изменяемым переменным, указатели перенаправления и т. д. c. Например, если императивная функция сортировки может взять список чисел и переставить свои указатели, чтобы упорядочить список по порядку, функция чистой сортировки возьмет исходный список и вернет новый список, содержащий те же числа в отсортированном порядке.

Из Основы программного обеспечения книга.

Чтение и запись глобальных переменных в разных частях и единицах сделает код неисправным, трудным для чтения / понимания, трудным для понимания и т. Д. c. Было бы неплохо работать с ними только в одной части кода, а не с какими-либо функциями, методами и т. Д. c. С этой точки зрения это действительно хорошо, чтобы не читать $_GET, $_POST, и т. Д. c. внутри __construct или любых других методов напрямую и передавайте их откуда-то, известному программисту и людям, работающим над проектом. Это становится более критичным c, когда речь идет о записи, т. Е. В переменной $_SESSION. Представьте, что значение $_SESSION содержит некоторые нежелательные данные, и вам необходимо выяснить, какая часть кода отвечает за проблему. Если в коде много частей, которые изменяют переменную $_SESSION, процессы отладки будут очень сложными.

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

...