一段极好的js代码如何改写成php?
程序员文章站
2022-04-29 16:03:07
...
hsfzxjy的这个“17 行代码实现的简易 Javascript 字符串模板”在前端很有用,想请教各位大大php版本的应该怎么改写。
function render(template, context) {
var tokenReg = /(\\)?\{([^\{\}\\]+)(\\)?\}/g;
return template.replace(tokenReg, function (word, slash1, token, slash2) {
if (slash1 || slash2) {
return word.replace('\\', '');
}
var variables = token.replace(/\s/g, '').split('.');
var currentObject = context;
var i, length, variable;
for (i = 0, length = variables.length; i
将函数挂到 String 的原型链
String.prototype.render = function (context) {
return render(this, context);
};
之后,我们便可以这样调用啦:
"{greeting}! My name is { author.name }.".render({
greeting: "Hi",
author: {
name: "hsfzxjy"
}
});
// Hi! My name is hsfzxjy.
回复内容:
hsfzxjy的这个“17 行代码实现的简易 Javascript 字符串模板”在前端很有用,想请教各位大大php版本的应该怎么改写。
function render(template, context) {
var tokenReg = /(\\)?\{([^\{\}\\]+)(\\)?\}/g;
return template.replace(tokenReg, function (word, slash1, token, slash2) {
if (slash1 || slash2) {
return word.replace('\\', '');
}
var variables = token.replace(/\s/g, '').split('.');
var currentObject = context;
var i, length, variable;
for (i = 0, length = variables.length; i
将函数挂到 String 的原型链
String.prototype.render = function (context) {
return render(this, context);
};
之后,我们便可以这样调用啦:
"{greeting}! My name is { author.name }.".render({
greeting: "Hi",
author: {
name: "hsfzxjy"
}
});
// Hi! My name is hsfzxjy.
补充一下,内置函数 strtr 做的事情几乎一摸一样,出了没有支持点语法访问多层之外
'Hi',
'{author.name}' => 'hsfzxjy',
));
另外,javascript中修改内置对象的原型链是绝对不能做的事情
只是一段简单的字符串替换,用php的话写大概12行,如下:
function render($template, $arr) {
$reg = "/(\\\)?\{([^\{\}\\\]+)(\\\)?\}/s";
return preg_replace_callback($reg, function ($m) use ($arr) {
if (!empty($m[1])||!empty($m[3])||empty($m[2])) return str_replace("\\", '', $m[0]);
$variables = explode('.', preg_replace("/\s/", '', $m[2]));
foreach ($variables as $variable) {
$arr = isset($arr[$variable])?$arr[$variable]:null;
if (!$arr) return '';
}
return $arr;
}, $template);
}
使用也是相同的
$data = array(
"greeting"=> "Hi",
"author"=>array("name"=>"hsfzxjy"));
echo render("{greeting}! My name is { author.name }.",$data);
// Hi! My name is hsfzxjy.
在php这边貌似没用,如果需要的话搜索一下就行了。通常php只要写成 "{$greeting}! My name is {$author['name']}就行了,还解析一次干什么。smarty之类的模板也内置了这种解析,为什么还要再搞一次?
推荐阅读
-
这段PHP代码如何写成能输出的结果和JS一样
-
一段JS代码,请大家分析下其中的“时间”“步数”变量是那些?如何传递给PHP变量
-
php v8js 等 javascript 解释器如何才能仅检查 js 代码的语法而不去执行?
-
有对JS熟习的吗,帮转换一段代码为PHP的
-
js的加密代码,如何改为php 的代码?
-
这段PHP代码怎么写成能输出的结果和JS一样?
-
下列语句该如何改,如何在php中的判断语句中加jquery代码
-
用php die的一段倒计时代码,倒计时到后 后面的代码不输出 如何让后面的代码继续输出
-
这句PHP操作MYSQL的代码要如何改才能操作ORACLE
-
一段JS代码,请大家分析下其中的“时间”“步数”变量是那些?如何传递给PHP变量