将我的php切换到5.5.8后,我有这个不推荐的警告,
不推荐使用:preg_replace():不推荐使用/ e修饰符 preg_replace_callback改为 C:\ wamp \ www ... Curly.php on 第 28 页
这是我班Curly
,
public function replace ($input, $options = array()) {
return preg_replace("/\{{2}(([a-z\_]+\|.+)|([a-z\_]+))\}{2}/Ue",'$this->_replace("\\1",$options)',$input);
}
所以,如果我改为使用preg_replace_callback
,
return preg_replace_callback("/\{{2}(([a-z\_]+\|.+)|([a-z\_]+))\}{2}/Ue",'$this->_replace("\\1",$options)',$input);
然后我收到此错误,
警告:preg_replace_callback():需要参数2, ' $ this-> _replace(" \ 1",$ options)',成为有效的回调 在 C:\ wamp \ www ... Curly.php 28
任何想法我该如何解决这个问题?
修改
class Curly extends CoreModel
{
// Set the property/ variable of this class
public $constant = null;
/**
* Extend the parent class property.
*/
public function __construct($connection){
// Extend parent's.
parent::__construct($connection);
$this->constant = new Constant($connection);
}
/**
* Replace the curly in an input string
* @param string $input
* @return string
*/
public function replace ($input, $options = array()) {
//return preg_replace("/\{{2}([a-z]+\|.+)\}{2}/Ue",'$this->_replace("\\1")',$input);
//return preg_replace("/\{{2}(([a-z\_]+\|.+)|([a-z\_]+))\}{2}/Ue",'$this->_replace("\\1",$options)',$input);
return preg_replace_callback(
"/\{\{([a-z_]+(?:\|.+)?)\}\}/U",
function($m) { return $this->_replace($m[1], $options); },
$input
);
}
/**
* Run the replacement code on a given macro string
* @param string $input
* @return string
*/
private function _replace ($input,$options) {
// Set local vars.
$defaults = array();
// Call internal method to process the array.
$array = parent::arrayMergeValues($defaults,$options);
//print_r($array);
// Convert array to object.
$property = parent::arrayToObject($array);
// type-checking comparison operator is necessary.
if (strpos($input, '|') !== false) {
//VERTICAL SIGN FOUND
list ($name,$params) = explode("|",$input);
if (method_exists($this,$name)) {
return $this->$name($params);
}
throw new Exception ("Unrecognised macro: {$name}.",500);
} else {
// Get the input string and request the data from constant table.
$value = $this->constant->getRow($input)->value;
// If there is a value returned from the contstant table.
if($value !== null) {
// Return the what is returned from the the constant table.
return $value;
} else if(isset($property->$input)) { // If there is a customised value from the developer.
// Return what is customised by the developer.
return $property->$input;
} else { // Nothing is found.
// Return what is from the input.
return "{{{$input}}}";
}
}
}
/**
* Replaces a YouTube curly
* @param string $params
* @return string
*/
private function youtube ($params) {
parse_str($params);
// set defaults
if (!isset($id)) { $id = "ykwqXuMPsoc"; }
if (!isset($width)) { $width = 560; }
if (!isset($height)) { $height = 315; }
// output the final HTML
return "<iframe width=\"{$width}\" height=\"{$height}\" src=\"http://www.youtube.com/embed/{$id}\" frameborder=\"0\" allowfullscreen></iframe>";
}
}
答案 0 :(得分:4)
怎么样:
public function replace ($input, $options = array()) {
return preg_replace_callback(
"/\{\{([a-z_]+(?:\|.+)?)\}\}/U",
function($m) use($options) { return $this->_replace($m[1], $options); },
$input
);
}
答案 1 :(得分:-2)
否则使用 call_user_func_array :
return preg_replace_callback(
// RegExpr
"/\{{2}(([a-z\_]+\|.+)|([a-z\_]+))\}{2}/Ue",
// Callback
array($this, '_replace'),
// Data
$input
);