您当前的位置: 首页 > 学无止境 > 心得笔记 网站首页心得笔记
2-6 自定义函数及内部函数考察点(上)
发布时间:2020-10-02 18:38:29编辑:雪饮阅读()
Static与++
有如下程序:
<?php
function myDump($val){
echo "<pre>";
print_r($val);
echo "</pre>";
}
$count=5;
function get_count(){
static $count;
return $count++;
}
myDump($count);
++$count;
var_dump(get_count());
myDump(get_count());
大多人会错误的认为输出结果是:5,6,7
其实运行结果如:
5
D:\phpstudy_pro\blog\public\demo5.php:14: NULL
1
第一个输出就没有什么可讲的了,但在第二次输出时是在get_count方法内部static先定义了一个局部变量,大家往往错误的认为这里会继承全局变量$count的值,其实这里static变量没有继承,所以这里的值是null,然而该方法return之后才++,所以实际return的就算null,而return之后又++,由于是static所以支持return之后++,所以第三次输出的时候值已经是1了。
注意:
注意:Php中方法内部的变量只能是该方法内部局部变量不可能读取该脚本的全局(用户自定义)变量,除非类似引用传值声明。
引用传值
上面示例中的注意项中的内容我们也可以用如下示例来证实:
<?php
function myDump($val){
echo "<pre>";
print_r($val);
echo "</pre>";
}
$a=1;
function myFun($a){
$a=2;
}
myFun($a);
echo $a;
那么运行结果当然是:
1
这里是不可能修改全局变量的,但我上面也说了除非引用传值,那么如:
<?php
function myDump($val){
echo "<pre>";
print_r($val);
echo "</pre>";
}
$a=1;
function myFun(&$a){
$a=2;
}
myFun($a);
echo $a;
那么运行结果就是:
2
这里引用传值其实就是把全局变量与局部变量共享了地址,所以才会又该效果。
关键字词:static,++,引用传值
上一篇:2-4 运算符考察点