php常见面试(Smarty及相关知识)
1、Smarty简介: 是一种php模板引擎,它分开了后台程序和前台页面内容,使程序员和美工分工合作。还有其它模版引擎实现同样的目的。
2、Smarty使用:
建立php文件:
包含smarty类文件 include(Smarty/Smarty.class.php);
实例化smarty对象 $smarty = new Smarty();
通过smarty对象定义模板文件保存位置(及其它属性)
为模板定义变量 或为模板传数据(一般是从数据库中查询的数据)
指定调用的html文件即模板文件
创建模板文件:
在模板文件中显示数据
具体使用:
第一步、定义php文件
<?php
//1、包含Smarty类文件
require("smarty/Smarty.class.php"); //2、实例化Smarty类
$smarty = new Smarty();//设置各个目录的路径,这里是安装的重点
$smarty->template_dir ="./templates"; //模板存放位置
$smarty->compile_dir ="smarty/templates/templates_c"; //编译路径
$smarty->config_dir = "smarty/templates/config"; //配置文件存放位置
configs
$smarty->cache_dir ="smarty/templates/cache"; //缓存目录存放位置
//smarty模板有高速缓存的功能,如果这里是true的话即打开caching,但是 会造成网页不立即更新的问题,当然也可以通过其他的办法解决
$smarty->caching = false;
$smarty->left_delimiter = "{#"; //重新定义边界,因为默认边界“{}“符,在html 页面中嵌入js脚本文件编写代码段时使用的就是”{}“符,自定义边界符还可以 是<{ }>, {/ /} 等
$smarty->right_delimiter = "#}";
$hello = "Hello World!";//赋值
$smarty->assign("hello",$hello);//引用模板文件 为模板传值
$smarty->display('index.tpl'); //调用模板
?>
执行index.php就能看到Hello World!了
3、基本语法
1) 注释
语法:{* 注释内容 *}
2) assign()
注解:给模板进行变量赋值;
3) display()
注解:显示模板;
4) fetch()
注解:获得模板编译输出后的结果,类型为字符串,等同于 echo display();
3、变量来的来源
1) PHP分配
2) 配置文件
① 引入配置文件
② 使用配置文件中变量
`注意:配置文件中(cfg.php)的写法如下
扩展:smarty 中的文件包含写法:
3) 保留变量
4、变量调节器 lower
1) date_format
2) Default
注解:当变量是unset或者empty的字符串时,默认值将显示。
5、内建函数
1) config_load
注解:{config_load}用于从配置文件中 加载配置变量#variables#。
(参考demo如上配置)
2) foreach
注解:建议采用这种(smarty 3.0)写法
3) include
注解:{include}用于载入其他模板到当前模板中
(参考demo如上配置)
4) if else if 手册自己做
5) literal
注解:{literal}可以让一个模板区域的字符原样输出。
6) php
重要说明
Smarty已经废弃{php}标签,强烈建议不要使用。
第九单元:设计模式
一、单例模式
1、概念了解
1) Q:什么是单例模式?
A:单例模式一种设计模式,一个类只能实例化一个对象;
2、编写单例类
1) 分析:为了防止在类外使用new关键字实例化对象,那么首先new 是万恶之源
问:该怎么做能让它实例化不成功?
答:类内部私有的构造方法。
2) 私有了构造方法,那么如何才能是实例化一个对象呢?
答:关闭了一扇门,可以打开一扇窗啊,开放一个公开的方法,用来实例化对象。
3) 若想每次得到的都是同一个对象,请思考该怎么做?
答:私有静态化成员一个成员属性,用来存储实例化后的对象,为了看出两次实例化后的是两个对象,在实例化对象时,加入了随机数,代码如下
注:instanceof 用来判断对象是否属于某个类。
通过打印,我们可以看出这两对象中随机数是一样的,思考:此时我们的单例就完成了吗?
2、截止到目前单例类完成了吗?思考如下问题
4) Q:通过Single::getInstance 得到一个对象$obj1,克隆一个$obj2,思考 $obj1和$obj2相同吗?如果不同如何禁止这种克隆行为?
A:不相同,私有化克隆魔术方法可禁止克隆。
5) 思考:如果子类继承了该类,(构造函数被重写)那么又可以new对象了,
Q:请问这样得到的对象是同一个的吗?
A:同过new出来的,那肯定不是了。
Q:我们写的单例类这么一继承就不灵了。那么该如何解决呢?
A:final 关键词修饰类方法,
Final知识总结:
① final 修饰符不能修饰类属性,报如下错误:
② Final 修饰符修饰类,该类不能继承;
③ Final修饰符修饰成员方法,成员方法可以被继承,但不可以被重写。
php常见面试(Smarty及相关知识)的更多相关文章
- 【面试】我是如何在面试别人Redis相关知识时“软怼”他的
事出有因 Redis是一个分布式NoSQL数据库,因其数据都存储在内存中,所以访问速度极快,因此几乎所有公司都拿它做缓存使用,所以Redis常被称为分布式缓存. 一次我的一个同事让我帮他看Redis相 ...
- 【面试】我是如何面试别人List相关知识的,深度有点长文
- 【转载】前端面试“http全过程”将所有HTTP相关知识抛出来了...
原文:前端面试“http全过程”将所有HTTP相关知识抛出来了... 来一篇串通,一个http全过程的问题,把所有HTTP相关知识点都带过一遍 http全过程 输入域名(url)-->DNS映射 ...
- 常见面试第二题之什么是Context
今天的面试题,也就是我们常见面试题系列的第二题,我们来讲一讲android中的context.我相信大家android开发者一定对于这个context非常熟悉,肯定都有使用过,肯定没有没使用过的.但是 ...
- Redis的那些最常见面试问题
随笔:经过长达一周的奔波和面试,电话面试,回首今天终于成功的入职了,总共面试了大概10家公司,包括阿里,京东,IBM等等,京东技术过了,学历因为非统招就被pass了,阿里面了2次电话面试就没下文了,估 ...
- (转)Redis的那些最常见面试问题
背景:最近在准备面试相关的题目,发现redis基本一片空白,有必要好好总结下. 转自:https://www.cnblogs.com/Survivalist/p/8119891.html 1.什么是r ...
- Redis的那些最常见面试问题(转)
Redis的那些最常见面试问题 1.什么是redis? Redis 是一个基于内存的高性能key-value数据库. 2.Reids的特点 Redis本质上是一个Key-Value类型 ...
- Redis的最常见面试问题
Redis的那些最常见面试问题[转] 1.什么是redis? Redis 是一个基于内存的高性能key-value数据库. 2.Reids的特点 Redis本质上是一个Key-Value类型的内存数据 ...
- 电路相关知识--读<<继电器是如何成为CPU的>>
电路相关知识–读<<继电器是如何成为CPU的>> */--> *///--> *///--> 电路相关知识–读<<继电器是如何成为CPU的> ...
随机推荐
- 多线程(二)~Thread类相关的API介绍
一.线程安全问题: 当我们使用多个线程操作统一方法内的局部变量的时候,每个局部变量在当前线程里都有自己的副本,这种情况是不会出现线程安全问题的.当我们两个线程同时操作全局变量的时候,有可能 ...
- Siebel 基础入门--权限控制
企业应用最基本的要求就是只授予用户在他工作职责范围内的权限,一般而言,这种权限都包含两种,一种是对于相应的功能的可见性(或者形象地说,菜单的可见 性,这个是应用层面界面的,这种权限在Siebel里称为 ...
- Java反射创建带构造参数的类 并执行方法
部分代码 public void go(ServletRequest request,ServletResponse response){ String methodName = "inde ...
- docker nginx 反向代理
上一篇介绍了docker 安装和docker-compose配置 使用docker pull nginx:1.12.0 编写docker-compose.yml nginx: image: 17dae ...
- 如何将一个PDF文件里的图片批量导出
假设我有下面这个PDF文件,里面有很多图片,我想把这些图片批量导出,而不是在Adobe Acrobat Reader里一张张手动拷贝: 本文介绍一种快捷做法. 用PDF-XChange Editor打 ...
- sql 两表查询后 更新某表中部分字段
这是上一个sql更新某表字段的一个延伸,在更新表数据时,实际上会有多表数据查询场景,查询后,只需要更新某一个表中的数据,以下提供两个方法, 第一种使用update 两表查询 update api_ma ...
- bzoj 2179 FFT
求两个高精度的乘法. 根据高位低位,填入多项式的系数,求两个卷积,然后进位操作.
- 架构师必须知道的26项PHP安全实践
PHP是一种开源服务器端脚本语言,应用很广泛.Apache web服务器提供了这种便利:通过HTTP或HTTPS协议,访问文件和内容.配置不当的服务器端脚本语言会带来各种各样的问题.所以,使用php时 ...
- 运行出现Server Tomcat v8.5 Server at localhost failed to start.和A child container failed during start
出现问题: 解决方法: 1.看servlet文件中的@WebServlet“()”,里面是否少了/字符,如图: 加上即可,有问题随时留言,欢迎您的咨询!
- Android学习笔记_11_ListView控件使用
一.界面设计: 1.activity_main.xml文件: <RelativeLayout xmlns:android="http://schemas.android.com/apk ...