• php文档知识点整理(函数、方法、文件加载)


    函数:

    函数定义形式:

    function  函数名 (形参1,形参2.... ){

    }

    函数参数:(2种)

    形参:

    1,形参一定是一个变量名!

    2,该变量名只能是在该函数中有效的变量名;

    3,而且只在该函数调用并执行时有效,函数结束,通常这些变量也就“销毁”。

    实参:

    实参就是一个“实际数据”,

    该数据可以是一个“直接数据”(比如5”abc”),也可以是一个变量中存储的数据。

    实参的作用是将其数据“赋值给”形参变量。

    实参跟形参之间通常应该有个一一对应”关系:

    定义形式:   function  函数名(形参1,形参2...... ){ 。。。。}

    调用形式:    函数名(实参1,实参2.....

    默认值参数:

    注意:

    默认值不能是对象或资源类型;

    默认值只能是常量表达式,或常量,不能是变量

    定义时可以不给定形参,但调用时,却又可以给定任何个数的实参。

    在系统中,var_dump()这个函数也有同样的使用效果:

    var_dump($v1);

    var_dump($v1, $v2, $v3); //也可以

    这种应用的实现,是依赖与系统中的3个系统函数来达到的:

    func_get_args(); //获得一个函数所接收到的所有实参数据,并结果是一个数组

    func_get_arg(n); //获得一个函数所接收到的第n个实参数据(n0开始)

    func_num_args(); //获得一个函数所接收到的所有实参数据的个数

    定义函数:

    function  &函数名(形参1,形参2.....) //注意函数名前有个引用符号“&

    {

    $result = 0; //初始化

    。。。。。。。

    return $result; //此时返回数据,只能是变量

    }

    匿名函数:

    表现1

    $f1 =  function(){。。。函数体;}

    //这里的匿名函数定义形式上没有名字,但其实又将之赋值给了变量$f1

    使用时,就跟“可变函数”一样了:$v1 = $f1();

    表现形式2

    调用其他函数2匿名函数,实参1,实参2...... );

    说明:

    1此形式的匿名函数只有定义的函数体(无函数名)

    2此形式的匿名函数只能作为其他函数调用时的参数(其他函数通常有特定用处)

    3此匿名函数会在调用其他函数的“过程中”被执行。

    能够使用(匿名)函数当作实参的函数,并不多!

    其中有一个常见的是:call_user_func_array();

    其使用形式为:

    call_user_func_array(匿名函数,数组);

    含义:

    将数组的每一项当作该匿名函数的若干个实参,传递到该匿名函数中,并执行该匿名函数,并可以从该匿名函数中返回数据。

    变量的作用域:(4个)

    通常说作用域,有2个:

    局部作用域:只能在所定义的函数范围内使用。

    全局作用域:在函数的“外部”范围使用。

    ——php中,局部和全局作用域是不重叠的

    ——js中,全局作用域是包括局部作用域的

    但还有两个:

    超全局:就是在函数的内部和外部都可以使用。

    超全局变量只有系统内部预定义的那几个,我们不能再程序中创建超全局变量。

    静态局部作用域:其实也是局部,但多一个特征:数据能够在函数退出后仍然保持不丢失。

    局部访问全局变量的特定语法:

    在局部范围内,使用global关键字对全局变量进行一次“声明”,则就可以使用了:

    语法:global  $变量名;

    实际上,函数中的global 语句,其实是创建了一个跟外部变量同名的局部变量,并通过“引用”的方式指向了外部变量的数据区

    1 <?php
    2     $v1=10;
    3     function f3(){
    4         global $v1;
    5         echo "<br />v1 = $v1";
    6         $v2=20;
    7     }
    8     f3();
    9 ?>
    举例

    $GLOBALS:

    在函数中(局部范围),使用$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():获得一个函数的所有实参的个数。

    有关函数的编程思想:

    递归思想的一个基本形式是:在一个函数中,有至少一条语句,又会去调用该函数自身。

    递归思想(递归函数)

    1,很多问题,用递归和递推都可以解决。

    2,有些问题只能用递归。

    3,如果两种方法都可以解决,推荐使用递推——效率高很多!

     数组:

    php中,数组的下标可以是整数,或字符串。

    php中,数组的元素顺序不是由下标决定,而是由其“加入”的顺序决定。

    多维数组的一般语法形式:

    $v1 = 数组名[下标][下标][.....]

    数组遍历:

    foreach( $arr   as   [ $key  => ] $value ) //$key可以称为键变量,$value可以称为值变量。

    {

    //这里就可以对$key  $value 进行所有可能的操作——因为他们就是一个变量

    //$key 代表每次取得元素的下标,可能是数字,也可以能是字符串

    //$value 代表每次取得元素的值,可能是各种类型。

    //此循环结构会从数组的第一项一直遍历循环到最后一项,然后结束。

    }

    数组指针和遍历原理:

    举例:$arr1 = array(2=>1,  ‘dd’=>5,  1=>1.1,  “abc”,  0=>true)

    下标:

    2

    ‘dd’

    1

    3

    0

    值:

    1

    5

    1.1

    ‘abc’

    true

    指针除了负责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开始的连续数字下标的元素的取值”(但并非要求数组的元素的顺序为同样的数字顺序)

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

     1 <?php
     2 //    $arrpao = array(8,10,26,15,30,13);
     3 //    $changdu = count($arrpao);
     4 //    echo "<br>排序之前";
     5 //        var_dump($arrpao);
     6 //    for($i=0;$i<$changdu-1;++$i){
     7 //        $max =$arrpao[0];
     8 //        $xia =0;
     9 //        for($k=0;$k<$changdu-$i-1;++$k){
    10 //            if($arrpao[$k]>$arrpao[$k+1]){
    11 //                $a = $arrpao[$k];
    12 //                $arrpao[$k]=$arrpao[$k+1];
    13 //                $arrpao[$k+1]=$a;
    14 //            }
    15 //        }
    16 //    }
    17 //    echo "<br />排序之后:";
    18 //    var_dump($arrpao);
    19 ?>
    冒泡案例

    文件加载

    1.有4个文件加载的语法形式(注意,不是函数):

    include ,   include_once ,   require ,  require_once;

    1,如果加载文件失败,则有不同的处理规则;includerequire不同

    2,如果加载文件重复,则有不同的处理规则;XXXXXX_once不同;

    3,他们都是语法结构,而非函数,使用形式可以有两种:

    3.1  include +  ‘文件路径’;    或者  include + (‘文件路径’);

    文件路径问题:(有3种)

    1.相对路径

    相对路径就是以./”, 或“../”,开头的路径。

    ./ 表示当前网页文件的所在位置(文件夹,目录);

    ../ 表示当前网页文件的所在位置的上一级位置(文件夹,目录)

    /   表示根目录文件

    这种相对位置对一个网站中的所有内容(包括phphtml,图片,cssjs文件)都有效。

    2.绝对路径(2种)

    1.本地绝对路径:

    window系统: c:/d1/d2/page3.php

    unix系列系统: /d1/d2/page3.php

    2.网络绝对路径: http://www.abc.com/d1/d2/page4.php

    3.只有文件名(无路径)

    1.在php.ini配置文件中,有:include_path设定:

    我们也可以在脚本中设定:

    设置载入文件:set-include-path(‘文件路径’)

    获取载入文件:get-include-path(‘文件路径’)

    我们也可以使用另一个函数来获取当前的include_path的值:

     

    2,上面没找到,在当前执行的网页文件所在目录(所谓当前工作目录)查找:

    所谓当前网页文件,就是地址栏中显示的那个文件名。

    3,上面还没找到,则在当前include命令所在文件的所在目录中查找:

    如果一个文件(A)包含文件B,在文件B中又有include命令包含文件C

    此时B中的路径问题就可能发生这种情况。

    文件载入执行过程

    1.从include语句处退出php脚本模式(进入html代码模式)

    2.载入include语句所设定的文件中的代码,并执行之(如同在当前文件中一样)

    3.退出html模式重新进入php脚本模式,继续之后的代码

    1 <?php
    2     echo "<p>代码(1)</p>"  
    3 ?>
    4     include '文件路径'
    5 
    6 <?php
    7     echo "<p>代码(1)</p>"  
    8 ?>
    举例:

    四种加载方法的区别:

    1.include_once 和include的区别:前者能够保证不会被重复加载

    2.require 和 include的区别:

    如果被包含文件不存在,即引用失败(出错)时,include发出警告并继续执行后续代码require直接终止。

    require_once 和 require的区别:前者能够保证不会被重复加载。

    return关键字

    return的作用是:结束函数,并可以返回数据;

     1 1.<?php
     2     echo "<p>主文件中第一行</p>";
     3 
     4     include'header2.php';
     5 
     6     echo"<p>主文件中第2行</p>";
     7 ?> 
     8 
     9 
    10 2.<?php
    11     echo "header2中第一行<br />";
    12     echo "header2中第2行<br />";
    13     return;
    14     echo "header2中第3行<br />";
    15 ?>
    举例 两个PHP中

    结果:

    return返回值的形式:

     

    1.<?php
        echo "<p>主文件中第一行</p>";
        $n = include 'header2.php';//将加载文件执行的结果返回给$n
        echo "<p>主文件中第2行</p>";
        echo "<p>主文件中 n =$n </p>";
    ?>
    
    
    
    
    2.<?php
        $m = 10;
        echo "header2中第一行<br />";
        echo "header2中第2行<br />";
        return $m;
        echo "header2中第3行<br />";
    ?>
    举例 2个php

    结果:

    错误处理

    语法错误:

    程序没法运行,直接提示语法错误。

    运行时错误:

    只有程序运行到某行,或在某些特定的情形下运行才会发生的错误。

    逻辑错误:

    程序从头到尾运行都没有发生(并提示)错误,但程序运行计算的结果是错误的。

    我们程序员主要面对的和要处理(应付)的错误,就是运行时错误。

    系统错误:

    E_ERROR:系统严重错误

    一发生,程序立即停止执行。

    该错误一般希望马上。

    E_WARNING:系统警告

    一发生,提示错误,并继续执行。

    通常该错误希望能够在“下一工作日”去处理掉(解决)。

    E_PARSE:语法错误

    一发生,提示错误,而且代码完全不会运行——在运行之前先检查语法。

    E_NOTICE:系统提示

    一发生,提示错误,并继续执行。

    发个邮件通知一下,自己安排时间有空去解决。

    他们的本质是:

    1 <?php
    2 echo "<br />E_ERROR = ".E_ERROR;    
    3 echo "<br />E_WARNING = ".E_WARNING;    
    4 echo "<br />E_PARSE = ".E_PARSE;    
    5 echo "<br />E_NOTICE = ".E_NOTICE;    
    6 ?>
    他们的本质:

    可见他们只是一个系统内部常量(整数常量);

    用户自定义错误:(3个)

    E_USER_ERROR;

     

    E_USER_WARNING;

     

    E_USER_NOTICE;

     人工触发:

    trigger_error(“错误提示”  用户错误代号);

    错误的显示控制:

    设定是否显示:display_error:

    php.ini中;display_error = On; //表示显示, Off表示不显示;

  • 相关阅读:
    centos 安装tomcat
    UTF8 的BOM带来的麻烦
    linux 下tomcat开机自启动
    proxool连接池空闲连接中断问题解决
    java判断字符串是否为空的方法总结
    修改my.cnf ,使mysql 的表面不区分大小写
    csc a Wx.NET app.doc
    用Wiz作为灵格斯词典(Lingoes)的生词本
    单词
    使用OKHTTP方式发送POST请求,获取返回的JSON串
  • 原文地址:https://www.cnblogs.com/sc1314-1218/p/8358857.html
Copyright © 2020-2023  润新知