ホームページ バックエンド開発 PHPチュートリアル 【PHPテンプレートエンジン】Prototypeプロトタイプ版を公開しました

【PHPテンプレートエンジン】Prototypeプロトタイプ版を公開しました

Jun 13, 2016 pm 12:12 PM
gt lt nbsp php template

【PHPテンプレートエンジン】Prototypeプロトタイプ版を公開しました!

記事の冒頭で、まずフォローして頂いている方々にお詫びを申し上げます!なぜなら、当初はフロントエンド フレームワーク 5.0 のリリース直後に PHP テンプレート エンジンの最初のバージョンが完成する予定だったからです。しかしそれはできず、完成するのに2015年の元旦までかかってしまったので、自分の本気の先延ばしぶりをとても恥ずかしく思い、また申し訳ありませんでした。

今後記事を公開する際に、対応する API の使用方法も同時に公開する予定であると以前述べましたが、これでは十分ではなく、ブログ プラットフォームはテーブルの処理と表示にあまりフレンドリーではないと考えていますそのため、API リンクのみを提供する予定です。リンクから直接アクセスしてマニュアルを確認することができます。今後、公開される記事では API 関連の使用法が更新され、いくつかの小さな例が提供される予定です。これにより、誰もが API を読みながら、実践的な例を通じてコードのさまざまな使用法やビジネス ロジックのアイデアをより深く理解できるようになります。

以下は API マニュアルとサンプルデモのリンクです

[デモ例】http://www.shibuyi.net/demo/php/template_engine/prototype

[公式 API ユーザーマニュアル] ]http://www.shibuyi.net/api/php/template_engine/prototype

[著者個人公式サイト]: http://www.shibuyi.net

以下は、PHP テンプレート エンジン Prototype プロトタイプ バージョンの使用説明書です。以下、直接「テンプレート エンジン」と呼びます。

え?テンプレート エンジンが何なのかわからないですか? PHP 初心者の中にはこの質問をする人もいるかもしれないので、簡単に答えておきます。テンプレート エンジンは実際には PHP のミドルウェア テクノロジであり、これにより従来の Web 動的 Web サイト プログラミングが容易になるのはなぜでしょうか。以前は簡単ではなかったですか?なぜなら、テンプレート エンジンが登場する前は、ほとんどすべての Web サーバー プログラマーが混合コードを通じて作業を完了していたためです。いわゆる混合コードとは、ページに PHP、HTML、さらには他の言語のコードの両方が含まれることを意味します。拡張すると、開発とメンテナンスの時間コストが非常に高くなり、エラーが発生しやすくなり、アートとプログラムがうまく連携できなくなります。アーティストがプログラムをまったく理解していないと、基本的には読み取ることができません。混合ファイル。テンプレート エンジンの誕生により、この問題はうまく解決されました。テンプレート技術を使用して、混合ファイル内で PHP ビジネス ロジック層のコードと HTML プレゼンテーション層のコードを適切に分離することで、プログラマーは安心してプログラムを設計でき、アーティストは安心してインターフェイスを設計できます。テンプレート エンジンがテンプレート ファイルを読み取ってスムーズにコンパイルできるように、関連付けるテンプレート タグを指定します。すでに市場には、Smarty テンプレート エンジンなど、非常に成熟した PHP 用のテンプレート エンジンが多数存在します。他の Web サーバー言語にも、独自の対応するテンプレート エンジン、またはテンプレート エンジンに似たミドルウェア テクノロジがあります。

テンプレート エンジンの詳細については、Baidu Encyclopedia にアクセスすることをお勧めします: http://baike.baidu.com/view/4258079.htm

テンプレート エンジンを学習する前に、まず PHP の OOP (オブジェクト指向プログラミング) の考え方を理解していることを確認する必要があります。テンプレート テクノロジは OOP の考え方を使用して説明されているため、OOP を理解していない場合はこれを参照してください。この記事は敷居が高すぎるため、あなたが読むのには適していません。

最初に表示される図は、テンプレート エンジンのディレクトリ構造図です (作成者は ZendStudio 7.2.1 統合開発環境を使用しています):

1. キャッシュはテンプレート キャッシュ ディレクトリです (テンプレート エンジンが存在しない場合、初めて自動的に生成されます)。テンプレート エンジンのコア クラス ライブラリ。

3. テンプレート コンパイル ディレクトリです (テンプレート エンジンが存在しない場合は、初めて自動的に生成されます)。テンプレート定数ディレクトリです (テンプレート エンジンが存在しない場合、初めて生成されます)。

5. は、テンプレート設定ディレクトリです。 templates は、テンプレート ファイル ディレクトリです (存在しない場合は、テンプレート エンジンによって初めて自動的に生成されます)。

テンプレート エンジンのディレクトリを理解したら、それを機能させる方法を見てみましょう。プロトタイプ バージョンでは、テンプレート エンジンの関連する初期化および構成情報が include/template.inc.php ファイルで完成します (サンプル デモンストレーションのソース コードを開いて確認できます)。

其实对模板引擎的配置又叫做初始化的过程,初始化的第一步就是配置相应的目录,让模板引擎能够正确的读取和写入该目录中的数据(配置步骤大家可以自由选择,不一定非要按照我的顺序来配置,但一定要在实例化模板引擎之前完成,否则将会失效),而我们则假设与模板引擎在同一目录下进行配置,并且创建 index.php 文件用来存储配置信息,如果非同一目录对于根目录的配置则需要注意调整。

 

1. 首先第一步是配置模板引擎的根目录,如果不设置则会自动生成根目录的绝对路径。

Template :: <span style="color: #800080;">$rootPath</span> = <span style="color: #008080;">dirname</span>(<span style="color: #ff00ff;">__FILE__</span>); <span style="color: #008000;">//</span><span style="color: #008000;"> 相对与绝对路径均可,我们这里则采用绝对路径!如:"C:/wwwroot/prototype"</span>
ログイン後にコピー

 

2. 配置模板文件目录,这个目录是用来存放模板文件的,如果不设置则默认为:templates 目录。

<span style="color: #008000;">//</span><span style="color: #008000;"> 这里则采用默认目录,大家根据自己的需求进行设置,建议不要写中文容易出错,目录名的前后加不加正反斜杠都无所谓,最终模板引擎内部会自动校正!</span>Template :: <span style="color: #800080;">$templateName</span> = '/templates/';
ログイン後にコピー

 

3. 配置编译文件目录,这是用来存储模板文件被解析后生成的编译文件,如果不设置则默认为:compiles 目录。

Template :: <span style="color: #800080;">$compileName</span> = '/compiles/'; <span style="color: #008000;">//</span><span style="color: #008000;"> 和模板目录一样也采用默认目录。</span>
ログイン後にコピー

 

4. 配置缓存文件目录,这是在模板引擎开启缓存功能后,用来存储编译文件生成的缓存文件,如果不设置默认为:caches 目录。

Template :: <span style="color: #800080;">$cacheName</span> = '/caches/'; <span style="color: #008000;">//</span><span style="color: #008000;"> 一样使用默认</span>
ログイン後にコピー

 

5. 配置模板常量目录,可能大家不太理解模板常量是用来干嘛的,和普通的 PHP 常量又有什么区别?关于模板常量的解释,在接下来的运用中我们在详细探讨,这里就先跟我进行配置即可,如果不设置则默认为:constants 目录。

Template :: <span style="color: #800080;">$constantName</span> = '/constants/'; <span style="color: #008000;">//</span><span style="color: #008000;"> 使用默认</span>
ログイン後にコピー

 

6. 到第六步为止,目录的配置就全部完成了,大家不用担心目录不存在的问题,也无需手动去创建,模板引擎内部会自动帮我们完成。那么接下来就是设置模板常量的文件名称,如果不设置则默认为:default.xml 文件,和目录一样不存在模板引擎会自动创建。

<span style="color: #008000;">//</span><span style="color: #008000;"> 我们也采用默认,但大家要注意的是这里必须采用 .xml 为扩展名,因为常量文件是以 XML 标记描述的,如果不是 .xml 结尾,那么可能会导致模板引擎在处理常量时出现异常情况!</span>Template :: <span style="color: #800080;">$constantFile</span> = 'default.xml';
ログイン後にコピー

 

7. 设置缓存开关,缓存默认情况下是被关闭的,只有我们去设置他,才会开启。

<span style="color: #008000;">//</span><span style="color: #008000;"> 大家注意,这里我写的是一个布尔值,其实这里可以填写任意值,最终都会被隐式转换为布尔值,写 0 或 1 都可以,我直接写布尔值是为了方便大家的理解!</span>Template :: <span style="color: #800080;">$cacheSwitch</span> = <span style="color: #0000ff;">true</span>;
ログイン後にコピー

 

8. 至此模板引擎的配置基本上就已经全部完成了,还是很简单的。现在我们只需要实例化出模板引擎对象,就可以真正的运行模板引擎了。

<span style="color: #800080;">$tpl</span> = <span style="color: #0000ff;">new</span> Template(); <span style="color: #008000;">//</span><span style="color: #008000;"> 实例化出模板引擎,从这一步开始之前的所有配置全部生效,模板引擎实例化时不需要传递任何参数。</span>
ログイン後にコピー

 

9. 在实例化出模板引擎对象以后,我们就可以开始对其进行操作,那么对谁进行操作呢?当然是模板文件了,首先我们要先创建模板文件。在模板文件目录中进行创建。模板文件其实是纯 HTML 代码文件,扩展名可以自定义,而我们约定俗成,都以 .tpl 为扩展名。假设我们已经创建了一个模板文件名为:index.tpl,因为和我们的 php 业务逻辑文件 index.php 同名,这也是按照惯例约定俗成,因为 index.php 文件调用 index.tpl 模板,见名知意。

 

10. 在创建了模板文件之后,我们就可以在业务文件(之前的配置也都是在 index.php 中执行的)中进行对模板文件的加载以及注入模板变量,关于模板变量和其他的模板标识符(又统称模板标记)将在接下来的步骤中逐一讲解。

<span style="color: #008000;">//</span><span style="color: #008000;"> 注入变量的格式有两种,大家注意看 API 手册的说明,数组格式与传统的键值对格式均可以,我们两种都使用一下。</span><span style="color: #800080;">$tpl</span> -> assign('title', '头衔'); <span style="color: #008000;">//</span><span style="color: #008000;"> 首先是传统键值对格式</span><span style="color: #800080;">$tpl</span> -> assign(<span style="color: #0000ff;">array</span>('title' => '头衔', 'name' => '名称')); <span style="color: #008000;">//</span><span style="color: #008000;"> 数组格式明显要更加好用一些,因为在注入多个变量时,就可以不用写多个注入语句,一句话就搞定了。// 如果出现了两个一模一样的变量名称,那么其后会将之前的给替换掉。以下代码,最终 language 变量的值为:英文。</span><span style="color: #800080;">$tpl</span> -> assign(<span style="color: #0000ff;">array</span>('language' => '中文', 'language' => '英文'<span style="color: #000000;">));</span><span style="color: #008000;">//</span><span style="color: #008000;"> 接下来是加载模板文件,直接写模板名称即可,模板引擎会自动锁定到模板文件目录。</span><span style="color: #800080;">$tpl</span> -> display('index.tpl');
ログイン後にコピー

 

11. 至此对模板引擎的操作就结束了,接下来我们将熟悉一下模板文件中的各个模板标记的使用方法,他们都是用来做什么的。在原型版中模板标记一共有 9 种,分别为:1. 模板变量、2. 模板常量、3. 单行模板注释、4. 多行模板注释、5. include 文件加载、6. template 模板文件加载、7. source 源模板文件加载(较为特殊)、8. if 分歧语句、9. foreach 循环语句。那么我们首先解释一下模板变量吧。

<span style="color: #0000ff;"><</span><span style="color: #800000;">div </span><span style="color: #ff0000;">id</span><span style="color: #0000ff;">="main"</span><span style="color: #0000ff;">></span>    <span style="color: #008000;"><!--</span><span style="color: #008000;"> 刚刚我们注入了 title 变量,那么在模板文件中就可以对其进行调用了,调用方法就是保持同名,按照这样的格式抒写即可{$模板变量名称}</span><span style="color: #008000;">--></span>    <span style="color: #008000;"><!--</span><span style="color: #008000;"> 模板变量的命名规范与 PHP 普通变量一模一样,首位不能为数字,且区分大小写,注意保证格式的正确性,如果错误模板引擎将不会对其进行解析 </span><span style="color: #008000;">--></span>    <span style="color: #0000ff;"><</span><span style="color: #800000;">a </span><span style="color: #ff0000;">href</span><span style="color: #0000ff;">="###"</span><span style="color: #0000ff;">></span>{$title}<span style="color: #0000ff;"></</span><span style="color: #800000;">a</span><span style="color: #0000ff;">></span> <span style="color: #008000;"><!--</span><span style="color: #008000;"> 正确的格式,被正确解析 </span><span style="color: #008000;">--></span>    <span style="color: #0000ff;"><</span><span style="color: #800000;">a </span><span style="color: #ff0000;">href</span><span style="color: #0000ff;">="###"</span><span style="color: #0000ff;">></span>{$123}<span style="color: #0000ff;"></</span><span style="color: #800000;">a</span><span style="color: #0000ff;">></span> <span style="color: #008000;"><!--</span><span style="color: #008000;"> 错误的格式,无法解析 </span><span style="color: #008000;">--></span><span style="color: #0000ff;"></</span><span style="color: #800000;">div</span><span style="color: #0000ff;">></span>
ログイン後にコピー

 

12. 下面是模板常量的使用,模板常量和 PHP 常量虽然名字上都叫他常量,其实本质上并非一回事。模板常量其实可以看做是伪常量,而并非真正的常量,他是通过对 XML 标记的储存,来实现一种全局不变的特定值,这些值需要手动的添加到常量文件中。(手动添加其实不太方便,笔者会在其后的版本迭代中,加入自动添加的功能)

首先我们需要在模板常量文件中手动添加模板常量,代码如下:

<span style="color: #0000ff;"><?</span><span style="color: #ff00ff;">xml version="1.0" coding="utf-8" </span><span style="color: #0000ff;">?></span><span style="color: #0000ff;"><</span><span style="color: #800000;">root</span><span style="color: #0000ff;">></span>    <span style="color: #008000;"><!--</span><span style="color: #008000;"> 必须在 root 根标记中间进行添加,而且一个标记字母都不能出错,注意区分大小写,如果不慎写错,模板引擎将无法对其进行获取 </span><span style="color: #008000;">--></span>    <span style="color: #0000ff;"><</span><span style="color: #800000;">constant</span><span style="color: #0000ff;">></span>        <span style="color: #0000ff;"><</span><span style="color: #800000;">key</span><span style="color: #0000ff;">></span>WEBNAME<span style="color: #0000ff;"></</span><span style="color: #800000;">key</span><span style="color: #0000ff;">></span> <span style="color: #008000;"><!--</span><span style="color: #008000;"> 这里填写常量名称注意字母必须全部大写,第一位不能为数字,格式与 PHP 定义常量一样 </span><span style="color: #008000;">--></span>        <span style="color: #0000ff;"><</span><span style="color: #800000;">value</span><span style="color: #0000ff;">></span>网站标题<span style="color: #0000ff;"></</span><span style="color: #800000;">value</span><span style="color: #0000ff;">></span> <span style="color: #008000;"><!--</span><span style="color: #008000;"> 常量值 </span><span style="color: #008000;">--></span>    <span style="color: #0000ff;"></</span><span style="color: #800000;">constant</span><span style="color: #0000ff;">></span>        <span style="color: #0000ff;"><</span><span style="color: #800000;">constant</span><span style="color: #0000ff;">></span>        <span style="color: #0000ff;"><</span><span style="color: #800000;">key</span><span style="color: #0000ff;">></span>123abc<span style="color: #0000ff;"></</span><span style="color: #800000;">key</span><span style="color: #0000ff;">></span> <span style="color: #008000;"><!--</span><span style="color: #008000;"> 错误的常量名 </span><span style="color: #008000;">--></span>        <span style="color: #0000ff;"><</span><span style="color: #800000;">value</span><span style="color: #0000ff;">></</span><span style="color: #800000;">value</span><span style="color: #0000ff;">></span> <span style="color: #008000;"><!--</span><span style="color: #008000;"> 值可以为空 </span><span style="color: #008000;">--></span>    <span style="color: #0000ff;"></</span><span style="color: #800000;">constant</span><span style="color: #0000ff;">></span><span style="color: #0000ff;"></</span><span style="color: #800000;">root</span><span style="color: #0000ff;">></span>
ログイン後にコピー

 配置好常量后,接下来就是在模板文件中进行调用,代码如下:

<span style="color: #008000;"><!--</span><span style="color: #008000;"> 模板常量的调用和变量类似,只是取消了 $ 符号,另外和配置的常量名要保持一致 </span><span style="color: #008000;">--></span><span style="color: #0000ff;"><</span><span style="color: #800000;">title</span><span style="color: #0000ff;">></span>{WEBANME}<span style="color: #0000ff;"></</span><span style="color: #800000;">title</span><span style="color: #0000ff;">></span> <span style="color: #008000;"><!--</span><span style="color: #008000;"> 正确的名称,将被正确解析 </span><span style="color: #008000;">--></span><span style="color: #0000ff;"><</span><span style="color: #800000;">p</span><span style="color: #0000ff;">></span>{NAME}<span style="color: #0000ff;"></</span><span style="color: #800000;">p</span><span style="color: #0000ff;">></span> <span style="color: #008000;"><!--</span><span style="color: #008000;"> 虽然格式正确,但刚才没有进行 NAME 常量的配置,因此最终解析后会返回一个空值 </span><span style="color: #008000;">--></span><span style="color: #0000ff;"><</span><span style="color: #800000;">p</span><span style="color: #0000ff;">></span>{abc123}<span style="color: #0000ff;"></</span><span style="color: #800000;">p</span><span style="color: #0000ff;">></span> <span style="color: #008000;"><!--</span><span style="color: #008000;"> 错误的名称,无法解析 </span><span style="color: #008000;">--></span>
ログイン後にコピー

 

13. 下面是模板的注释符,有两种:一种为单行,一种为多行。常用于对模板文件代码的注解,可以让美工配合设计界面的时候了解代码的实际含义。

<span style="color: #008000;"><!--</span><span style="color: #008000;"> 大家可以把模板注释放到 HTML 注释符号中,这样美工在设计模板页面的时候会更加一目了然。</span><span style="color: #008000;">--></span><span style="color: #008000;"><!--</span><span style="color: #008000;"> 单行注释的格式是:{@}内容可写可不写,但不写也就没有意义了 </span><span style="color: #008000;">--></span><span style="color: #000000;">{@ 普通的单行注释} </span><span style="color: #008000;"><!--</span><span style="color: #008000;"> 正确的格式 </span><span style="color: #008000;">--></span><span style="color: #008000;"><!--</span><span style="color: #008000;"> {@ HTML 注释符号中的单行注释} </span><span style="color: #008000;">--></span> <span style="color: #008000;"><!--</span><span style="color: #008000;"> 正确的格式 </span><span style="color: #008000;">--></span><span style="color: #000000;">{@ 换行的单行注释} </span><span style="color: #008000;"><!--</span><span style="color: #008000;"> 格式错误,单行注释无法换行,模板引擎无法解析 </span><span style="color: #008000;">--></span><span style="color: #008000;"><!--</span><span style="color: #008000;"> 多行注释的格式是:{#}...{/#}一头一尾要呼应,内容也可以不写 </span><span style="color: #008000;">--></span><span style="color: #000000;">{#}这是多行注释,注意首位呼应!{/#} </span><span style="color: #008000;"><!--</span><span style="color: #008000;"> 正确的格式 </span><span style="color: #008000;">--></span><span style="color: #000000;">{#}这是多行注释,我换行了!{/#} </span><span style="color: #008000;"><!--</span><span style="color: #008000;"> 正确的格式 </span><span style="color: #008000;">--></span><span style="color: #000000;">{#} 没有写结尾符号 </span><span style="color: #008000;"><!--</span><span style="color: #008000;"> 错误的格式,模板引擎无法解析 </span><span style="color: #008000;">--></span>
ログイン後にコピー

 

14. 模板加载标识符,加载方式分为 3 类,别分为:include 对普通文件的直接加载;template 对模板文件进行编译后加载;source 对模板文件进行编译后直接输出编译文件的路径(此方法较为特殊且并不完美,需要在特定的场合中使用,比如:框架页面的调用)

首先是对普通文件的加载调用,代码如下:

<span style="color: #008000;"><!--</span><span style="color: #008000;"> 注意抒写格式,被直接加载的文件多半是 php 文件,且文件必须要存在,不存在的文件,模板引擎将会给出一个错误提示,并且终止代码的执行 </span><span style="color: #008000;">--></span><span style="color: #008000;"><!--</span><span style="color: #008000;"> 文件名前后的引号,单双引号都可以,但必须保持一致,不能一单一双,否则模板引擎将不会对其解析 </span><span style="color: #008000;">--></span><span style="color: #000000;">{include path = "test.php"} </span><span style="color: #008000;"><!--</span><span style="color: #008000;"> 正确的格式,将被解析 </span><span style="color: #008000;">--></span><span style="color: #000000;">{include path = 'abc.php"} </span><span style="color: #008000;"><!--</span><span style="color: #008000;"> 错误的格式,无法被解析 </span><span style="color: #008000;">--></span><span style="color: #008000;"><!--</span><span style="color: #008000;"> 如果出现了同一个文件被加载了两次,那么模板引擎只会对其加载第一次后,自动忽略其后的加载 </span><span style="color: #008000;">--></span><span style="color: #000000;">{include path = "123.php"} </span><span style="color: #008000;"><!--</span><span style="color: #008000;"> 第一次被加载成功 </span><span style="color: #008000;">--></span><span style="color: #000000;">{include path = "123.php"} </span><span style="color: #008000;"><!--</span><span style="color: #008000;"> 与上一个文件同属一个文件,将无法被再次加载,而被自动忽略 </span><span style="color: #008000;">--></span>
ログイン後にコピー

下面是对模板文件的编译加载,代码如下:

<span style="color: #008000;"><!--</span><span style="color: #008000;"> 格式与 include 方式基本一样,就不重复阐述了,不一样的是 include 是需要给出具体的路径地址,而 template 则只需要给出模板名称即可,模板引擎会自动找到该模板文件 </span><span style="color: #008000;">--></span><span style="color: #000000;">{template path = 'test.tpl'} </span><span style="color: #008000;"><!--</span><span style="color: #008000;"> 正确的格式,将会被编译后加载 </span><span style="color: #008000;">--></span>
ログイン後にコピー

最后就是模板文件的编译地址的输出,该功能较特殊,即使不理解也没关系,该方法有严重的 BUG 尚未处理完毕,因此并不完美,且使用的概率也极低,这里只做简单的介绍。在其后的版本迭代中,是否会保留并完善,尚在定夺,代码如下:

<span style="color: #008000;"><!--</span><span style="color: #008000;"> 这里我们将使用 iframe 框架页面,来调用 source 加载方法,调用格式与前两种雷同,就不在阐述 </span><span style="color: #008000;">--></span><span style="color: #008000;"><!--</span><span style="color: #008000;"> 这样使用其实就可以了,但有严重的 BUG 出现,原因是所有在 frame.tpl 中注入的模板标记被解析后,将无法找到源头,也就是说 php 将无法对其正确处理,并且因为无法找到源头,而会报错,该 BUG 的解决方案还在研究中,这里仅提供给大家思考 </span><span style="color: #008000;">--></span><span style="color: #0000ff;"><</span><span style="color: #800000;">iframe </span><span style="color: #ff0000;">src</span><span style="color: #0000ff;">="{source path = 'frame.tpl'}"</span><span style="color: #0000ff;">></</span><span style="color: #800000;">iframe</span><span style="color: #0000ff;">></span>
ログイン後にコピー

 

15. 接下来是经常会被用到的 if 分歧语句,他和 php 的 if 语句很类似,但功能上却很简单,且不支持多重判断以及嵌套判断,但我会在其后的版本迭代中让其功能逐步强大。

<span style="color: #008000;"><!--</span><span style="color: #008000;"> if 语句的格式其实和多行注释一样,一定要注意首位呼应,但大小写无所谓都能够支持和 PHP 原生的 if 语句是一样的。 </span><span style="color: #008000;">--></span><span style="color: #000000;">{if $action} </span><span style="color: #008000;"><!--</span><span style="color: #008000;"> 只要被注入的 {$action} 变量的值为 true,或隐式转换后为 true,那么 if 语句中的代码将被显示 </span><span style="color: #008000;">--></span><span style="color: #0000ff;"><</span><span style="color: #800000;">p</span><span style="color: #0000ff;">></span>界面1<span style="color: #0000ff;"></</span><span style="color: #800000;">p</span><span style="color: #0000ff;">></span><span style="color: #000000;">{/if}{if !$action} </span><span style="color: #008000;"><!--</span><span style="color: #008000;"> 加入了逻辑非的判断,只要为 false 则被显示 </span><span style="color: #008000;">--></span><span style="color: #0000ff;"><</span><span style="color: #800000;">p</span><span style="color: #0000ff;">></span>界面2<span style="color: #0000ff;"></</span><span style="color: #800000;">p</span><span style="color: #0000ff;">></span><span style="color: #000000;">{/if}{if $action} </span><span style="color: #008000;"><!--</span><span style="color: #008000;"> 双层判断的时候,为 true 时显示界面1,为 false 时显示界面2 </span><span style="color: #008000;">--></span><span style="color: #0000ff;"><</span><span style="color: #800000;">p</span><span style="color: #0000ff;">></span>界面1<span style="color: #0000ff;"></</span><span style="color: #800000;">p</span><span style="color: #0000ff;">></span><span style="color: #000000;">{else}</span><span style="color: #0000ff;"><</span><span style="color: #800000;">p</span><span style="color: #0000ff;">></span>界面2<span style="color: #0000ff;"></</span><span style="color: #800000;">p</span><span style="color: #0000ff;">></span><span style="color: #000000;">{/if}{if $action} </span><span style="color: #008000;"><!--</span><span style="color: #008000;"> 错误的格式,没有结尾,不会被模板引擎解析 </span><span style="color: #008000;">--></span>
ログイン後にコピー

 

16. 终于到了最后的也是最复杂的 foreach 循环语句的调用了,其功能和 PHP 一样,只是格式上稍有改动。

<span style="color: #008000;"><!--</span><span style="color: #008000;"> 注意在调用 foreach 和 if 语句一样要首尾呼应,而且如果变量不是数组格式,那么 php 将会自动报出一个错误 </span><span style="color: #008000;">--></span><span style="color: #008000;"><!--</span><span style="color: #008000;"> 其中 $array 就是被注入的模板变量,注意要是数组格式;而 key 和 value 则是对应数组中的键值对,必须写,否则格式不正确,将无法被模板引擎解析 </span><span style="color: #008000;">--></span><span style="color: #000000;">{foreach $array(key, value)}    </span><span style="color: #0000ff;"><</span><span style="color: #800000;">p</span><span style="color: #0000ff;">></span>{%key} ... {%value}<span style="color: #0000ff;"></</span><span style="color: #800000;">p</span><span style="color: #0000ff;">></span> <span style="color: #008000;"><!--</span><span style="color: #008000;"> 注意键值对可以不是 key 和 value,但一定要和之前同名,否则无法被解析 </span><span style="color: #008000;">--></span><span style="color: #000000;">{/foreach}{foreach $userList(id, username)}    </span><span style="color: #0000ff;"><</span><span style="color: #800000;">p</span><span style="color: #0000ff;">></span>{%id} ... {%username}<span style="color: #0000ff;"></</span><span style="color: #800000;">p</span><span style="color: #0000ff;">></span> <span style="color: #008000;"><!--</span><span style="color: #008000;"> 自定义的键值对,格式正确 </span><span style="color: #008000;">--></span>    <span style="color: #0000ff;"><</span><span style="color: #800000;">p</span><span style="color: #0000ff;">></span>{%password}<span style="color: #0000ff;"></</span><span style="color: #800000;">p</span><span style="color: #0000ff;">></span> <span style="color: #008000;"><!--</span><span style="color: #008000;"> 错误的格式,并没有被定义,因此无法被解析 </span><span style="color: #008000;">--></span><span style="color: #000000;">{/foreach}</span>
ログイン後にコピー

 

好了,写到这里我也可以长长的舒口气,模板引擎原型版的教导到此就结束了。虽然教导文章已经很详细了,但建议大家配合 API 手册和实例代码进行参照阅读,这样效果会更好更便于理解和掌握。当然因为是文章,所以即使你描述的再详细,文字也是抽象的,需要大家多动手,而对于动手能力较差的新手们,这篇教导文章则起不到多大的作用,可能反而会被弄得一头雾水,甚至最终对此厌恶,所以我有想过如果以后有可能,在版本迭代更新到一定程度后,我会针对性的出一套系列教导视频,那样的话就不会像文字这样抽象,新手也能够很快的学习。

 

如果你是从头看到尾,那么我真心感谢您的阅览,我想你应该有什么话想说,请一定要在下面留言告诉我,有问题也请及时留言,感谢各位的支持~!

 

1楼悲惨的大爷
学习下源码
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

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

AI Clothes Remover

AI Clothes Remover

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

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

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

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

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

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

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

CakePHP プロジェクトの構成 CakePHP プロジェクトの構成 Sep 10, 2024 pm 05:25 PM

この章では、CakePHP の環境変数、一般設定、データベース設定、電子メール設定について理解します。

Ubuntu および Debian 用の PHP 8.4 インストールおよびアップグレード ガイド Ubuntu および Debian 用の PHP 8.4 インストールおよびアップグレード ガイド Dec 24, 2024 pm 04:42 PM

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

CakePHP の日付と時刻 CakePHP の日付と時刻 Sep 10, 2024 pm 05:27 PM

Cakephp4 で日付と時刻を操作するには、利用可能な FrozenTime クラスを利用します。

CakePHP ファイルのアップロード CakePHP ファイルのアップロード Sep 10, 2024 pm 05:27 PM

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

CakePHP ルーティング CakePHP ルーティング Sep 10, 2024 pm 05:25 PM

この章では、ルーティングに関連する次のトピックを学習します。

CakePHP について話し合う CakePHP について話し合う Sep 10, 2024 pm 05:28 PM

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

PHP 開発用に Visual Studio Code (VS Code) をセットアップする方法 PHP 開発用に Visual Studio Code (VS Code) をセットアップする方法 Dec 20, 2024 am 11:31 AM

Visual Studio Code (VS Code とも呼ばれる) は、すべての主要なオペレーティング システムで利用できる無料のソース コード エディター (統合開発環境 (IDE)) です。 多くのプログラミング言語の拡張機能の大規模なコレクションを備えた VS Code は、

CakePHP バリデータの作成 CakePHP バリデータの作成 Sep 10, 2024 pm 05:26 PM

Validator は、コントローラーに次の 2 行を追加することで作成できます。

See all articles