Лучший способ соединить занятия

Итак, я не использую какие-либо фреймворки, разрабатываю систему на архитектуре 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 дубликата для очистки, некоторые даже без необходимости …

Какая лучшая практика? Я делаю это правильно?

Заранее спасибо!

0

Решение

Просто быстрая царапина одного решения:

<?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);
?>
0

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector