21,887
社区成员
发帖
与我相关
我的任务
分享
<?php
class Validate{
private $error;
private static $_instance;
private $errors=array();
private $clean;
function __construct(){
}
public static function getInstance(){
if (!(self::$_instance instanceof self)) {
self::$_instance = new self();
}
return self::$_instance;
}
public function setErrors($error){
array_push($this->errors,$error);
}
public function getErrors(){
return $this->errors;
}
public static function get($key){
$raw=new Request();
return $raw->getParameter($key);
}
public static function setclean($key){
$clean=new CleanRequest();
$obj=Validate::getInstance();
$clean=$clean->set($key,$obj->get($key));
print_r($clean);//此处打印有值
}
public static function getCleanRequest(){
return $this->clean;
}
}
为什么我去调用ClenRequest的getCleanRequest()方法 获取不到值呢?
而我打印的时候:setclean()方法输出
CleanRequest Object ( [data:private] => Array ( [user] => 3333 ) ) CleanRequest Object ( [data:private] => Array ( [pwd] => 111111 ) )
这是我在另外一个类里面写的:
public static function getCleanRequest(){
$valid=Validate::getInstance();
print_r($valid->getCleanRequest());//此处打印为空值
return $valid->getCleanRequest();
}
class Validator{
private $validators=array();
function __construct(){
//$this->validators[]=$validator;
}
public function addvalid(&$validator){
$this->validators[]=$validator;
}
public function RawValidate($raw){
foreach($this->validators as $validator){
$validator->validateCoor($raw);
}
return $this->isvalid();
}
public function isvalid(){
return count($this->getErrors())>0;
}
public function getErrors(){
//如果按照上面老大说的方法也就是
3、于是 new Validate($this->message);
应该写作 Validate()->setError([color=#FF99CC]$this->message);
同样获取已保存的信息,写作 $err = Validate()->getError();
[/color]
//但是$message怎么获取
//我的想法是调用Validate类的getError()方法,但是实例化Validate类需要传递参数(在这里受到阻碍所以这里不知道怎么去突破)。
}
}
class Validate{
private $error;
private $errors=array();
function __construct($error){
array_push($this->errors,$error);
}
public function getErrors(){
return $this->errors;
}
}
class Filter{
private $field;
private $message;
private $curReg=0;
private $isreg=true;
private $filter_reg=array
(
'callback'=>FILTER_CALLBACK,
'float' =>FILTER_VALIDATE_FLOAT ,//浮点
'url' =>FILTER_VALIDATE_URL,//url
'email' =>FILTER_VALIDATE_EMAIL,//邮箱
'int' =>FILTER_VALIDATE_INT,//数字
'bool' =>FILTER_VALIDATE_BOOLEAN,
);
function __construct($field,$message,$curReg=0,$isReg=true){
$this->field=$field;
$this->message=$message;
$this->filters($curReg);
$this->isReg=$isReg;
}
public function filters($curReg){
if(array_key_exists($curReg,$this->filter_reg))
$this->curReg=$curReg;
else
die("验证格式参数错误!");
}
public function validateCoor(Request $raw){
$valid=$raw->get($this->field);
$validate=new Validate($this->message);
if(!empty($valid)){
if(!filter_var($valid,$this->filter_reg[$this->curReg])){//验证不合格就将错误追加
new Validate($this->message);
return false;
}
return true;
}
}
}
class Validator{
private $validators=array();
function __construct(){
//$this->validators[]=$validator;
}
public function addvalid(&$validator){
$this->validators[]=$validator;
}
public function RawValidate($raw){
foreach($this->validators as $validator){
$validator->validateCoor($raw);
}
return $this->isvalid();
}
public function isvalid(){
return count($this->getErrors())>0;
}
public function getErrors(){
//我的想法是调用Validate类的getError()方法,但是实例化Validate类需要传递参数(在这里受到阻碍所以这里不知道怎么去突破)。
}
}
<?php
class LoginController extends Controller{
function IndexAction(){
$raw=new Request();//工厂函数获取提交数据
$valitor=new Validator();//验证函数
$valitor->addvalid((new Filter('user','用户名错误','int')));
$valitor->addvalid((new Filter('mima','密码错误','int')));
if(!$valitor->RawValidate($raw)){
new ErrorPage($valitor->getErrors());//ErrorPage控制器(其实这里就是获取一个数组($valitor->getErrors())返回给这个类(这个类的处理就是smarty来显示这个抛出的错误数组)此处省略)。
}
die("ok");
}
}
大概的页面全都弄上来了。关键就是获取验证的错误。
class Validate {
private static $_Instance;
private function __construct() {}
private function __clone(){}
public static function getInstance() {
if(empty(self::$_Instance)) self::$_Instance = new self();
return self::$_Instance;
}
private $error;
private $errors=array();
function setError($error){
array_push($this->errors,$error);
}
public function getErrors(){
return $this->errors;
}
}
function __construct(){
$this->tmp = array();
}
class factory{
private $tmp=array();
function __construct($arg){
array_push($this->tmp,$arg);
}
public function gett(){
return $this->tmp;
}
}
$a=new factory(3);
print_r($a->gett());