函数
函数
变量的作用域
变量的作用域也称变量的范围,变量的范围即它定义的上下文背景(也是它的生效范围)。大部分php变量只有一个单独的范围。这个单独的范围跨度同样包含了include和require引入的文件。
$outer = 'str'; // 全局变量
function myfunction(){
echo $outer; // 局部变量
}
myfunction();
全局变量是不能拿到函数体内部使用的,两个$outer并不是一个,所以写程序应该避免这种同名混淆
如果内部想访问使用外部的那个全局变量,但是极力不推荐,如下面两种方式;
$outer = 'str'; // 全局变量
function myfunction(){
global $outer;
echo $outer; // 局部变量
}
myfunction();
$outer = 'str'; // 全局变量
function myfunction(){
echo $GLOBALS['outer']; // 局部变量
}
静态变量
static关键词
1.仅初始化一次
2.初始化时需要赋值;
3.每次执行函数该值会保留
4.static 修饰的变量是局部的,仅在函数内部有效
4.可以记录函数的调用次数,从而可以在某些条件下终止递归
function myFunction() {
static $a = 1;
echo $a++;
}
myFunction(); // 1
myFunction(); // 2
myFunction(); // 3
示例:
$count = 5;
function get_count()
{
static $count;
return $count++;
}
echo $count; // 5
++$count;
echo get_count(); // null
echo get_count(); // 1
结果51
1.函数内部和外部的count变量不是同一个
2.第一次调用函数时,默认没有赋值的count变量是null,后++,先返回后计算,所以仍然为null
3.第三次时候,返回上次计算过后的null ++ 结果返回(注意:null++的值是1,而null--的值还是null);
函数的参数及参数的引用传递
默认情况下,函数参数通过值传递
如果希望允许函数修改它的值,必须通过引用传递参数
<?php
$count = 5;
get_count($count);
function get_count(&$var)
{
$var = 1;
}
echo $count;
结果为1
避免使用如下方式:
<?php
$count = 5;
get_count(&$count);
function get_count($var)
{
$var = 1;
}
echo $count;
中会得到一条警告说“Call-time pass-by-reference”已经过时了。详情官方文档
函数的返回值及引用返回
函数的返回值:
值通过使用可选的返回语句(return)返回
可以返回包括数组和对象任意类型
返回语句会终止函数执行,将控制权交回函数调用处
从函数返回一个引用,必须在函数声明和指派返回值给一个变量时都使用引用运算符&
如下示例:
<?php
function &myFunc(){
static $b = 10;
return $b;
}
$a = myFunc();
$a = &myFunc();
$a = 100;
echo myFunc();
外部文件的引入
include/require语句包含并运行指定文件
如果给出路径名按照路径来找,否则从include_path中查找
如果include_path中也没有,则从调用脚本文件所在的目录和当前工作目录下寻找
当一个文件被包含时,其中所包含的代码继承了include所在行的变量范围
区别
加载过程中未找到文件则include结构会发出一条警告,这一点和require不同,后者会发出一个致命错误
require 在出错时产生E_COMPILE_ERROR级别的错误。换句话说将导致脚本中止而include只产生警告(E_WARNING),脚本会继续运行
require(include)/require_once(include_once)唯一区别是PHP会检查该文件是否已经被包含,如果是则不会再次包含。
总结:
<?php
$var1 = 3;
function myfuntion()
{
global $var1;
$var1 += 2; // 7
}
myfuntion();
echo $var1;
die;
$var1 = 5;
$var2 = 10;
function foo(&$my_var)
{
global $var1;//5
$var1 += 2; // 7
$var2 = 4; //4
$my_var += 3; //8
return $var2; //4
}
$my_var = 5;
echo foo($my_var). "\n"; //4
echo $my_var. "\n"; //8
echo $var1; //7
echo $var2; //10
$bar = 'foo';
$my_var = 10;
echo $bar($my_var). "\n"; //4
die;
function &myFunc(){
static $b = 10;
return $b;
}
$a = myFunc();
$a = &myFunc();
$a = 100;
echo myFunc();
特别注意上面函数内部global的问题,运行函数,同时会改变外部变量的值,得出7。
Last updated
Was this helpful?