一段极好的js代码如何改写成php?
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>
将函数挂到 String 的原型链
<code>String.prototype.render = function (context) { return render(this, context); };</code>
之后,我们便可以这样调用啦:
<code>"{greeting}! My name is { author.name }.".render({ greeting: "Hi", author: { name: "hsfzxjy" } }); // Hi! My name is hsfzxjy.</code>
回复内容:
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>
将函数挂到 String 的原型链
<code>String.prototype.render = function (context) { return render(this, context); };</code>
之后,我们便可以这样调用啦:
<code>"{greeting}! My name is { author.name }.".render({ greeting: "Hi", author: { name: "hsfzxjy" } }); // Hi! My name is hsfzxjy.</code>
补充一下,内置函数 strtr 做的事情几乎一摸一样,出了没有支持点语法访问多层之外
<?php echo strtr("{greeting}! My name is {author.name}.", array( '{greeting}' => '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); }
使用也是相同的
<code>$data = array( "greeting"=> "Hi", "author"=>array("name"=>"hsfzxjy")); echo render("{greeting}! My name is { author.name }.",$data); // Hi! My name is hsfzxjy.</code>
在php这边貌似没用,如果需要的话搜索一下就行了。通常php只要写成 "{$greeting}! My name is {$author['name']}就行了,还解析一次干什么。smarty之类的模板也内置了这种解析,为什么还要再搞一次?

ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

AI Hentai Generator
AIヘンタイを無料で生成します。

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

SublimeText3 中国語版
中国語版、とても使いやすい

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

ホットトピック

PHP 8.4 では、いくつかの新機能、セキュリティの改善、パフォーマンスの改善が行われ、かなりの量の機能の非推奨と削除が行われています。 このガイドでは、Ubuntu、Debian、またはその派生版に PHP 8.4 をインストールする方法、または PHP 8.4 にアップグレードする方法について説明します。

CakePHP でデータベースを操作するのは非常に簡単です。この章では、CRUD (作成、読み取り、更新、削除) 操作について理解します。

ファイルのアップロードを行うには、フォーム ヘルパーを使用します。ここではファイルアップロードの例を示します。

CakePHP は、PHP 用のオープンソース フレームワークです。これは、アプリケーションの開発、展開、保守をより簡単にすることを目的としています。 CakePHP は、強力かつ理解しやすい MVC のようなアーキテクチャに基づいています。モデル、ビュー、コントローラー
