最佳连接方式 类

Best way to connect classes

所以,我没有使用任何框架,而是使用 PHP 在 MVC 架构上开发一个系统,并且有几个组件。其中之一是 Sanitize,用于过滤变量。

我遇到的问题是,如何更好地清理变量?

更容易在示例中显示:

class Sanitize {
    public function sanitizeString($string) {
        return filter_var($string, FILTER_SANITIZE_STRING);
    }
}

然后我希望这个 class 在模型和控制器以及几乎所有文件上执行。不要每次都写 $sanitize = new Sanitize;我习惯于添加一个 public __construct 函数来创建一个 sanitize var.

private $sanitize;
public function __construct() {
    $sanitize = new Sanitize();
}

然后我就在我的函数中使用

调用它
$string = $this->sanitize->sanitizeString($string);

问题是我有点偏执,所以我在每个 class 中自动连接一个清理 class,特别是模型,以便在数据进入数据库时​​清理数据。所以这里发生了类似递归的事情,并且有一个一遍又一遍地创建的 var。例如,控制器将使用构造创建一个 sanitize class。然后在一个方法中,我将在模型用户中创建新的 class,用户 class 也在其中创建一个清理,以及来自 Cookies 和 Access classes 的一些数据,两者都来自在其中创建消毒。

所以我调用了 1 个方法,但它创建了 4 个重复的 sanitize,有些甚至不需要...

最佳做法是什么?我做对了吗?

提前致谢!

快速抓取一种解决方案:

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