Heim > Backend-Entwicklung > PHP-Tutorial > 一段极好的js代码如何改写成php?

一段极好的js代码如何改写成php?

WBOY
Freigeben: 2016-06-06 20:13:34
Original
1026 Leute haben es durchsucht

hsfzxjy的这个“17 行代码实现的简易 Javascript 字符串模板”在前端很有用,想请教各位大大php版本的应该怎么改写。

<code>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 </code>
Nach dem Login kopieren
Nach dem Login kopieren

将函数挂到 String 的原型链

<code>String.prototype.render = function (context) {
    return render(this, context);
};</code>
Nach dem Login kopieren
Nach dem Login kopieren

之后,我们便可以这样调用啦:

<code>"{greeting}! My name is { author.name }.".render({
    greeting: "Hi",
    author: {
        name: "hsfzxjy"
    }
});
// Hi! My name is hsfzxjy.</code>
Nach dem Login kopieren
Nach dem Login kopieren

回复内容:

hsfzxjy的这个“17 行代码实现的简易 Javascript 字符串模板”在前端很有用,想请教各位大大php版本的应该怎么改写。

<code>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 </code>
Nach dem Login kopieren
Nach dem Login kopieren

将函数挂到 String 的原型链

<code>String.prototype.render = function (context) {
    return render(this, context);
};</code>
Nach dem Login kopieren
Nach dem Login kopieren

之后,我们便可以这样调用啦:

<code>"{greeting}! My name is { author.name }.".render({
    greeting: "Hi",
    author: {
        name: "hsfzxjy"
    }
});
// Hi! My name is hsfzxjy.</code>
Nach dem Login kopieren
Nach dem Login kopieren

补充一下,内置函数 strtr 做的事情几乎一摸一样,出了没有支持点语法访问多层之外

<code class="php"><?php echo strtr("{greeting}! My name is {author.name}.", array(
    '{greeting}' => 'Hi',
    '{author.name}' => 'hsfzxjy',
));</code>
Nach dem Login kopieren

另外,javascript中修改内置对象的原型链是绝对不能做的事情

只是一段简单的字符串替换,用php的话写大概12行,如下:

<code class="php">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);
}</code>
Nach dem Login kopieren

使用也是相同的

<code>$data = array(
    "greeting"=> "Hi",
    "author"=>array("name"=>"hsfzxjy"));

echo render("{greeting}! My name is { author.name }.",$data);
// Hi! My name is hsfzxjy.</code>
Nach dem Login kopieren

在php这边貌似没用,如果需要的话搜索一下就行了。通常php只要写成 "{$greeting}! My name is {$author['name']}就行了,还解析一次干什么。smarty之类的模板也内置了这种解析,为什么还要再搞一次?

Verwandte Etiketten:
php
Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage