首页 > 技术文章 > php-核心基础

caoqh 2019-09-10 09:58 原文

 

 

注意:通常,在“能够出现”变量的语法中,只要出现$符号,并在其后出现紧挨着的字符,就会被识别为一个变量,即使不存在该变量

判断变量是否存在isset(),存在,就返回true,不存在就返回false,存在,就返回true,不存在就返回false

 

删除unset():就是断开变量名跟数据之间的“引用关系”

1,驼峰命名法:

示例:name,  myNamemyFatherName

2,帕斯卡命名法:

示例:Name,  MyNameMyFatherName

3,下划线间隔法:

示例:name,  my_amemy_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中下标为0123, ....的元素的值,并一次性放入多个变量中(一一对应)

即其相当于如下语句:

$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中如果值变量是引用传递,则无论如何都是在原数组上进行。

 

推荐阅读