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的> ...
随机推荐
- Android Activity中状态保存机制
在Activity中保存用户的当前操作状态,如输入框中的文本,一般情况下载按了home键后,重新进入文本框中的东西会丢下,所以我们要保存当前页面信息,如在写短信的时候接到一个电话,那么当你接电话的时候 ...
- Jcrontab定时任务
两篇博客: http://blog.csdn.net/jijijiujiu123/article/details/9086847 网站同事写的(chenrui) ...
- java面试题之----get和post请求方法的区别
GET和POST两种基本请求方法的区别 GET和POST是HTTP请求的两种基本方法,要说它们的区别,接触过WEB开发的人都能说出一二. 最直观的区别就是GET把参数包含在URL中,POST通过req ...
- C#实现Stream与byte[]之间的转换实例教程
一.二进制转换成图片 MemoryStream ms = new MemoryStream(bytes); ms.Position = ; Image img = Image.FromStream(m ...
- 在浏览器的市场上,IE依然是放弃了,firefox还在继续~~
自从微软失败后,发布了Edge:但是依然是没有多少市场的,毕竟各种难受: 单从开发者工具,我是没有其它选择了, ie的不能用,https://www.microsoft.com/en-us/welco ...
- IOS UIDevice距离传感器(打开 关闭)
● 什么是传感器 ● 传感器是一种感应\检测装置, 目前已经广泛应用于智能手机上 ● iPhone5中内置的传感器有 ● 运动传感器\加速度传感器\加速计(Motion/Acceleromet ...
- Scrapy研究探索(三)——Scrapy核心架构与代码执行分析
学习曲线总是这样,简单样例"浅尝".在从理论+实践慢慢攻破.理论永远是基础,切记"勿在浮沙筑高台". 一. 核心架构 关于核心架构.在官方文档中阐述的非常清晰, ...
- 【洛谷5280】[ZJOI2019] 线段树(线段树大力分类讨论)
点此看题面 大致题意: 给你一棵线段树,两种操作.一种操作将每棵线段树复制成两个,然后在这两个线段树中的一个上面进行\(Modify(l,r)\).另一种操作询问所有线段树的\(tag\)总和. 大力 ...
- Spring+Velocity+Mybatis入门
转自:https://blog.csdn.net/duqi_2009/article/details/47752169 一.开发工具 开发过程中使用的操作系统是OS X,关于软件安装的问题请大家移步高 ...
- Windows后门小计
嗅探欺骗: 在目标机上安装嗅探工具窃取管理员的密码 放大镜替换: 构造批处理: @echo off net user gslw$ test168 /add net localgroup adminis ...