isset()和empty()的区别
1、isset()是检测一个变量是否设置并且非空
当一个变量未设置时,如:
结果为no
或者为空时
结果也是no
2、empty则是检测一个变量是否为空
empty() 判断一个变量是否被认为是空的。当一个变量并不存在,或者它的值等同于 FALSE,那么它会被认为不存在。如果变量不存在的话,empty()并不会产生警告。
以下变量会被默认为空:
- "" (空字符串)
- 0 (作为整数的0)
- 0.0 (作为浮点数的0)
- "0" (作为字符串的0)
- NULL
- FALSE
- array() (一个空数组)
- $var; (一个声明了,但是没有值的变量)
在PHP中error_reporting这个函数有什么作用?
error_reporting()这个函数主要是设置php的报错级别
该函数能够在运行时设置 error_reporting 指令。 PHP 有诸多错误级别,使用该函数可以设置在脚本运行时的级别
如果没有设置可选参数 level, error_reporting() 仅会返回当前的错误报告级别
参数level的可选值为
E_ERROR、E_WARNING 、E_PARSE 、E_NOTICE 、E_CORE_ERROR、E_CORE_WARNING、E_COMPILE_ERROR、E_COMPILE_WARNING、E_USER_ERROR、E_USER_WARNING、E_USER_NOTICE、E_STRICT 、E_RECOVERABLE_ERROR、E_DEPRECATED、E_USER_DEPRECATED、E_ALL
下面是一些示例:
//禁用错误报告,也就是不显示错误
error_reporting(0);
//报告运行时错误
error_reporting(E_ERROR | E_WARNING | E_PARSE);
//报告所有错误
error_reporting(E_ALL);
现在编程中经常采取MVC三层结构,请问MVC分别指哪三层,有什么优点?
MVC三层:
M层代表着模型层,主要用户对表数据的处理,由Model类来完成
C层则是代表着控制器层,应用控制器(核心控制器App类)和Action控制器都承担了控制器的角色,Action控制器完成业务过程控制,而应用控制器负责调度控制
V层为视图层,由View类和模板文件组成,模板做到了100%分离,可以独立预览和制作。
优点是:可以实现代码的重用性,避免产生代码冗余;M和V的实现代码分离,从而使同一个程序可以使用不同的表现形式。
AJAX的优势有哪些?
1、提高了性能和速度
减少客户端和服务器之间的流量传输,同时减少了双方响应的时间,响应更快,因此提高了性能和速度。
2、交互性能好
使用ajax,可以开发更快,更具交互性的Web应用程序。
3、异步调用
AJAX对Web服务器进行异步调用。这意味着客户端浏览器在开始渲染之前避免等待所有数据到达。
4、节省带宽
基于Ajax的应用程序使用较少的服务器带宽,因为无需重新加载完整的页面。
5、使用XMLHttpRequest在Ajax Web开发技术中起着重要作用。XMLHttpRequest是由Microsoft设计的特殊JavaScript对象。XMLHttpRequest对象调用作为异步HTTP请求到服务器以传输数据。它用于向非Ajax页面发出请求。
6、拥有开源JavaScript库 : JQuery,Prototype,Scriptaculous等。AJAX通过HTTP协议进行通信。
7、实现页面局部刷新,增强用户体验效果
语句include和require的区别是什么?为避免多次包含同一文件,可用什么语句代替它们?
include和require的区别
1、加载失败的处理方式不同
include与require除了在处理引入文件的方式不同外,最大的区别就是:
include在引入不存文件时产生一个警告且脚本还会继续执行,
require则会导致一个致命性错误且脚本停止执行。
2、include()是有条件包含函数,而 require()则是无条件包含函数(有条件是指在判断条件时,若成立,include()引入的文件就会引入,否则不会。而无条件则是不会受条件的影响,都会引入成功)
3、文件引用方式
include有返回值(为boolean值),而require没有
为避免多次包含同一文件,可用什么语句代替它们
include() 可以使用include_once()代替
require() 可以使用require_once()代替
_once 后缀表示已加载的不加载
include_once() 和 require_once() 语句也是在脚本执行期间包括运行指定文件。此行为和 include() 语句及 require() 类似,使用方法也一样。唯一区别是如果该文件中的代码已经被包括了,则不会再次包括。这两个语句应该用于在脚本执行期间,同一个文件有可能被包括超过一次的情况下,确保它只被包括一次,以避免函数重定义以及变量重新赋值等问题。
foo()和@foo()之间有什么区别?
@为错误控制运算符 当将其放置在一个 PHP 表达式之前,该表达式可能产生的任何错误信息都被忽略掉。
前面加@foo()代表代码运行时会将foo()里的错误忽略,不给出提示
echo、print_r、print、var_dump区别
echo()
可以一次输出多个值,多个值之间用逗号分隔。echo是语言结构(language construct),而并不是真正的函数,因此不能作为表达式的一部分使用。
print()
函数print()打印一个值(它的参数),如果字符串成功显示则返回true,否则返回false。
print_r()
可以把字符串和数字简单地打印出来,而数组则以括起来的键和值得列表形式显示,并以Array开头。但print_r()输出布尔值和NULL的结果没有意义,因为都是打印"\n"。因此用var_dump()函数更适合调试。
var_dump()
判断一个变量的类型与长度,并输出变量的数值,如果变量有值输的是变量的值并回返数据类型。此函数显示关于一个或多个表达式的结构信息,包括表达式的类型与值。数组将递归展开值,通过缩进显示其结构。
写出smarty模板的特点
Smarty的特点是将模板编译成PHP脚本,然后执行这些脚本。很快,非常灵活。
是一个模板类,一般也简称为模板。Smarty里面有专门的模板引擎。模板的主要功能就是逻辑与显示的分离,也就是PHP和HTML的分离。
1.速度:相对于其他模板而言,采用Smarty模板编写的程序可以获得最快的速度;
2.编译性调用:采用Smarty模板编写的程序在运行时会生成一个PHP和HTML混编的文件,在下一次访问模板时会直接访问这个混编的文件,而不必重新编译,所以可以提高访问速度.
3.缓存技术:Smarty提供一种可选择的缓存技术,可以将客户端的HTML文件缓存成一个静态页,当用户开启缓存后,在指定的时间内,WEB请求会直接调用这个缓存文件,即直接调用静态的HTML文件.
4.插件技术:因为Smarty模板引擎是通过PHP面向对象技术实现的,所以不仅可以修改Smarty模板的源文件,而且可以通过自定义函数向Smarty中添加功能.
5.模板中可以使用if/elseif/else/endif语句
PHP如何实现页面跳转(拥有三种方法)
一、使用header()函数进行跳转
header()
普通跳转
header('location:http://www.baidu.com');
定时跳转
header('Refresh:3,Url=http://www.php.cn/') 表示3秒后跳转
二、使用javascript代码进行跳转
例:
$url = "http://www.baidu.com" ;
echo "<script> window.location.href ='$url'</script>";
三、使用meta标签进行跳转
Meta标签是HTML中负责提供文档元信息的标签,在PHP程序中使用该标签,也可以实现页面跳转。若定义http-equiv为refresh,则打开该页面时将根据content规定的值在一定时间内跳转到相应页面。
若设置content="秒数;url=网址",则定义了经过多长时间后页面跳转到指定的网址。例如,使用meta标签实现疫苗后页面自动跳转到冰之爱。
例:
<?php
$url=http://www.baidu.com";
?>
<html>
<head>
<meta http-equiv = "refresh" content ="3; url=<?php echo $url; ?>">
</head>
<body>
页面只停留三秒……
</body>
</html>