PHP-Web 应用程序开发:使用模板_PHP
程序开发
每个进行过较大型的 PHP-Web 应用程序设计的开发人员大概都有如下的经历:花大量的时间写超文本语句,为页面排版,兼作美工等;或在整合的程序代码在和HTML静态页面时花费大量的时间。的确,用脚本语言开发 Web 应用不容易将数据的处理和数据的显示分开,但在多人合作的情况下,如果无法将数据和显示分开,将大大影响开发的效率,专业分工的发挥。为了解决这个问题,PHP 也提供了自己的解决方案,有多种,本文主要介绍 PHPLIB 中的 Template 类。
一、模板处理类的设计
模板处理类主要需完成以下的任务:
- 从模板文件中读取显示用的HTML代码。
- 将模板文件和实际生成的数据结合,生成输出的结果。
- 允许同时处理多个模板。
- 允许模板的嵌套。
- 允许对模板中的某个单独的部分进行处理。
归纳上述任务,模板类的设计目标为:从多个模板文件中读入显示的HTML代码,将这些显示代码中需要动态数据的地方替换为PHP程序运算所得出的数据,然后按照一定的顺序输出。其中,替换的部分可以自由的设定。
读取显示用的HTML代码采用读文件的方式
模板文件和数据的结合采用正则替换
处理多个模板用数组存储来实现。
模板的嵌套的实现主要的想法是:将模板和输出(任何中间的分析结果)一视同仁,都可拿来做替换,即可实现。
单独部分的处理的通过在模板文件中设定标注,然后在正则替换中结合标注来控制,实现部分替换。
二、模板处理类的实现
请参看 PHPLib 中的 Template.inc,总共 345 行代码,有详细的注释。以下列举一些主要的函数,供研读参考:
1) function set_file($handle,$filename=” ”) line 77, 读取文件
2) function set_var($varname, $value = "") line 119, 设置映射数据-替换变量
3) function set_block($parent, $handle, $name = "") line 96, 设置标注
4) function subst($handle) line 136, 执行数据替换
5) function parse($target, $handle, $append = false) line 165, 执行模板文件与数据的结合
6) function p($varname) line 268, 输出处理结果
注:本人下载的php-lib7.2c的Template.inc文件中的第95行少了个“/”,加上后使用正常。
三、模板处理类的使用
3.1 最基本的例子
为了简单起见,这里假设模板文件、使用模板的PHP文件和模板处理类的文件都放在同一个目录下。PHPLIB中的习惯是使用ihtml后缀为模板文件的后缀。
下面是要使用的模板文件:
这是一个使用模板的测试文件!
当前的时间是{currenttime}!
注:模板文件和通常的 HTML 文件差不多,唯一不同的是使用“{}”括起来的是可以被模板处理类替换的动态内容的变量。
接下来使用模板处理类来处理上面的模板:
//引入Template类
include("template.inc");
//得到需要替换的数据
$timeNow=date("Y-m-d H:i:s",time());
//实例化一个Template类
$template= new Template();
//载入test.ihtml模板
$template->set_file("handle1","test.ihtml");
//使用$timeNow的值替换模板中的currenttime
$template->set_var("currenttime",$timeNow);
//进行实际的模板操作
$template->parse("output","handle1");
//输出最后结果
$template->p("output");
?>
3.2 模板嵌套与块设定
下面这个例子来自与PHPLIB的参考手册,综合性较强,这里需说明的一点是设定块的目的与嵌套无关,但这个范例包含了两者。请仔细阅读,块设定是为了避免这种情况:原本可在一个模板文件(静态页面)里完成的内容,因需要部分循环,而将部分循环内容提取单独做成模板文件。请思考,如果不用块设定,这个例子是不是需要3个模板文件呢?
模板文件1,page.ihtml
{PAGETITLE}
{OUT} Content
模板文件2,box.ihtml
{TITLE}
{NUM} {BIGNUM}
模板处理文件,test.php
//引入Template类
include("template.inc");
#实例化一个Template类,名字叫$t
$t = new Template();
# 建立包含模板文件的数组
$t->set_file(array(
"page" => "page.ihtml",
"box" => "box.ihtml"));
# 载入模板文件box中的一个块row,引用名称为rows
$t->set_block("box", "row", "rows");
# 设置替换
$t->set_var(array("TITLE" => "Testpage",
"PAGETITLE" => "hugo"));
# 生成数据NUM,BIGNUM
for ($i=1; $i3; $i ) {
$n = $i;
$nn = $i*10;
#设置替换
$t->set_var(array("NUM" => $n, "BIGNUM" => $nn));
#进行分析,分析的结果添加到rows的后面
$t->parse("rows", "row", true);
}
# 生成box,再生成page
$t->parse("OUT", array("box", "page"));
# 输出最后结果
$t->p("OUT");
?>

Hot AI Tools

Undresser.AI Undress
AI-powered app for creating realistic nude photos

AI Clothes Remover
Online AI tool for removing clothes from photos.

Undress AI Tool
Undress images for free

Clothoff.io
AI clothes remover

AI Hentai Generator
Generate AI Hentai for free.

Hot Article

Hot Tools

Notepad++7.3.1
Easy-to-use and free code editor

SublimeText3 Chinese version
Chinese version, very easy to use

Zend Studio 13.0.1
Powerful PHP integrated development environment

Dreamweaver CS6
Visual web development tools

SublimeText3 Mac version
God-level code editing software (SublimeText3)

Hot Topics



0.What does this article do? We propose DepthFM: a versatile and fast state-of-the-art generative monocular depth estimation model. In addition to traditional depth estimation tasks, DepthFM also demonstrates state-of-the-art capabilities in downstream tasks such as depth inpainting. DepthFM is efficient and can synthesize depth maps within a few inference steps. Let’s read about this work together ~ 1. Paper information title: DepthFM: FastMonocularDepthEstimationwithFlowMatching Author: MingGui, JohannesS.Fischer, UlrichPrestel, PingchuanMa, Dmytr

The performance of JAX, promoted by Google, has surpassed that of Pytorch and TensorFlow in recent benchmark tests, ranking first in 7 indicators. And the test was not done on the TPU with the best JAX performance. Although among developers, Pytorch is still more popular than Tensorflow. But in the future, perhaps more large models will be trained and run based on the JAX platform. Models Recently, the Keras team benchmarked three backends (TensorFlow, JAX, PyTorch) with the native PyTorch implementation and Keras2 with TensorFlow. First, they select a set of mainstream

Deleted something important from your home screen and trying to get it back? You can put app icons back on the screen in a variety of ways. We have discussed all the methods you can follow and put the app icon back on the home screen. How to Undo Remove from Home Screen in iPhone As we mentioned before, there are several ways to restore this change on iPhone. Method 1 – Replace App Icon in App Library You can place an app icon on your home screen directly from the App Library. Step 1 – Swipe sideways to find all apps in the app library. Step 2 – Find the app icon you deleted earlier. Step 3 – Simply drag the app icon from the main library to the correct location on the home screen. This is the application diagram

Facing lag, slow mobile data connection on iPhone? Typically, the strength of cellular internet on your phone depends on several factors such as region, cellular network type, roaming type, etc. There are some things you can do to get a faster, more reliable cellular Internet connection. Fix 1 – Force Restart iPhone Sometimes, force restarting your device just resets a lot of things, including the cellular connection. Step 1 – Just press the volume up key once and release. Next, press the Volume Down key and release it again. Step 2 – The next part of the process is to hold the button on the right side. Let the iPhone finish restarting. Enable cellular data and check network speed. Check again Fix 2 – Change data mode While 5G offers better network speeds, it works better when the signal is weaker

I cry to death. The world is madly building big models. The data on the Internet is not enough. It is not enough at all. The training model looks like "The Hunger Games", and AI researchers around the world are worrying about how to feed these data voracious eaters. This problem is particularly prominent in multi-modal tasks. At a time when nothing could be done, a start-up team from the Department of Renmin University of China used its own new model to become the first in China to make "model-generated data feed itself" a reality. Moreover, it is a two-pronged approach on the understanding side and the generation side. Both sides can generate high-quality, multi-modal new data and provide data feedback to the model itself. What is a model? Awaker 1.0, a large multi-modal model that just appeared on the Zhongguancun Forum. Who is the team? Sophon engine. Founded by Gao Yizhao, a doctoral student at Renmin University’s Hillhouse School of Artificial Intelligence.

Recently, the military circle has been overwhelmed by the news: US military fighter jets can now complete fully automatic air combat using AI. Yes, just recently, the US military’s AI fighter jet was made public for the first time and the mystery was unveiled. The full name of this fighter is the Variable Stability Simulator Test Aircraft (VISTA). It was personally flown by the Secretary of the US Air Force to simulate a one-on-one air battle. On May 2, U.S. Air Force Secretary Frank Kendall took off in an X-62AVISTA at Edwards Air Force Base. Note that during the one-hour flight, all flight actions were completed autonomously by AI! Kendall said - "For the past few decades, we have been thinking about the unlimited potential of autonomous air-to-air combat, but it has always seemed out of reach." However now,

MetaMask (also called Little Fox Wallet in Chinese) is a free and well-received encryption wallet software. Currently, BTCC supports binding to the MetaMask wallet. After binding, you can use the MetaMask wallet to quickly log in, store value, buy coins, etc., and you can also get 20 USDT trial bonus for the first time binding. In the BTCCMetaMask wallet tutorial, we will introduce in detail how to register and use MetaMask, and how to bind and use the Little Fox wallet in BTCC. What is MetaMask wallet? With over 30 million users, MetaMask Little Fox Wallet is one of the most popular cryptocurrency wallets today. It is free to use and can be installed on the network as an extension

The latest video of Tesla's robot Optimus is released, and it can already work in the factory. At normal speed, it sorts batteries (Tesla's 4680 batteries) like this: The official also released what it looks like at 20x speed - on a small "workstation", picking and picking and picking: This time it is released One of the highlights of the video is that Optimus completes this work in the factory, completely autonomously, without human intervention throughout the process. And from the perspective of Optimus, it can also pick up and place the crooked battery, focusing on automatic error correction: Regarding Optimus's hand, NVIDIA scientist Jim Fan gave a high evaluation: Optimus's hand is the world's five-fingered robot. One of the most dexterous. Its hands are not only tactile
