empty是判断变量值是非空或非零的值。对应空定义包括:“”(空字符串)、0、“0”、NULL、FALSE、array()和$var(只声明但未赋值)。也就是说当变量值为上述这些,empty返回TRUE,其他的都返回FALSE。
isset是检测变量是否设置,并且不是 NULL。变量设置可以从几个方面来说。1:最简单的就是变量是否先声明和赋值;2:array中是否存在对应的index或key;3:object中是否存在对应的属性。
从上面的两个function定义可以看到,在某些情况下,两者可以公用,但其区别还是很大的。另外它们都只能检测变量,检测任何非变量的东西都将导致解析错误。例如直接检查另一个function的返回值(empty(otherFunction())),你将看到“Fatal error: Can’t use function return value in write context in”这样的错误。
另外isset可以一次检查多个变量,例如:isset($var1, $var2, $var3),当这三个值分别的isset都为TRUE结果为TRUE,否则结果为FALSE。
测试代码:
代码如下 | 复制代码 |
$sep = "<br />"; echo 'test undeclared var empty : '; $var; $var = NULL; $var1 = ''; $var2 = '0'; $var3 = 0; $var4 = FALSE; $var5 = array(); echo $sep . 'test '' empty : '; |
输出的结果为:
代码如下 | 复制代码 |
test undeclared var empty : bool(true) |
比如检测 $id 变量,当 $id=0 时,用empty() 和 isset() 来检测变量 $id 是否已经配置,两都将返回不同的值—— empty() 认为没有配置,isset() 能够取得 $id 的值:
代码如下 | 复制代码 |
$id=0; |
这意味着,我们在使用变量处理函数时,当该变量可能出现0的值,使用 empty() 要小心,这个时候用 isset 取代它更明智一些。
当一个php页面的 URL 尾部参数出现 id=0 时(比如:test.php?id=0),试比较:
代码如下 | 复制代码 |
if(empty($id)) $id=1; - 若 id=0 ,id 也会为1 |
可分开运行以下代码检测上述推断:
代码如下 | 复制代码 |
if(empty($id)) $id=1; if(!isset($id)) $id=1; |
Ctype函数是PHP内置的字符串体测函数。主要有以下几种
ctype_alnum -- Check for alphanumeric character(s)
检测是否是只包含[A-Za-z0-9]
ctype_alpha -- Check for alphabetic character(s)
检测是否是只包含[A-Za-z]
ctype_cntrl -- Check for control character(s)
检查是否是只包含类是“nrt”之类的字 符控制字符
ctype_digit -- Check for numeric character(s)
检查时候是只包含数字字符的字符串(0-9)
ctype_graph -- Check for any printable character(s) except space
检查是否是只包含有可以打印出来的字符(除了空格)的字符串
ctype_lower -- Check for lowercase character(s)
检查是否所有的字符都是英文字母,并且都是小写的
ctype_print -- Check for printable character(s)
检查是否是只包含有可以打印出来的字符的字符串
ctype_punct -- Check for any printable character which is not whitespace or an alphanumeric character
检查是否是只包含非数字/字符/空格的可打印出来的字符
ctype_space -- Check for whitespace character(s)
检查是否是只包含类是“ ”之类的字符和空格
ctype_upper -- Check for uppercase character(s)
检查是否所有的字符都是英文字母,并且都是大写的
ctype_xdigit -- Check for character(s) representing a hexadecimal digit
检查是否是16进制的字符串,只能包括 “0123456789abcdef”
如果使用他们
废话不多说直接上代码:
代码如下 | 复制代码 |
<?php |
注意:如果传第一个空字符串,在php5.1之后是返回 false,但是早期的版本是返回true.
只要确保传递给函数的参数是一个字符串就不会有问题。
代码如下 | 复制代码 |
<?php |
结论
在使用PHP的过程中,同样的操作可能有不同的方法,选择一个合适的方法显然很重要。在PHP里判断字符串类型的函数有两类,ctype_*和 is_* 他们在实际的应用中 is_*这一系列的函数用的更多一些。当然除了这些办法我们还可以选择使用正则表达式来做判断,而且更强大,但是使用PHP内置的函数可以更好地减少出错率。
php 中遍历一个array时可以使用for或foreach,foreach的语法为:foreach ($arr as $k => $v)。遍历数组,把index赋给$k,数组的值赋给$v,那么此处的赋值是传值还是传引用呢。php中foreach()的用法
foreach()有两种用法:
1:
代码如下 | 复制代码 |
foreach(array_name as $value) { statement; } |
这里的array_name是你要遍历的数组名,每次循环中,array_name数组的当前元素的值被赋给$value,并且数组内部的下标向下移一步,也就是下次循环回得到下一个元素。
2:
代码如下 | 复制代码 |
foreach(array_name as $key => $value) { statement; } |
这里跟第一种方法的区别就是多了个$key,也就是除了把当前元素的值赋给$value外,当前元素的键值也会在每次循环中被赋给变量$key。键值可以是下标值,也可以是字符串。比如book[0]=1中的“0”,book[id]="001"中的“id”.
看下面的例子:
代码如下 | 复制代码 |
$arr = array( foreach ($arr as $obj) { print_r($arr); //输出的结果 |
观察可以发现在foreach循环中对$arr操作并没有影响到$arr的元素,所以这里的赋值是传值而不是传引用。那如果需要修改$arr中元素的值该怎么办呢?可以在变量前面加一个”&”符号,例如:
代码如下 | 复制代码 |
foreach ($arr as &$obj) { |
再看另外一个例子,array里面存放的是object,
代码如下 | 复制代码 |
$arr = array( foreach ($arr as $obj) { print_r($arr); //输出的结果 Array [1] => stdClass Object ) |
此时可以看到原始数组中的object对象已经修改了,所以这里的赋值又是传引用而不是传值
综合上述,得出的结论:如果数组里面存放的是普通类型的元素就是采用传值的方式,存放对象类型元素采用的方式为传地址。
在php中header函数是一个很常用的函数了,它可以跳转也可以发送各种状态代码,如404,301或者页面编码,下面我来总结一下header函数常用方法。代码如下 | 复制代码 |
// set 404 header: // set Moved Permanently header ('good for redrictions') // redirect to a new location: // redrict with delay: // you could also use the HTML syntax:// <meta http-equiv="refresh" content="10;http://www.111cn.net/ /> // override X-Powered-By: PHP: // content language ('en = English') // last modified ('good for caching') // header for telling the browser that the content // set content length ('good for caching'): // Headers for an download: // load the file to send:readfile('example.zip');
// plain text file // JPG picture // ZIP file // PDF file // Audio MPEG ('MP3,…') file // Flash animation// show sign in box
// set content type: php页面为utf编码 php页面为gbk编码 php页面为big5编码
Header( "HTTP/1.1 301 Moved Permanently" ) ; |
1.首先来介绍一下fopen()函数
下面我们给出了一个直接打开本地文件的代码demo,必要的地方我们都已经加上了注释:
代码如下 | 复制代码 |
//直接打开一个本地文件的实例代码 |
2.使用file_get_contents() 函数将整个文件在一个字符串中输出:
假若我们的xmlas.txt文本文件中有这样一句话:现在的电影越来越没激情,想要全部高潮请看日本爱情
动作片!
那么我们file_get_contents() 函数的实例代码便如下:
代码如下 | 复制代码 |
<?php |
3.如何读取本地的一个文件夹而不是一个单独文件:
请看下面的实例代码,在实例中我们将读取一个名为xmlas的文件夹:
代码如下 | 复制代码 |
<?php $dirdemo = opendir('/xmlas'); while(($filedemo = readdir($dirdemo))!=false){ if ($filedemo!="." && $filedemo!="..") { $nsdemo = explode('.', $filedemo); echo $nsdemo[0]; } } closedir($dirdemo); ?> |
4.我们还可以利用fopen来写文件
代码如下 | 复制代码 |
/** |
这样我只要利用fopen配合fwrite就可以实现文件读写了。
注意:l打开文件
在打开文件文件之前,我们需要知道这个文件的路径,以及此文件是否存在。
用$_SERVER[“DOCUMENT_ROOT”]内置全局变量,来获得站点的相对路径。如下:
代码如下 | 复制代码 |
$root = $_SERVER[“DOCUMENT_ROOT”]; |
在用函数file_exists()来检测文件是否存在。如下:
代码如下 | 复制代码 |
If(!file_exists("$root/order.txt")){echo ‘文件不存在’;} |
这样可能更合理更实用哦。