美文网首页
PHP 学习笔记(二)

PHP 学习笔记(二)

作者: _1633_ | 来源:发表于2018-03-20 15:28 被阅读0次

参考资料:PHP5 权威编程



认真做笔记

PHP 中的函数

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

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

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

        函数调用的详细过程

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

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

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

        函数的参数:

                ①函数形参的默认值

默认值

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

                        值传递:默认为之值传递

                        引用传递

      引用传递

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

                ③函数参数的数量问题

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

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

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

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

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

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

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

        函数的返回值

            形式:

                    function函数名(....){

                            ..........

                            return  数据;

                     }

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

        函数的其他形式

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

可变函数

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

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

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

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

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

匿名函数


        作用域问题

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

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

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

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

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

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

            使用形式:

            function函数名 (....){

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

            }

静态变量

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

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

            ①使用global关键字

global

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

            ②使用$GLOBALS超全局变量

$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维数组 :    接着嵌套

    数组的基本使用

数组求和

    数组的遍历

          foreach 基本语法

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

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

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

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

                }


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

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

指针示意图

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

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

            指针函数

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

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

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

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

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

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


          使用 for 和 next 遍历数组           

for... next 遍历

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

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

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

each函数

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

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

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

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

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

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

list函数

          while + list + each  遍历数组实例

实例

   数组的一些注意事项:

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

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

值传递

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

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

引用传递

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

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

实例

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

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

实例

相关文章

网友评论

      本文标题:PHP 学习笔记(二)

      本文链接:https://www.haomeiwen.com/subject/hubhfftx.html