2010-05-04 33 views
1

早上好相同的兩個對象,PHP:從類工作相互獨立

我想代碼在我的控制器看起來是這樣的:

<?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。 有什麼方法可以改變這個?我最好喜歡在課堂上做出改變,使我的控制器儘可能地容易閱讀。

當然,我知道我可以實例化兩次,但如果可能的話我想使用相同的對象。

這將是巨大的,如果我的課:

  • 實例化一次,
  • 設置輸入,
  • 告訴它mysql_escape,並返回到__toString $字符串1。
  • 設置輸入單獨離開$ string2,mysql_escape並將__toString字符串返回到$ 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; 
    } 
} 

謝謝您的時間。

親切的問候,
馬呂斯

+1

你可以發佈sanitizeInput類的input()方法的代碼嗎? – 2010-05-04 14:29:25

+0

*(備選)* http://de2.php.net/manual/en/book.filter.php和http://phpro.org/tutorials/Filtering-Data-with-PHP.html#23 – Gordon 2010-05-04 14:47:44

回答

1

$string1$string2將是同一個對象引用的權利,直到您嘗試將值轉換爲字符串,所以你所做的任何更改將被應用到兩個字符串。我想你必須明確地將對象轉換爲字符串來防止這種情況發生,例如

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

我不知道用「流暢」的界面是適當的,因爲在這裏你真的不希望將對象保持調用之間的狀態,如果你想在同一使用在多個地方的同一實例時間。對每個字符串使用不同的對象會更好。