变量作用域与静态变量
函数的参数及函数的引用传递
函数的返回值及引用返回
外部文件的导入
系统内置函数
变量的作用域也成变量的范围,变量的范围即它定义的上下文背景(也是它生效范围)。大部分的php变量只有一个单独的范围。这个单独的范围跨度同样包含了include和require引入的文件
global关键字
$GLOBALS 及 其他超全局数组
$outer = 'str';//全局变量
function myfunc()
{
global $outer;//使用global可以拿到全局变量
echo $outer;//局部变量,没有global拿不到全局变量
}
$outer = 'str';
function myfunc()
{
global $outer;
$GLOBALS['outer'];
}
静态变量
静态变量仅在局部函数域中存在,但当程序执行离开此作用域时,其值并不会消失。
static关键字
1.仅初始化一次
2.初始化时需要赋值
3.每次执行函数该值会保留
4.static修饰的变量是局部的,仅在函数内部有效
5.可以记录函数的调用次数,从而可以在某些条件下终止递归
function myfunc()
{
static $a = 1;
echo $a++;
//myfunc()-->1
//myfunc()-->2
//myfunc()-->3
}
EX
$count = 5
function get_count()
{
static $count;//第一次未初始化为NULL
return $count++;//先return后++,第一次为NULL,第二次为第一次++的1
}
echo $count;//5
++$count;
echo get_count();//NULL
echo get_count();1
函数的参数
默认情况下,函数通过值传递
如果希望允许函数修改它的值,必须通过引用传递参数
$a = 1;
function myFunc(&$a)//引用传参可以修改参数的值
{
$a = 2;
}
myFunc($a);//只能传变量
echo $a;
函数的返回值
值通过使用可选的返回语句(return)返回
可以返回包括数组和对象的任意类型
返回语句会终止函数执行,将控制权交回函数调用处
省略return,返回值为NULL,不可有多个返回值
函数的引用返回
从函数返回一个引用,必须在函数声明和指派返回值给一个变量时都使用引用运算符&
function &myfunc()
{
$static $b = 10;
return $b;
}
$a = myfunc();//10
$a = &myfunc();//10
$a = 100;
echo myfunc();//100
外部文件的导入
include/require语句包含并运行指定文件
如果给出路径名按照路径来找,否则从include_path中查找
如果include_path中也没有,则从调用脚本文件所在的目录和当前工作目录下寻找
当一个文件被包含时,其中所包含的代码继承了include所在行的变量范围
加载过程中未找到文件则include结构会发出一条警告;这一点和require不同,require会发出一个致命错误
require在出错时产生E_COMPILE_ERROR级别的错误。
换句话说将导致脚本终止而include只产生警告(E_WARNING),脚本会继续运行。
require(include)/require_one(include_once)唯一区别是PHP会检查该文件是否已经被包含过,如果是则不会再次包含。
系统内置函数
//时间日期函数
date(),strtotime(),mktime(),time(),microtime(),date_default_timezone_set()
//IP处理函数
ip2long(),long2ip()
//打印处理
print(),printf(),print_r(),echo,sprintf(),var_dump(),var_export()
//序列化及反序列化函数
serialize(),unserialize()
//字符串处理函数
implode(),explode(),join(),strrev(),trim(),ltrim(),rtrim(),strstr(),number_format()
//数组处理函数
array_keys(),array_values(),array_diff(),array_intersect(),array_merge(),array_shift(),array_unshift(),array_pop(),array_push,sort()
EX
<?php
$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//引用地址为8
echo $var1;//7 global变成全局,函数内为7
echo $var2;//10//本身为全局的10
$bar = 'foo';
$my_var = 10;
echo $bar($my_var). "\n";//4
网友评论