2010-05-04 12 views
1

Bonjour,php: deux objets de la même indépendante de travail de classe de l'autre

Je voudrais le code dans mon contrôleur pour ressembler à quelque chose comme ceci:

<?php 
$class = new sanitizeInput() 

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

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

Il semble avec ma classe sanitizeInput , toute modification de $ string2 est appliquée à $ string1. De quelles façons puis-je changer cela? J'aimerais de préférence faire les changements dans la classe pour rendre mon contrôleur aussi facile à lire que possible. Oui, je sais que je peux instancier deux fois, mais j'aimerais utiliser le même objet si possible.

Ce serait génial si ma classe:

  • Instantiate une fois,
  • entrée Set,
  • Dites-le à mysql_escape, et revenir à __toString chaine1 $.
  • Définissez l'entrée en laissant $ string2 seul, mysql_escape et renvoyez __toString string à $ string2.

EDIT: Ceci est mon code complet tel que demandé par commentaire:

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

Merci pour votre temps.

Cordialement,
Marius

+1

Pouvez-vous publier le code de la méthode input() de la classe sanitizeInput? –

+0

* (alternative) * http://de2.php.net/manual/fr/book.filter.php et http://phpro.org/tutorials/Filtering-Data-with-PHP.html#23 – Gordon

Répondre

1

$string1 et $string2 seront des références au même objet jusqu'à ce que vous essayez de convertir la valeur en une chaîne, de sorte que toutes les modifications apportées seront appliqués aux deux chaînes. Je pense que vous devez convertir explicitement l'objet en une chaîne pour empêcher cela, par ex.

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

Je ne suis pas sûr en utilisant une interface « couramment » est appropriée ici parce que vous ne voulez pas vraiment l'objet à maintenir l'état entre les appels si vous souhaitez utiliser la même instance dans plusieurs endroits au même temps. Il vaudrait mieux utiliser un objet différent pour chaque chaîne.