← 回到文章

PHP手册拾遗四:变量函数

PHP手册拾遗:变量函数 1、isset()函数 若使用 isset() 测试一个被设置成 NULL 的变量,将返回 FALSE。 对于一个数组的元素,如果该元素的值为NULL,使用isset()函数将返回FALSE,此时需要使用array_key_exists函数。如下所示代码:
$array = array('t1' => NULL);
if (isset($array['t1'])) {                                                               
    echo 'Yes';
}else{
    echo 'No';
}
echo '
'; if (array_key_exists('t1', $array)) { echo 'Yes'; }else{ echo 'No'; }
2、empty()函数 这是一个语言结构而非函数 empty() 只检测变量,检测任何非变量的东西都将导致解析错误。换句话说,后边的语句将不会起作用: empty(addslashes($name))。 如下示例:
$str = "phppan";
if (empty(1));  //Parse error: syntax error, unexpected T_LNUMBER
if (empty(addslashes($str)));   //  Fatal error: Can't use function return value in write context
3、floatval()函数 float floatval ( mixed var ) var 可以是任何标量类型。你不能将 floatval() 用于数组或对象。 4、import_request_variables函数 将 GET/POST/Cookie 变量导入到全局作用域中。如果你禁止了 register_globals,但又想用到一些全局变量,那么此函数就很有用。 很少用到此函数,一般都是直接使用$_GET/$_POST/$_COOKIE 如果要将其它变量导入到全局变量中,可以考虑使用extract()。 5、serialize()与unserialize() serialize会存储数组/对象中的引用。因此可以通过序列化和反序列化实现深拷贝。 当序列化对象时,PHP 将试图在序列动作之前调用该对象的成员函数 __sleep()。这样就允许对象在被序列化之前做任何清除操作。类似的,当使用 unserialize() 恢复对象时, 将调用 __wakeup() 成员函数。 6、unset -- 释放给定的变量 如果在函数中 unset() 一个全局变量,则只是局部变量被销毁,而在调用环境中的变量将保持调用 unset() 之前一样的值。 如下所示代码:
$a = 10;
function unset_global_var() {
    global $a;
    unset($a);
    echo $a, '
'; } unset_global_var(); echo $a, '
'; die();
如果在函数中 unset() 一个通过引用传递的变量,则只是局部变量被销毁,而在调用环境中的变量将保持调用 unset() 之前一样的值。 如果在函数中 unset() 一个静态变量,则 unset() 将销毁此变量及其所有的引用。 新版本的手册中的示例很能说明上面的这个问题:
function foo() {
    static $bar;
    $bar++;
    echo "Before unset: $bar, ";
    unset($bar);
    $bar = 23;
    echo "after unset: $bar
"; } foo(); foo(); foo();
输出: Before unset: 1, after unset: 23 Before unset: 2, after unset: 23 Before unset: 3, after unset: 23 如果在函数中 unset() 一个全局变量,可使用 $GLOBALS 数组来实现:
最后更新于 2010-10-25 17:38:56