php-核心基础
注意:通常,在“能够出现”变量的语法中,只要出现$符号,并在其后出现紧挨着的字符,就会被识别为一个变量,即使不存在该变量
判断变量是否存在isset(),存在,就返回true,不存在就返回false,存在,就返回true,不存在就返回false
删除unset():就是断开变量名跟数据之间的“引用关系”
1,驼峰命名法:
示例:name, myName, myFatherName
2,帕斯卡命名法:
示例:Name, MyName, MyFatherName
3,下划线间隔法:
示例:name, my_ame, my_father_name
1:预定义变量又叫超全局变量,包括:
$_GET, $_POST, $_SERVER, $_REQUEST, $GLOBALS, $_COOKIE, $_SESSION, ..........(大约10个)
2:作用域问题
php中,自定义的变量的作用域,分两种:全局作用域(函数外),局部作用域(函数内)。
但:
预定义变量的作用域称为“超全局作用域”:全局作用域 + 局部作用域的总和(函数内外全都可用)
3:数据类型问题:
超全局变量都是数组!
魔术常量
比如:__DIR__(当前网页文件的所在目录),__FILE__(当前网页文件),__LINE__(当前这一行)
魔术常量其实类似变量,其值随着不同代码而变化,不区分大小写
数据类型
标量类型: int, float, string, bool
复合类型: array, object
特殊类型: null, resouce
那么,在php中,其他各种数据,隐含转换为布尔值的时候,会当作false的有:
0
0.0
null
“”
“0”
array(); //空数组
isset(), empty(), unset();
isset()判断一个变量是否存在数据:
empty()判断一个数据是否为空:接近我们的日常观念(没有就是空)
unset():销毁(删除)一个变量。
is_XX类型() 系列函数:判断某个数据是否是某种类型,包括:
is_int(), is_float(), is_numeric(),is_bool(), is_array(), is_scalar():
is_numeric()对:3, 3.5,“3”,“3.14”判断都是true
is_scalar():判断是否为标量类型(即int,float,stirng,bool)
包括:> >= < <= ==松散相等 != ===严格相等 !==
==和===的区别:
==:松散相等,比较的是两个数据“类型转换之后”是否有可能相等,也常常认为是“数据内容是否相同”
===:严格相等,全等,只有两个数据的类型和数据的内容都完全一致,才相等。
实际上,函数中的global 语句,其实是创建了一个跟外部变量同名的局部变量,并通过“引用”的方式指向了外部变量的数据区
在函数中(局部范围),使用$GLOBALS超全局数组来引用(使用)全局变量:
$GLOBALS超全局数组的作用是用于存储所有全局变量的数据:变量名为下标,变量值为对应元素值。
全局访问局部变量的特定语句
通过引用传递的方式向形参传递一个引用实参变量
$v1 = 10;
function f1( &$p1, $p2){ ...... } //$p1是函数的形参,也即就是函数的内部(局部)变量
$v2 = f1( $v1, 10); //此时我们认为$v1就可以使用函数中$p1的值。
使用函数的引用返回形式:见前面引用传递的方式返回数据
函数中使用global关键字来首次引用一个全局变量,则函数结束后在全局范围就可以使用该变量了
有关函数的系统函数:
function_exists():判断某个函数是否被定义过,返回布尔值
if( function_exists(“ func1 “) == false ){
function func1(){。。。。。。};//定义函数
}
func_get_arg(n):获得一个函数的第n个实参值(n从0开始)
func_get_args():获得一个函数的所有实参,结果是一个数组
func_num_args():获得一个函数的所有实参的个数
数组遍历
foreach( $arr as [ $key => ] $value ) //$key可以称为键变量,$value可以称为值变量。
{
//这里就可以对$key 和 $value 进行所有可能的操作——因为他们就是一个变量
//$key 代表每次取得元素的下标,可能是数字,也可以能是字符串
//$value 代表每次取得元素的值,可能是各种类型。
//此循环结构会从数组的第一项一直遍历循环到最后一项,然后结束。
}
数组指针和遍历原理
每个数组,其内部都有一个“指针”,该指针决定了该数组当前取值的时候,取到的元素。
foreach遍历过程中,都是依赖与该指针而进行的!
指针除了负责foreach循环的位置设定之外,还有其他一些函数也依赖于该指针:
1, $v1 = current( $arr1); //取得$arr1中当前指针所指向的元素的值,如果没有指向元素,则为false
2, $v1 = key($arr1); //取得$arr1中当前指针所指向的元素的下标,。。。。。false
3, $v1 = next($arr1 ); //将指针移向“下一个元素”,然后取得该下一个元素的值;
4, $v1 = prev($arr1); //将指针移向“上一个元素”,然后取得该上一个元素的值
5, $v1 = reset($arr1); //将指针移向“第一个元素”,然后取得该元素的值——数组指针初始化
6, $v1 = end($arr1); //将指针移向“最后一个元素”,然后取得该元素的值
7, $v1 = each($arr1); //取得当前元素的下标和值,然后移动指针到下一个位置
for+next+reset遍历数组
reset( $arr1 ); //重置数组,即:数组指针初始化,这里,返回的数据被“丢弃”了。
$len = count( $arr1);
for($i = 0; $i < $len $i++){
$key = key ($arr1 ); //下标
$value = current( $arr1 ); //值
//然后这里就可以对$key 和 $value进行任何作为变量的操作
next($arr1);//这里,移动指针到下一个元素(也同时丢弃了返回值)
}
while+each()+list()遍历数组
each()函数解释:
each()函数可以取得一个数组中的一个元素的下标和值,然后再放入一个新的数组中,并且指针后移一位。
该新的数组,有4个元素,但存储的是下标和值的“双份”,类似下述形式:
array(
1 => 取出来的值,
‘value’ = >取出来的值,
0 = > 取出来的下标(键名),
‘key’ => 取出来的下标(键名)
);
list()函数解释:
使用形式:
list($v1, $v2, $v3,$v4 .... )= 数组$arr1;
其作用是:依次取得数组$arr1中下标为0,1,2,3, ....的元素的值,并一次性放入多个变量中(一一对应)
即其相当于如下语句:
$v1 = $arr1[0];
$v2 = $arr1[1];
$v3 = $arr1[2];
$v4 = $arr1[3];
..........
但是注意:只能实现这样的“从0开始的连续数字下标的元素的取值”(但并非要求数组的元素的顺序为同样的数字顺序)
然后开始使用这2个函数和while循环结构来实现数组遍历:
形式:
reset($arr1);
while ( list ($key, $value ) = each( $arr1) ) //从数组$arr1中一次次取出元素,
//当each到数组最后的时候,就返回false,即此时循环结束
{
//这里,就可以对$key ,和$value进行操作了。
}
foreach 遍历细节探讨
foreach也是正常的循环语法结构,可以有break和continue等操作。
遍历过程中值变量默认的传值方式是值传递。
遍历过程中值变量可以人为设定为引用传递:
foreach($arr as $key => &$value){ ... }
键变量不可以设定为引用传递
foreach默认是原数组上进行遍历。但如果在遍历过程中对数组进行了某种修改或某种指针性操作(就是指前面的指针函数),则会复制数组后在复制的数组上继续遍历循环。
foreach中如果值变量是引用传递,则无论如何都是在原数组上进行。