代码之家  ›  专栏  ›  技术社区  ›  KeyBi

连接类的最佳方式

  •  0
  • KeyBi  · 技术社区  · 8 年前

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

    我遇到的问题是,如何更好地清洁VAR?

    更容易在示例中显示:

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

    然后我希望这个类在模型和控制器以及几乎所有文件上执行。不要写入everytime$sanitize=新建sanitize;我用于添加一个公共\uu构造函数,该函数将创建一个sanitize var。

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

    然后我在函数中调用它,使用

    $string = $this->sanitize->sanitizeString($string);
    

    问题是我有点偏执,所以我在每个类中自动连接一个清理类,特别是模型,以便在数据进入DB时清理数据。所以这里发生了类似于递归的事情,并且有一个不断创建的var。例如,一个控制器将使用construct创建一个sanitize类。然后在一个方法中,我将在model User中创建一个新类,User类还将在其中创建一个清理,以及来自Cookie和Access类的一些数据,这两个类都将在其中创建清理。

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

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

    提前感谢!

    1 回复  |  直到 8 年前
        1
  •  0
  •   Green_Wizard    8 年前

    只需快速抓取一个解决方案:

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