- 三种测量变量的函数 is_set() empty() is_NULL()
is_set()检测该变量是否存在,且值是否为NULL,如果变量值为NULL 或者变量声明后没赋值返回false 其他情况返回true
empty()变量值为布尔值的TRUE,变量值为NULL byte(' ')返回false,其他情况返回true
is_null 变量值为NULL, 或者变量声明但没赋值时是ture,其余情况为false
- 全局变量问题
在函数体内访问外部变量时可以用$GLOBALS['变量名'] 或global 变量名,所谓全局,范畴不是指整个网站,而是当前页面,包括include() require()的全部文件
$GLOBALS[]指的全局变量本身; global 变量名是外部变量的同名引用或指针
<?php $myfavorite = '徐晓冬'; function whoismyfavorite() { global $myfavorite; $myfavorite = '陈培昌'; }
whoismyfavorite()
echo "喜欢$myfavorite"; ?>
结果
<?php
$myfavorite = '徐晓冬';
function whoismyfavorite()
{
$GLOBALS['myfavorite'] = '陈培昌';
}
whoismyfavorite();
echo "喜欢$myfavorite";
?>
结果:
结论:栈中的变量$myfavorite指向了堆中的数据"徐晓冬"(我们姑且把这个指针命名为00xx1),global $myfavorite新增了一个指针(我们姑且把这个指针命名为00xx2)也指向了堆中同一片区域中的数据"徐晓冬",当所指的数据改为"陈培昌"时,00xx2所指的数据,顺理成章的也改成了'陈培昌'
而针对$GLOBALS['myfavorite']的操作,是直接对堆中数据的更改,同样下面的代码也能说明这一问题
<?php
$myfavorite = '徐晓冬';
function whoismyfavorite2()
{
global $myfavorite;
unset($myfavorite);
}
whoismyfavorite2();
echo "喜欢$myfavorite"."<br/>";
?>
结果:
这一操作只是删除了一个指向数据"徐晓冬"的指针链接00xx2,而并不影响数据本身,也不影响数据连接00xx1
<?php
$myfavorite = '徐晓冬';
function whoismyfavorite()
{
unset($GLOBALS['myfavorite']);
}
whoismyfavorite();
echo "喜欢$myfavorite"."<br/>";
?>
这一操作直接删除了堆中的数据"徐晓冬"
- 静态变量的使用
//所谓静态变量就是,希望在函数体中每次调用时都能沿用上一次调用时保存的结果 <?php function staticeffects() { static $hisnum=0; ++$hisnum; echo "昌仔做了$hisnum"."个仰卧起坐"."<br/>"; } staticeffects(); staticeffects(); staticeffects(); staticeffects(); staticeffects(); staticeffects(); staticeffects(); staticeffects(); ?>
结果:
- 一种对多维数组排序的办法
<?php $myarray=array( array('陈培昌',21), array('程劲',19), array('徐晓冬',39), array('厉智',30), ); function arrange($a,$b) { if ($a[1]<$b[1]) { return -1; } elseif ($a[1]>$b[1]) { return 1; } else { return 0; } } usort($myarray,'arrange'); foreach ($myarray as $wa) { echo "$wa[0]:$wa[1]<br/>"; } ?>
结果: