php变量相关函数

php变量相关函数

一、变量检测函数:

       is_array 检测变量是否是数组  bool is_array(mixed $var)

       is_bool 检测变量是否是布尔值 bool is_bool(mixed $val);这个只有变量值为true或false时才会返回真

       is_double 检测变量是否是浮点类型 bool is_double(mixed $val),这个函数是is_float的别名。

       is_float 检测变量是否是浮点类型 bool is_float(mixed $val)

       is_real 该函数是is_float()的别名

       is_int 检测变量是否是整数  bool is_int(mixed $val)

       is_integer检测变量是否为整数,该函数是is_int()的别名

       is_long该函数是is_int()的别名

       is_null 检测变量是否为null bool is_null(mixed $val),该函数只有变量值为null时才返回真。

       is_numeric 检测变量是否为数字或数字字符串 bool is_numeric(mixed $val)

       is_object 检测变量是否为一个对象 bool is_object(mixed $val)

       is_resource 检测变量是否为一个资源类型 bool is_resource(mixed $val)

       is_scalar 检测变量是否为一个标量类型 bool is_scalar(mixed $val)

       is_string 检测变量是否为字符串类型 bool is_string(mixed $val)

      

二、变量类型相关函数

       gettype 获取变量类型  string gettype(mixed $var) 返回PHP变量类型。该函数可能返回值为:boolean,integer,double,string,array,object,resource,NULL,unknown type。

       settype 强制转换变量类型 bool settype(mixed &$var,string $type),该函数可接受类型为boolean,integer,float,string,array,object,null,设置成功是返回true,失败返回false。

       boolval 获取变量的布尔值,该函数并不会直接影响变量本身的数据类型,boolean boolval(mixed $var);只要是非零非空字符串、数组或对象均返回true,资源类型永远返回true。

       floatval获取变量的浮点值 float floarval(mixed $var);该函数接受任何标量类型。

       doubleval floatval()函数的别名。

       intval 获取变量的整数值。int intval(mixed $var [, int $base=10]);通过指定的进制base转换(默认是十进制),返回变量var的integer数值。intval()不能用于object,否者会产生E_BOTICE错误并返回1.

       strval 获取变量的值 string strval(miexd $var) var可以是任何标量类型。不能将strval()用于数组或对象。

       php中类型转换可以使用(type) $var的形式实现强制类型转换,type可接受值为boolean,integer,float,string,array,object,unset,其中unset作为null类型的强制转换方法,例如:(integer) $var会吧$var变量类型转换为integer类型,该方式并不会直接改变原始变量类型,而是将变量值转换类型后返回。

       注意:isset()、empty()、unset()函数都属于语言构造器而不是一个真正的函数,不能被可变函数调用,其empty()函数只检测变量,检测任何非变量的东西都将导致解析错误。

代码实例:

 

//通过gettype()函数可以获取变量类型,该函数返回可能值为:boolean,integer,double,string,array,object,resource,NULL,unknown type
$var = 123;
echo gettype($var);//输出integer
echo '<br />';


//通过settype()函数可以强制设置变量类型,该函数可能接受的类型字符串为:boolean,integer,float,double,string,array,object,null
var_dump(settype($var,'float'));//输出为bool(true)
echo '<br />';
echo gettype($var);//输出double,自从php4.2起所有浮点类型均返回double
echo '<br />';

//通过floatval(),doubleval(),booleval(),intval(),strval()系列函数获取对应类型的变量值
//这类函数并不会改变原始变量的类型,只会把转换类型后的变量值返回
$string = strval($var);
echo gettype($string);//输出string
echo '<br />';
echo gettype($var);//输出double
echo '<br />';

//总结:floatval()等函数不会影响原始变量类型,而是将变量值转换类型后返回,settype()函数将直接改变原始变量类型
//分析:settype()为什么会直接改变原始变量类型,看函数原型 bool settype(mixed &$var);settype对原始变量做了传址引用

//intval()函数可以设置第二个参数来决定要转换变量的进制,该函数永远返回10进制整数
echo intval($string,8);//把字符串作为8进制,转换为10进制83
echo '<br />';
echo intval($var,8);//整数或浮点数类型不受第二个参数影响


 

三、isset(),empty(),unset()函数详解

       isset 用于检测变量是否设置,并且不是null。bool isset(mixed $var [, mixed $…]),从函数原型中了解到该函数可以同时检测多个变量,只有所有变量都被设置并且不为null是返回true。

       empty 检测一个变量是否为空,bool empty(mixed $var),当变量是非空非零值时返回false,也就是说""、0、"0"、NULL、FALSE、array()、var $var以及没有任何属性的对象都被认为是空的,资源类型永远返回false。

       unset 用于销毁指定变量,void unset(mixed $var [,mixed $…])从函数原型可以看出该函数可以同时销毁多个变量。

实例代码:

//isset()函数用于检测一个变量是否被设置
//声明一个用于测试的类
class test{
	public $var;//这是一个被声明但是没有赋值的变量
}
//声明一个用于测试的类
class test1{
	public function __isset($var){
		return true;
	}
	public function __unset($var){
		$this->$var = '我本不存在,但是unset创造了我';
	}
}
class NullClass{}
//声明用于测试的变量
$a = null;
$b = 0;
$c = '';
$d = "0";
$e = 0.0;
$f = "0.0";

$array = array();
$test = new test();
$test1 = new test1();
$NullClass = new NullClass();//new一个空的字符串对象

var_dump(isset($a));//检测一个null值的变量返回false
var_dump(isset($b,$c,$array));//检测非null值并已经设置的变量返回true
var_dump(isset($test->var));//检测已经声明但未赋值的变量返回false
var_dump(isset($test1->var));//检测对象中不存在的属性,如果 __isset()方法已经定义则会调用这个重载方法
unset($b);
var_dump(isset($b));//检测一个被unset()函数销毁的变量是返回false

$d = "0";
echo '<br />';
//empty()函数判断一个变量值是否为空,当变量为非零非空时返回false
var_dump(empty($a));//检测一个值为null的变量返回true
var_dump(empty($b));//检测一个值为0的变量返回true
var_dump(empty($c));//检测一个值为空字符串的变量返回true
var_dump(empty($d));//检测一个值为字符串0的变量返回true
var_dump(empty($e));//检测一个值为浮点数0.0的变量返回true
var_dump(empty($f));//检测一个值为0.0的字符串变量返回false
var_dump(empty($NullClass));//检测一个空对象返回false(此处与php手册有出入,请其它版本的朋友测试一下)

//unset()函数销毁指定的变量
unset($b);//销毁$b变量,使用isset()函数检测变量将返回false
unset($test1->var);//销毁一个不存在的对象属性时,如果 __unset()方法已经定义则会调用这个重载方法
echo $test1->var;//输出“我本不存在,但是unset创造了我”,这是因为在__unset()方法方法中重新定义了该属性

//unset在函数中的行为依赖于想要销毁的变量类型而有所不同(在php手册中有详细解释)。
//如果在函数中 unset()一个全局变量,则只是局部变量被销毁,而在调用环境中的变量将保持调用 unset() 之前一样的值。 
function foo(){
	global $foo;
	unset($foo);//这里只会销毁函数中的变量
}
$foo = 'bar';
foo();
echo $foo;//输出bar

//如果您想在函数中 unset()一个全局变量,可使用 $GLOBALS数组来实现:
function foo1(){
	unset($GLOBALS['bar']);
}

$bar = "something";
foo1();
echo $bar;//会产生一个Notice级别的错误

//如果在函数中 unset()一个通过引用传递的变量,则只是局部变量被销毁,而在调用环境中的变量将保持调用 unset() 之前一样的值。
function foo2(&$bar) {
	unset($bar);
	$bar = "blah";
}

$bar = 'something';
foo2($bar);
echo "$bar\n";//输出something

//如果在函数中 unset()一个静态变量,那么在函数内部此静态变量将被销毁。但是,当再次调用此函数时,此静态变量将被复原为上次被销毁之前的值。
function foo3(){
	static $bar;
	$bar++;
	echo "Before unset: $bar, ";
	unset($bar);
	$bar = 23;
	echo "after unset: $bar\n";
}
foo3();// Before unset: 1, after unset: 23
foo3();//Before unset: 2, after unset: 23
foo3();//Before unset: 3, after unset: 23

//使用(unset) 类型强制转换
//(unset) 类型强制转换常常和函数 unset() 引起困惑。 为了完整性,(unset) 是作为一个 NULL 类型的强制转换。它不会改变变量的类型。 
$var  = 123;
var_dump((unset) $var);//输出null,(unset) 是作为一个 NULL 类型的强制转换
var_dump($var);//输出123,(unset)并不会改变变量类型


//在php手册中有两个有趣的例子,下面是isset()函数在php5.3和php5.4中的不同
$expected_array_got_string = 'somestring';
var_dump(isset($expected_array_got_string['some_key']));
var_dump(isset($expected_array_got_string[0]));
var_dump(isset($expected_array_got_string['0']));
var_dump(isset($expected_array_got_string[0.5]));
var_dump(isset($expected_array_got_string['0.5']));
var_dump(isset($expected_array_got_string['0 Mostel']));
//以上例子在php5.3中的输出为
//bool(true)
// bool(true)
// bool(true)
// bool(true)
// bool(true)
// bool(true)

//以上例程在PHP 5.4中的输出:
// bool(false)
// bool(true)
// bool(true)
// bool(true)
// bool(false)
// bool(false)

//以下例子是empty()函数在php5.3和php5.4的差异之处

$expected_array_got_string = 'somestring';
var_dump(empty($expected_array_got_string['some_key']));
var_dump(empty($expected_array_got_string[0]));
var_dump(empty($expected_array_got_string['0']));
var_dump(empty($expected_array_got_string[0.5]));
var_dump(empty($expected_array_got_string['0.5']));
var_dump(empty($expected_array_got_string['0 Mostel']));

// 以上例程在PHP 5.3中的输出:
// bool(false)
// bool(false)
// bool(false)
// bool(false)
// bool(false)
// bool(false)

// 以上例程在PHP 5.4中的输出:
// bool(true)
// bool(false)
// bool(false)
// bool(false)
// bool(true)
// bool(true)


 

       对于示例中最后两个例子,相信迷惑了大多数童鞋,我粗略的讲一下,在php5.3中对不存在的下标字符串做integer类型转换,所以$expected_array_got_string['some_key']被转换成$expected_array_got_string[0],但是在php5.4中只对字符串0做integer类型转换。还有一个很有趣的事情,在数组方面的表现又出乎意料。如$arr = array('name'=>'zhangshan');在php5.3中输出$arr['name']['xxx']['yyy']会导致一个Warning级别的错误,但是在php5.4是会输出"z",这是为什么呢?原来在php5.4中对它做offset取值, 都会把键值转换成interge, 所以,'xxx','yyy'都会转换为0,大家有空可以多研究研究这块,其实也很有趣。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值