php: birbirlerinin aynı sınıf çalışma bağımsız bu iki nesne

1 Cevap php

Günaydın,

Ben böyle bir şey bakmak için benim denetleyicisi kodu istiyorum:

<?php
$class = new sanitizeInput()

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

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

It seems with my sanitizeInput class, any change to $string2 is applied to $string1. What ways can I change this? I would preferably like to make the changes within the class to make my controller as easily read as possible.

Tabii, ben iki örneğini biliyorum, ama ben mümkünse aynı nesneyi kullanmak istiyorum.

O benim sınıf harika olurdu:

  • Kez örneğini,
  • Girişi ayarlayın,
  • Mysql_escape anlat, ve $ string1 için __ toString dönün.
  • Yalnız $ dize2 bırakarak mysql_escape girişini ayarlamak ve $ string2 için __ toString dize döndürür.

EDIT: This is my full code as requested by comment:

$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;
    }
}

Zaman ayırdığınız için teşekkür ederiz.

Kind regards,
Marius

1 Cevap

$string1 ve bir dizeye değeri dönüştürmek için denemek, bu yüzden yaptığınız değişiklikler hem uygulanan dizeleri olacak kadar $string2 sağ yukarı aynı nesneye başvuruları olacaktır. Ben, örneğin, bu önlemek için açıkça bir dizeye nesneyi dönüştürmek zorunda düşünüyorum

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

Ben gerçekten, aynı anda birden fazla yerde aynı örneği kullanmak istiyorsanız nesne çağrıları arasında durumunu muhafaza olmak istemiyorum çünkü bir 'akıcı' arayüzünü kullanarak burada uygun olduğundan emin değilim. Her dize için farklı bir nesne kullanmak daha iyi olacaktır.