3.3 有关变量或常量状态的函数
PHP数据在内存中要么以变量的方式存储,要么以常量的方式存储,PHP提供了用于判断和修改变量或常量状态的函数。
3.3.1 数据类型查看函数
PHP为变量或常量提供了查看数据类型的函数,其中包括gettype()和var_dump()函数。
1.gettype()函数
语法格式:string gettype ( mixed var )
函数功能:gettype()函数需要变量名(带$符号)或常量名作为参数,该函数返回变量或常量的数据类型,这些数据类型包括:integer、double、string、array、object、unknown type(未知数据类型)等。
2.var_dump()函数
语法格式:void var_dump (mixed var )
函数功能:var_dump()函数需要传递一个变量名(带$符号)或常量名作为参数,该函数可以得到变量或常量的数据类型以及对应的值,并将这些信息输出。
函数说明:void表示函数var_dump()函数没有返回值。调试程序时,经常使用var_dump()函数查看变量或常量的值、数据类型等信息。例如,程序dataType.php如下。
<?php
define("USERNAME","root");
$score = 67.0;
$age = 20;
$words = array(2,4,6,8,10);
echo gettype(USERNAME); //输出:string
echo "<br/>";
echo gettype($score); //输出:double
echo "<br/>";
echo gettype($age); //输出:integer
echo "<br/>";
echo gettype($words); //输出:array
echo "<br/>";
var_dump(USERNAME); //输出:string(4) "root"
echo "<br/>";
var_dump($score); //输出:float(67)
echo "<br/>";
var_dump($age); //输出:int(20)
echo "<br/>";
var_dump($words);/*输出:array(5) { [0]=> int(2) [1]=> int(4) [2]=> int(6) [3]=> int(8) [4]=>int(10) } */
?>
在调用函数时,函数名大小写不敏感,例如程序 dataType.php 中的 gettype()函数名也可以写成getType()。
3.3.2 检查常量或变量是否定义函数
1.defined()函数
语法格式:bool defined (string name)
函数功能:检查常量是否经过define()函数定义。该函数参数为常量名(注意常量名必须带双引号或单引号),如果常量经过define()函数定义,该函数返回布尔值TRUE,否则返回FALSE。例如,程序defined.php如下,该程序的运行结果如图3-7所示。从运行结果可以看出,常量(如STUDENT)若没有经define()函数定义,常量的值为常量名字符串。
<?php
define("USERNAME","root");
if(defined("USERNAME")){
echo "USERNAME常量经过了define()函数的定义";
}
echo "<br/>";
echo STUDENT;
?>
2.isset()函数
语法格式:bool isset (mixed var)
函数功能:检查变量var是否定义。该函数参数为变量名(带$号),如果变量已经定义,该函数返回布尔值TRUE,否则返回FALSE。例如,程序isset.php如下,该程序的运行结果如图3-8所示。
<?php
$age = 20;
if(isset($age)){
echo '变量$age已经定义';
}
?>
isset()函数只能用于判断变量是否定义,传递其他参数都将造成程序解析错误,程序解析错误一旦发生,程序立即终止脚本的执行。defined()函数只能用于判断常量是否定义,传递其他参数defined()函数的返回结果永远为FALSE。
3.3.3 取消变量定义unset()函数
unset()函数语法格式:void unset ( mixed var )
函数功能:取消变量 var 的定义。该函数的参数为变量名(带$符号),函数没有返回值。例如程序unset.php如下,该程序的运行结果如图3-9所示,程序运行过程中的内存分配图如图3-10所示。
<?php
$age1 = 18;
$age2 = &$age1;
$age2 = 20;
echo $age1;
echo "<br/>";
unset($age1); //该语句取消变量$age1的定义
echo $age1; //由于$age1没有定义,该语句将输出notice信息
echo "<br/>";
echo $age2;
?>
对图 3-10 的部分说明:当程序执行到语句“unset($age1);”时,称为过程 4。使用 unset()函数,只是断开了变量名和变量的值之间的联系,没有立即销毁变量,变量由PHP垃圾回收机制在“适当”时刻进行回收。
常量一旦被定义便不能取消其定义,因此不能使用unset()函数取消常量的定义,否则将造成程序解析错误。
3.3.4 检查变量是否为“空”
PHP提供了检查变量是否为“空”的两个函数:empty()函数和is_null()函数。
1.empty()函数
语法格式:boolean empty ( mixed var )
函数功能:用于检查变量var是否为“空”,该函数参数var为变量名(带$号)。如果变量var为空,则empty()函数返回TRUE,否则返回FALSE。例如,程序empty.php如下。
使用empty()函数时,变量为“空”的意义为:若变量var的值为""、0、"0"、0.0、NULL、FALSE或array(),都将视为空。empty()函数只用于检测变量是否为“空”,传递其他参数都将造成程序解析错误。
<?php
class Student{
}
$a = 0;
$b = "0";
$c = "";
$d = NULL;
$e = FALSE;
$f = array();
$g = new Student();
$h = 0.0;
var_dump(empty($a)); //输出bool(true)
echo "<br/>";
var_dump(empty($b)); //输出bool(true)
echo "<br/>";
var_dump(empty($c)); //输出bool(true)
echo "<br/>";
var_dump(empty($d)); //输出bool(true)
echo "<br/>";
var_dump(empty($e)); //输出bool(true)
echo "<br/>";
var_dump(empty($f)); //输出bool(true)
echo "<br/>";
var_dump(empty($g)); //输出bool(false)
echo "<br/>";
var_dump(empty($h)); //输出bool(true)
?>
2.is_null()函数
语法格式:boolean is_ null( mixed var )
函数功能:检查变量var是否为NULL,如果值为NULL则返回TRUE,否则返回FALSE。
函数说明:is_null()函数用于判断变量是否为NULL时,可以看做isset()函数的反函数。下面的3种情况变量的值为NULL。
(1)变量未经定义。
(2)变量的值赋值为NULL。
(3)变量经unset()函数处理后。
例如,程序is_null.php如下,该程序的运行结果如图3-11所示。
<?php
var_dump(is_null($a));
echo "<br/>";
$b = NULL;
var_dump(is_null($b));
echo "<br/>";
$c = FALSE;
var_dump(is_null($c));
echo "<br/>";
unset($c);
var_dump(is_null($c));
?>
3.3.5 数据类型检查函数
PHP为变量或常量提供了检查数据类型的函数(见表3-1),这些函数的共同特征是:需要向这些函数传递一个变量名(带$符号)或常量名(注意常量名必须带双引号或单引号)作为参数,如果检查符合要求,函数返回TRUE,否则返回FALSE。例如,程序typeChecked.php如下。
<?php
class Student{
}
$bool = TRUE;
$string = "你好";
$int = 100;
$float = 100.00;
$numeric = "01234.56789";
$array = array(1,3,5);
$object = new Student();
$resource = mysql_connect("localhost","root","");
var_dump(is_bool($bool)); //输出bool(true)
echo "<br/>";
var_dump(is_string($string)); //输出bool(true)
echo "<br/>";
var_dump(is_int($int)); //输出bool(true)
echo "<br/>";
var_dump(is_float($float)); //输出bool(true)
echo "<br/>";
var_dump(is_numeric($numeric)); //输出bool(true)
echo "<br/>";
var_dump(is_array($array)); //输出bool(true)
echo "<br/>";
var_dump(is_object($object)); //输出bool(true)
echo "<br/>";
var_dump(is_resource($resource)); //输出bool(true)
?>
共有条评论 网友评论