例
代码如下 | 复制代码 |
|
删除最后一个元素
代码如下 | 复制代码 |
<?php |
1.不会随着函数的调用和退出而发生变化,不过,尽管该变量还继续存在,但不能使用它。倘若再次调用定义它的函数时,它又可继续使用,而且保存了前次被调用后留下的值
2.静态局部变量只会初始化一次
3.静态属性只能被初始化为一个字符值或一个常量,不能使用表达式。即使局部静态变量定义时没有赋初值,系统会自动赋初值0(对数值型变量)或空字符(对字符变量);静态变量的初始值为0。
4.当多次调用一个函数且要求在调用之间保留某些变量的值时,可考虑采用静态局部变量。虽然用全局变量也可以达到上述目的,但全局变量有时会造成意外的副作用,因此仍以采用局部静态变量为宜。
代码如下 | 复制代码 |
function test() { static $var = 5; //static $var = 1+1;就会报错 $var++; echo $var . ' '; } test(); //2 test(); //3 test(); //4 echo $var; //报错:Notice: Undefined variable: var |
关于静态全局变量
代码如下 | 复制代码 |
//全局变量本身就是静态存储方式,所有的全局变量都是静态变量 |
$a 将会在包含文件 b.inc 中生效。
代码如下 | 复制代码 |
<?php
|
输出3
代码如下 | 复制代码 |
<?php
|
在全局范围内访问变量的第二个办法,是用特殊的 PHP 自定义 $GLOBALS 数组
代码如下 | 复制代码 |
|
静态变量也提供了一种处理递归函数的方法。递归函数是一种调用自己的函数
代码如下 | 复制代码 |
|
总结
局部变量——用在函数内,作用域就是所在函数
全局变量——在函数外,作用域在整个php文件(包含了 include 和 require 引入的文件),但在函数中不能读到,除非重新申明为global
静态变量——用在函数内,被调用完后,内存不释放,保留最后值,多用来统计累加。
什么是头信息?
这里只作简单解释,详细的自己看http协议。
在 HTTP协议中,服务器端的回答(response)内容包括两部分:头信息(header) 和 体内容,这里的头信息不是HTML中的<head></head>部分,同样,体内容也不是<BODY>< /BODY>。头信息是用户看不见的,里面包含了很多项,包括:服务器信息、日期、内容的长度等。而体内容就是整个HTML,也就是你所能看见的全 部东西。
头信息有什么用呢?
头信息的作用很多,最主要的有下面几个:
1、跳转:当浏览器接受到头信息中的 Location: xxxx 后,就会自动跳转到 xxxx 指向的URL地址,这点有点类似用 js 写跳转。但是这个跳转只有浏览器知道,不管体内容里有没有东西,用户都看不到。
2、指定网页的内容: 同样一个XML文件,如果头信息中指定:Content-type: application/xml 的话,浏览器会将其按照XML文件格式解析。但是,如果头信息中是:Content-type: text/xml 的话,浏览器就会将其看作存文本解析。(浏览器不是按照扩展名解析文件的)
3、附件:不知道大家有没 有注意,有些时候在一些网站下载东西,点下载连接以后,结果浏览器将这个附件当成网页打开了,里面显示的都是乱码,这个问题也和头信息有关。有时候浏览器 根据Content-type 来判断是打开还是保存,这样有时就会判断错误(主要是网站设计者忘记写Content-type)。其实,还有一个可以来指定该内容为附件、需要保存,这 个就是:Content-Disposition: attachment; filename=”xxxxx”
在PHP中如何写?
1、跳转:
代码如下 | 复制代码 |
header(“Location: http://www.example.com/”); |
2、指定内容:
代码如下 | 复制代码 |
header(‘Content-type: application/pdf’); |
3、附件:
代码如下 | 复制代码 |
header(‘Content-type: application/pdf’); // 指定内容格式 header(‘Content-Disposition: attachment; filename=”downloaded.pdf”‘); // 指定内容为附件 readfile(‘original.pdf’); // 打开文件,并输出 |
最后要提醒大家注意一点,所有头信息都必须在体内容之前,如果一旦有任何输出了的话,header函数写的头信息就没用了。比如,在文件最开头 的<?php 处,如果前面有空格或者有空行,那header函数就没用了(其实可以通过设置:output_buffer来解决,anyway),为什么这样,可以看 看HTTP协议,很简单。
代码如下 | 复制代码 |
<?php //200 正常状态 header('HTTP/1.1 200 OK'); // 301 永久重定向,记得在后面要加重定向地址 Location:$url header('HTTP/1.1 301 Moved Permanently'); // 重定向,其实就是302 暂时重定向 header('Location: http://www.111cn.net/'); // 设置页面304 没有修改 header('HTTP/1.1 304 Not Modified'); // 显示登录框, header('HTTP/1.1 401 Unauthorized'); header('WWW-Authenticate: Basic realm="登录信息"'); echo '显示的信息!'; // 403 禁止访问 header('HTTP/1.1 403 Forbidden'); // 404 错误 header('HTTP/1.1 404 Not Found'); // 500 服务器错误 header('HTTP/1.1 500 Internal Server Error'); // 3秒后重定向指定地址(也就是刷新到新页面与 <meta http-equiv="refresh" content="10;http://www.111cn.net/ /> 相同) header('Refresh: 3; url=http://www.111cn.net/'); echo '10后跳转到http://www.111cn.net'; // 重写 X-Powered-By 值 header('X-Powered-By: PHP/5.3.0'); header('X-Powered-By: Brain/0.6b'); //设置上下文语言 header('Content-language: en'); // 设置页面最后修改时间(多用于防缓存) $time = time() - 60; //建议使用filetime函数来设置页面缓存时间 header('Last-Modified: '.gmdate('D, d M Y H:i:s', $time).' GMT'); // 设置内容长度 header('Content-Length: 39344'); // 设置头文件类型,可以用于流文件或者文件下载 header('Content-Type: application/octet-stream'); header('Content-Disposition: attachment; filename="example.zip"'); header('Content-Transfer-Encoding: binary'); readfile('example.zip');//读取文件到客户端 //禁用页面缓存 header('Cache-Control: no-cache, no-store, max-age=0, must-revalidate'); header('Expires: Mon, 26 Jul 1997 05:00:00 GMT'); header('Pragma: no-cache'); //设置页面头信息 header('Content-Type: text/html; charset=iso-8859-1'); header('Content-Type: text/html; charset=utf-8'); header('Content-Type: text/plain'); header('Content-Type: image/jpeg'); header('Content-Type: application/zip'); header('Content-Type: application/pdf'); header('Content-Type: audio/mpeg'); header('Content-Type: application/x-shockwave-flash'); //.... 至于Content-Type 的值 可以去查查 w3c 的文档库,那里很丰富 ?> |
例,文件下载
代码如下 | 复制代码 |
header("Content-Type: application/vnd.ms-excel; charset=UTF-8"); |
如我有两个文件a.php,b.php。
a.php文件中的语句是:
代码如下 | 复制代码 |
<?php |
现在,我需要在b.php文件显示文件a.php中的源代码,是源代码,如下:
代码如下 | 复制代码 |
<?php |
重点即在此htmlspecialchars()函数,htmlspecialchars() 函数把一些预定义的字符转换为 HTML 实体。
再看一实例fopen()函数
代码如下 | 复制代码 |
$file = fopen("a.php","r"); |
效果与上面也是一样的,当然如果只是要在a.php中显示b.php 我们直接使用inlucde()调用即可
代码如下 | 复制代码 |
inlucde('a.php'); |
即可
如果是想读取远程服务器的.php文件,那么返回的是html内容了,这个不要问为什么否则大家都不写程序了。
php中变量可以不定义的但是我们如果不对错误进行一些处理在使用未定义的变量时会提示Undefined variable错误了,下面我给大家举几个实例。PHP错误提示“Undefined variable”:变量未定义,如果你在php.ini设置中屏蔽了Notice这个等级的提示那么他就不会显示任何提示了,但是为了程序的严谨性考虑,我们尽量避免任何警告、错误等明显的程序缺陷。
例一:class.Chinese.php中以下代码就会出错“Undefined variable”:
代码如下 | 复制代码 |
for ( $i=0; $i<strlen($hexdata); $i+=2 ) |
正确的写法应该是:
代码如下 | 复制代码 |
$bindata=''; |
例二:以下代码也会出错“Undefined variable”:
代码如下 | 复制代码 |
$sl = "zh-CN"; |
正确的写法应该是:
代码如下 | 复制代码 |
$sl = "zh-CN"; |
本来php是不需要定义变量的,但是出现这种情况应该怎么办呢?
只要在C:WINDOWS找出php.ini的
在php.ini中的302行 error_reporting = E_ALL
修改成
error_reporting = E_ALL & ~E_NOTICE再重启apache2.2就行了
解决方法:修改php.ini
将: error_reporting = E_ALL
修改为:error_reporting = E_ALL & ~E_NOTICE
如果什么错误都不想让显示,直接修改:
display_errors = Off
如果你没有php.ini的修改权限,可在php头部加入
ini_set("error_reporting","E_ALL & ~E_NOTICE");