Итак, я не использую какие-либо фреймворки, разрабатываю систему на архитектуре MVC с использованием PHP и имею несколько компонентов. Одним из них является Sanitize, для фильтрации переменных.
Проблема, с которой я столкнулся, состоит в том, как лучше дезинфицировать вазы?
Проще показать в примере:
class Sanitize {
public function sanitizeString($string) {
return filter_var($string, FILTER_SANITIZE_STRING);
}
}
Затем я хочу, чтобы этот класс выполнялся на моделях и контроллерах, а также почти на всех файлах. Не писать каждый раз $ sanitize = new Sanitize; Я привык добавлять публичную функцию __construct, которая создаст sanitize var.
private $sanitize;
public function __construct() {
$sanitize = new Sanitize();
}
Тогда я просто вызываю это в моей функции, используя
$string = $this->sanitize->sanitizeString($string);
Проблема в том, что я немного параноик, поэтому я автоматически соединяю класс sanitize в каждом отдельном классе, особенно в моделях, для очистки данных, когда они поступают в БД. Так что здесь происходит нечто вроде рекурсии, и есть переменная, которая создается снова и снова. Например, контроллер создаст класс sanitize с помощью конструкции. Затем в методе я создам новый класс в модели User, а класс User также создает в нем sanitize, а также некоторые данные из классов Cookies и Access, оба из которых создают в нем sanitize.
Я назвал 1 метод, но он создал 4 дубликата для очистки, некоторые даже без необходимости …
Какая лучшая практика? Я делаю это правильно?
Заранее спасибо!
Просто быстрая царапина одного решения:
<?php
interface ISanitizedValue {
public function value();
}
class CSanitizedLogin implements ISanitizedValue {
private $_rawValue;
public function __construct($value){
$this->_rawValue = $value;
}
public function value(){
// sanitizing
}
}
class CSomeClass {
// force to use ISanitizedValue
public function __construct(ISanitizedValue $login){}
}
$login = new CSanitizedLogin($_GET['login']);
$example1 = new CSomeClass($login);
$example2 = new CSomeClass($login);
?>
Других решений пока нет …