php n2br,PHP 学习笔记(二)

参考资料:PHP5 权威编程

1ddbe9d2334f

认真做笔记

PHP 中的函数

函数的定义:function 函数名($形参1,$形参2...){ ...函数体.....}

函数的调用: 函数名($实参1,$实参2....);

注意:实参要和函数的形参一一对应

函数调用的详细过程

1.将函数调用时的实参,传递(赋值)给函数的形参;

2. 在函数内部(可以认为是一个与外界隔离的独立空间),按正常的流程顺序,执行其中的代码,直到结束。

3.如果函数内部有 return 语句,则立即终止函数。

函数的参数:

①函数形参的默认值

1ddbe9d2334f

默认值

②形参的传值问题:形参的传值问题,其实就是“变量之间的传值问题”,有2种方式

值传递:默认为之值传递

引用传递

1ddbe9d2334f

引用传递

值传递的实参变量,在函数内部的形参变量改变了其值,也不会改变该实参变量的值;引用传递的实参变量,在函数内部对应的形参变量的值发生改变,也会改变该实参变量的值。

③函数参数的数量问题

1,通常,函数调用时的实参数量,应该跟函数定义时的形参数量保持一致。

2,如果函数定义时,形参有默认值,则对应的实参就可以进行一定程度的省略:

注意:省略只能从右往左进行。

3.函数参数相关的系统函数

1: func_get_args();//获取实参数据列表,成为一个数组

2: func_get_arg($i);//获取第$i个实参数据,$i从0开始算起;

3:func_num_args();//获取实参的数量(个数)

函数的返回值

形式:

function函数名(....){

..........

return  数据;

}

return语句的作用,不管后面跟不跟数据值,都会立即终止函数的执行,返回到函数调用的位置并继续后续工作。

函数的其他形式

可变函数:一个函数的名字是一个变量

1ddbe9d2334f

可变函数

匿名函数:没有函数名的函数

形式①将一个匿名函数“赋值”给一个变量——此时该变量就代表该匿名函数了!

$f1 =  function(参数1,参数2 ){.......};

$f1( 参数1,参数2  );

形式②    是直接将一个匿名函数,当做“实参”来使用,即回调函数。

1ddbe9d2334f

匿名函数

作用域问题

变量的作用域指的是  一个变量,在什么范围内可以使用的情况。

PHP中有3种作用域:1. 局部作用域,是指一个函数的内部范围,对应这样的变量,就称为 局部变量; 2 .全局作用域,是指不在函数的内部范围-----函数的外部,对应这样的变量,就称为  全局变量; 3.超全局作用域,是指所有的代码范围,对应这样的变量,就称为 超全局变量,其实就是系统定义的几个变量,如$_GET,$_POST,$_SEVER,$_REQUEST,$GLOBALS,$_SESSION,$_COOKIE,$_FILE等等.

通常情况下:1.全局范围不能访问局部变量;

2.局部范围不能访问全局变量;

3.函数内部的变量(局部变量),通常在函数调用执行结束后,就被“销毁”了。

4.但有一种局部变量,在函数调用结束后不被销毁:它叫做“静态变量”;

使用形式:

function函数名 (....){

static  $变量名  =  初始值;//这就是静态变量!

}

1ddbe9d2334f

静态变量

函数内部的变量,在调用后会被销毁,比如$n2,每次调用后都会被销毁,所以下一次重新调用,初始值还是0,而 静态变量 在调用后不会被销毁,每次调用,初始值就是上次计算后的值;

在局部作用域访问(使用)全局变量

①使用global关键字

1ddbe9d2334f

global

在函数中,使用 global 来声明一个 要使用的全局变量的同名局部变量,函数内的$n1是局部变量,只是跟全局的n1同名; 函数内外的 n1 共同指向一个数据,即它们是 引用关系。 在函数内部修改了这个数据,那么全局里的变量 也就变了。

②使用$GLOBALS超全局变量

1ddbe9d2334f

$GLOBALS

$GLOBALS对全局变量的使用可以看做是全局变量的另一种语法形式而已,而不是“引用关系”.操作的就是同一个变量。

有关函数的系统函数

function_exists(" 函数名"):判断一个函数是否被定义过。

func_get_arg($i):获取第i个实参值

func_get_args():获取所有实参(结果是一个数组)

func_num_args():获取所有实参的个数。

字符串函数

输出与格式化:echo , print, printf, print_r, var_dump.

字符串去除与填充:trim, ltrim, rtrim, str_pad

字符串连接与分割:implode, join, explode, str_split

字符串截取:substr, strchr, strrchr,

字符串替换:str_replace, substr_replace

字符串长度与位置:strlen, strpos, strrpos,

字符转换:strtolower, strtoupper, lcfirst, ucfirst, ucwords

特殊字符处理:nl2br, addslashes, htmlspecialchars, htmlspecialchars_decode,

时间函数

time, microtime, mktime, date, idate, strtotime, date_add, date_diff,             date_default_timezone_set, date_default_timezone_get

数学函数

max, min, round, ceil, floor, abs, sqrt, pow, round, rand

有关函数的编程思想

递归思想--------递归函数

递归思想总结:

当面对一个“大问题”,该大问题可以经由该问题的同类问题的“小一级问题”而经过简单计算获得,而且,可以获知(已知)这类问题的“最小一级问题”的答案。则,此时就可以使用递归方法来解决该问题。

则此时该函数的基本模式是:

function  digui( $n ){

if(是最小一级){

return已知的答案;

}

$jieguo =对 digui($n-1) 进行简单运算;

return $jieguo;

}

递推(迭代)思想

递推总结:

如果要求一个“大问题”,且该问题有如下2个特点:

1,已知该问题的同类问题的最小问题的答案。

2,如果知道这种问题的小一级问题的答案,就可以轻松求得其“大一级”问题的答案,并且此问题的级次有一定的规律;

则此时就可以使用递推思想来解决该问题,代码模式为:

$qian =已知的最小一级问题的答案;

for( $i =最小一级的下一级;  $i <= 最大一级的级次; ++$i){

$jieguo =对 $qian 进行一定的计算,通常需要使用到$i;

$qian = $jieguo;

}

echo  “结果为:”  .  $jieguo;

PHP 中的数组

数组定义:数组就是一系列数据的集合体;PHP中的数组单元的顺序,与下标无关。

$arr1 = array(1,2,3,4)     常见数组,下标为 默认下标, 就是从 0 开始的整数;

$arr2 = array("a"=>1,"b"=>2,"c"=>3)   关联数组,下标为字符串  ;

$arr3 = array(1=>3,5=>9,0=>19,'aaa'=>88,100);下标可以人为给定,可以数字和字符串混合使用,有标明的下标,也有自动下标,此时下标为 1,5,0,'aaa',6,自动下标为前面最大数字下标+1,

$arr4 = array(1=>555,8.8=>999);此时下标为 1,8; 浮点数下标只取整数部分;

$arr5 = array(2=>555,true=>9999,6=>11);此时下标为2,1,6;

$arr6 = array(1=>3,5=>7,true=>99);此时下标为1,5,其值为99,7;下标如果又重复,后面的值覆盖前面的值;

$arr7[] = 1;     $arr7[] = 2;   $arr7[] = 3;  该数组下标为0,1,2

$arr8['aa'] = 1; $arr8['bb'] = 2;   $arr8['cc'] = 3; 该数组下标为'aa','bb','cc';

$arr9[1] = 1;  $arr9[] = 2;   $arr9['dd'] = 3;该数组下标为1,2,‘dd'

还是要注意的,PHP中,数组的单元顺序,是由其 放入 顺序决定的,而不是下标。

数组取值

$n1  =  $arr[下标];

数组的分类

①按键值关系来分

索引数组:通常认为,一个数组的下标是严格从0开始的连续的整数,这样的数组成为索引数组。$arr = array(99,33,55,77,88,99,22);

关联数组:通常认为,一个数组的下标都是字符串并一定程度上表明了该单元的含义,则称为关联数组。

$conf  = array(

‘host’=>”localhost”  ,

‘port’=>3306  ,

‘username’=>’root’  ,

‘password’ => ‘123’

)

混合数组:既有数字下标,也有字符串下标;  $arr3 = array(1=>3,4,'aaa'=>88,100);

②按数组的维数(复杂程度)分

一维数组:$arr = array(1,2,45,66)

二维数组: $arr = array(array(1,2),array(2,5),array(99,100))

n维数组 :    接着嵌套

数组的基本使用

1ddbe9d2334f

数组求和

数组的遍历

foreach 基本语法

foreach ($数组名称  as  $key => $value) {

这里可以使用$key  和 $value;

$key和 $value 就是该遍历语句一次次取得的数组的每一个单元(项)的下标和对应值。

它总是从数组的开头往后按顺序取数据。

}

数组的指针操作及遍历原理

$arr  = array(1=>0,'aa'=>22,5=>9,'bb'=>19,9=>100)

1ddbe9d2334f

指针示意图

该箭头就是数组内部的所谓  “指针” 的示意图。默认情况下,该指针指向数组的第一个单元。数组的所有有关单元的操作,如果没有指定下标,则就是针对该指针指向的单元的操作。

所谓遍历,就是一次次取得当前单元的 键 和 值,并放入对应的变脸$key ,$value,然后移动指针到下一个单元。

指针函数:

$v1 = current( $数组);//获取数组当前指针所在单元的 ‘值’;

$v2 = key( $数组);//获取数组当前指针所在单元的 ‘键’(下标);

$v3 = next( $数组);//先将数组的指针向 后移动一个单元,然后获取数组当前指针所在单元的 ‘值’;

$v4 = prev( $数组);//先将数组的指针向 前移动一个单元,然后获取数组当前指针所在单元的 ‘值’;

$v5 = end( $数组);//将数组的指针直接移动到 最后,然后获取数组当前指针所在单元的 ‘值’;

$v6 =  reset( $数组);//将数组的指针直接移动到 第一个单元,然后获取数组当前指针所在单元的 ‘值’;

使用 for 和 next 遍历数组

1ddbe9d2334f

for... next 遍历

while+each( )+list( )  遍历数组

each( )函数的作用:先取得一个数组的“当前单元”的下标和值(并放入一个数组),然后将指针移到下一个单元。

$a  =  each($数组名);       //返回的 $a 就是一个数组了

1ddbe9d2334f

each函数

list()函数的作用:用于一次性取得一个数组中从0开始的连续的数字下标的多个单元的值!

list($变量1,$变量2,$变量3, .. ) =  $数组;

上述一行代码相当于如下代码:

$变量1 = $数组[0];

$变量2 = $数组[1];

$变量3 = $数组[2];

1ddbe9d2334f

list函数

while + list + each  遍历数组实例

1ddbe9d2334f

实例

数组的一些注意事项:

1.foreach循环中中可以使用 break  和 continue;

2.遍历过程中值变量默认的传值方式是 值传递。

1ddbe9d2334f

值传递

foreach 中修改了value 的值,但是数组并没有过改变;

3.遍历过程中值变量可以人为设定为引用传递:foreach($arr as $key =>&$value){ ... }

1ddbe9d2334f

引用传递

foreach 中修改了value 的值,数组也改变;但是键值 $key 并不能修改。

4.foreach 默认是原数组上进行遍历。但如果在遍历过程中对数组进行了某种修改或某种指针性操作,则会复制数组后在复制的数组上继续遍历循环(原数组保持不变)。

1ddbe9d2334f

实例

改变数组的时候($arr[6] = 1000),先将数组复制一份,在复制的数组上进行遍历。因此,echo 的时候并没有 6=>1000.

5.foreach中如果值变量是引用传递,则无论如何都是在原数组上进行。

1ddbe9d2334f

实例

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值