早上好,
我希望控制器中的代码看起来像这样:
<?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。 我有什么方法可以改变这个?我最好在课堂上进行更改,以使我的控制器尽可能轻松阅读。
当然,我知道我可以实例化两次,但如果可能,我想使用相同的对象。
如果我的班级会很棒:
编辑: 这是评论要求的完整代码:
$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;
}
}
感谢您的时间。
亲切的问候,
的Marius
答案 0 :(得分:1)
$string1
和$string2
将引用同一个对象,因此您所做的任何更改都将应用于这两个字符串。我认为你必须明确地将对象转换为字符串以防止这种情况,例如。
$string1 = (string) $class -> input($_POST['name']) -> mysql_escape();
$string2 = (string) $class -> input($_POST['age']) -> mysql_escape();
我不确定在这里使用'流畅'界面是合适的,因为如果你想在同一时间在多个地方使用同一个实例,你真的不希望对象在调用之间保持状态。最好为每个字符串使用不同的对象。