1

おはようございます、

コントローラのコードを次のようにしたいと思います。

<?php
$class = new sanitizeInput()

$string1 = $class -> input($_POST[name]) -> mysql_escape();
$string2 = $class -> input($_POST[age]) -> mysql_escape();

print "
     String1: $string1 <br />
     String2: $string2"
?>

私のsanitizeInputクラスでは、$string2への変更は$string1に適用されるようです。これを変更するにはどうすればよいですか?コントローラーをできるだけ読みやすくするために、クラス内で変更を加えることが望ましいです。

もちろん、2回インスタンス化できることはわかっていますが、可能であれば同じオブジェクトを使用したいと思います。

私のクラスがあれば素晴らしいでしょう:

  • 一度インスタンス化して、
  • 入力を設定し、
  • それをmysql_escapeに伝え、__toStringを$string1に返します。
  • $ string2だけを残して入力を設定し、mysql_escapeを実行して、__toStringstringを$string2に返します。

編集:これはコメントによって要求された私の完全なコードです:

$name = $sanitize -> setInput($name) -> stripTags() -> mySql() -> replaceLinks('[ En webadresse ble sensurert her ]') -> trimWhitespace();
$age = $sanitize -> setInput($age) -> stripTags() -> mySql() -> replaceLinks('[ En webadresse ble sensurert her ]') -> trimWhitespace();


class Sanitizer {

    protected $_data;

    public function setInput($input) {
        $this -> _data = $input;
        return $this;
    }


    public function stripTags($array = NULL) {
        if (!is_null($array) and is_array($array)) {
            $allowedTags = implode('', $array);
            $this -> _data = strip_tags($this -> _data, $allowedTags);
        }
        else {
            $this -> _data = strip_tags($this -> _data);
        }
        return $this;
    }

    public function mySql() {
        $this -> _data = mysql_escape_string($this -> _data);
        return $this;
    }

    public function replaceLinks($replacement = NULL) {
        if (is_null($replacement)) {
            $replacement = '[ Potential web-address censored here ]';
        }
        $this -> _data = preg_replace('~[a-z0-9:/._-]+\.(biz|com|edu|gov|info|mil|net|org|as|eu|no|se|uk)[/a-z]{0,}~i', $replacement, $this -> _data);
        return $this;
    }

    public function trimWhitespace() {
        $this -> _data = trim($this -> _data);
        return $this;
    }

    protected function __toString() {
        $str = $this -> _data;
        return $str;
    }
}

お時間をいただきありがとうございます。

よろしく、
マリウス

4

1 に答える 1

1

$string1値を文字列に変換しようとするまでは同じオブジェクトへの参照に$string2なるため、行った変更は両方の文字列に適用されます。これを防ぐには、オブジェクトを文字列に明示的に変換する必要があると思います。たとえば、

$string1 = (string) $class -> input($_POST['name']) -> mysql_escape();
$string2 = (string) $class -> input($_POST['age']) -> mysql_escape();

同じインスタンスを複数の場所で同時に使用する場合は、オブジェクトが呼び出し間で状態を維持する必要がないため、ここで「流暢な」インターフェイスを使用することが適切かどうかはわかりません。文字列ごとに異なるオブジェクトを使用することをお勧めします。

于 2010-05-04T14:51:34.633 に答える