• php文件加载、错误处理、方法函数和数组


    数组运算符
    注意:php中,数组的元素的顺序,不是由下标(键名)决定的,而是完全由加入的顺序来决定。
    联合(+):将右边的数组项合并到左边数组的后面,得到一个新数组。如有重复键,则结果以左边的为准
    $v1 = array(1, 2,3, 4);
    $v2 = array(5,6,7,8,9);
    $r1 = $v1 + $v2; //结果只能是:array(1,2,3,4,9)
    相等(==): 如果两个数组具有相同的键名和键值(可以顺序不同,或类型不同),则返回true
    $v1 = array(1, 2,3, 4);
    $v2 = array(4,2,1,3);
    $v3 = array(3=>4,1=>2,0=>1,2=>3);
    此时:$v1和$v2 相等吗?——不等
    此时:$v1和$v3 相等吗? ——相等
    不相等(!=, <>) :如果两个数组不是相等(==),则返回true
    全等(===):如果两个数组具有相同的键名和键值且顺序和类型都一样,则返回true
    不全等(!==) : 如果两个数组不是全等(===),则返回true

    运算符的优先级
    要意识到运算符有优先级问题
    括号最优先,赋值最落后(通常)
    先乘除后加减
    大致:算术运算符〉比较运算符〉逻辑运算符(除了“非”运算)

    循环的中断
    这里指的中断,适用于所有循环。
    循环的中断有两种情况:
    break中断: 终止整个循环语句,而跳出循环进入到循环结构之后的语句
    continue中断:终止当前正在执行的循环体中的语句,而进入到循环的下一次过程里(改变,判断)
    中断语句的语法如下:
    break $n; //$n是一个大于等于1的整数,表示要中断的循环层数;
    continue $n;
    所谓循环层数,是指一个循环中又嵌套了循环的情况。
    以当前循环为“起点”,表示第一层,往上(外)数,就是2,3,4层。。。。

    控制脚本执行进度
    die(“输出内容”)
    含义:终止php脚本的运行(后续代码不再执行),并输出其中的内容
    也可以:die(); die;
    exit是die的同义词。
    die是一种“语言结构”,并非函数,可以不写括号。
    echo也是一种语言结构,而非函数:
    echo (“abc”);
    echo “abc”;
    echo “abc”, “def”, 123;

    sleep($n);
    含义:让php脚本停止$n秒,然后继续执行。


    有4个文件加载的语法形式(注意,不是函数):
    include, include_once, require, require_once;

    1, 相对路径:
    就是以“./”, 或“../”,开头的路径。
    ./ 表示当前网页文件的所在位置(文件夹,目录);
    ../ 表示当前网页文件的所在位置的上一级位置(文件夹,目录)
    这种相对位置对一个网站中的所有内容(包括php,html,图片,css,js文件)都有效。
    2,绝对路径:
    有2种绝对路径:
    本地绝对路径:
    window系统: c:/d1/d2/page3.php
    unix系列系统: /d1/d2/page3.php
    网络绝对路径: http://www.abc.com/d1/d2/page4.php


    文件载入执行过程
    从include语句处退出php脚本模式(进入html代码模式)
    载入include语句所设定的文件中的代码,并执行之(如同在当前文件中一样)
    退出html模式重新进入php脚本模式,继续之后的代码

    include_once 和include的区别:前者能够保证不会被重复加载
    require 和 include的区别:
    如果被包含文件不存在,即引用失败(出错)时,include发出警告并继续执行后续代码,require直接终止。
    require_once 和 require的区别:前者能够保证不会被重复加载

    return关键字
    以前,我们只在函数中出现return关键字,其作用是:结束函数,并可以返回数据;
    return; //单纯结束;
    return $x; //结束,并返回数据$x;
    那么,
    被包含(载入)的文件中的return 关键字也具有同样的作用!

    系统错误:
    E_ERROR:系统严重错误
    一发生,程序立即停止执行。
    该错误一般希望马上。
    E_WARNING:系统警告
    一发生,提示错误,并继续执行。
    通常该错误希望能够在“下一工作日”去处理掉(解决)。
    E_PARSE:语法错误
    一发生,提示错误,而且代码完全不会运行——在运行之前先检查语法。
    E_NOTICE:系统提示
    一发生,提示错误,并继续执行。
    发个邮件通知一下,自己安排时间有空去解决。

    E_ALL; 代表所有错误——表示它可以“包括”错误。
    E_STRICT: 代表“严格性”语法检查错误——某种语法是可以执行的,但在当前的php版本中是不欢迎使用。

    错误的显示控制
    网页中显示(提示)错误信息,是可以进行控制的,有2种途径:
    1,在php.ini文件中设定,对所有php程序都有效;
    2,在当前脚本文件中,只对当前脚步文件有效。

    错误的显示有2个方面可以进行控制;
    1,设定是否显示:display_error:
    php.ini中;display_error = On; //表示显示, Off表示不显示;
    脚本中: ini_set(“display_error”, 1); //1表示显示, 0表示不显示,也可以用true,false
    脚本中的设定优先级高。

    2,设定显示哪些级别的错误——依赖与第一项设定为显示的情况。
    php.ini文件中:
    error_reporting = E_NOTICE; //只显示E_NOTICE错误
    error_reporting = E_NOTICE | E_WARNING; //显示E_NOTICE和E_WARNING错误
    error_reporting = E_NOTICE | E_WARNING | E_USER_ERROR;
    //显示E_NOTICE和E_WARNING和E_USER_ERROR错误
    解释上一行::
    E_NOTICE: 00000000 00001000
    E_WARNING: 00000000 00000010
    E_USER_ERROR: 00000001 00000000
    或运算(|)
    00000001 00001010

    实际上,在开发阶段,常用的是:
    error_reporting = E_ALL | E_STRICT;
    它是这样的结果:
    E_ALL 01110111 11111111
    E_STRICT: 00001000 00000000
    或运算(|)
    01111111 11111111
    可见,E_ALL并非真的表示“所有”,而是只有E_ALL | E_STRICT才真的表示所有。
    继续:如果在显示“所有”错误的基础上,只想“关闭”个别少数错误呢?
    跟状态数据的设定(关闭)道理一样,只要这么做:
    error_reporting = E_ALL | E_STRICT & ~E_NOTICE; //只关闭了E_NOTICE错误提示
    error_reporting = E_ALL | E_STRICT & ~E_NOTICE & ~E_WARNING;//关闭了2个
    在代码中设定:
    ini_set(“error_reporting”, E_NOTICE); //只显示E_NOTICE错误
    ini_set(“error_reporting”, E_NOTICE | E_WARNING); ////显示E_NOTICE和E_WARNING错误
    ini_set(“error_reporting”, E_ALL | E_STRICT & ~E_NOTICE); //只关闭E_NOTICE错误

    ini_set()含义可以设定几乎所有php.ini中的设定项,形式如下:
    ini_set(“设定项名称” ,值); //这种设定都只对当前脚本有效,而且无需重启apache,很方便。
    另一个对应函数是:ini_get(“设定项名称”);//用于获取某项的值。

    记录错误日志
    在开发阶段,我们通常都是显示所有错误——意图解决错误
    在产品阶段,我们通常都是隐藏所有错误——并同时将错误信息记录到文件中——错误日志文件。
    我们可以自己查看错误日志以解决开发阶段没有发现的错误问题。
    记录错误日志同样有2种途径:
    1,在Php.ini文件中设定:
    log_errors = On; //用于设定是否记录错误日志,On记录,Off不记录
    error_log = “错误日志文件名”; //设定错误日志的文件名
    此时,该文件没有给定路径,则系统会在每个文件夹下建立该文件并记录进去。
    可见,页面中显示的错误提示内容,和日志文件中记录的错误信息内容,一样。
    error_log还有一个特殊值可以使用:
    error_log = syslog; //此时不会记录错误日志文件,而是把错误信息写入到系统错误日志中
    2,在当前脚本文件中:
    ini_set(“log_errors” , On); //或者Off
    ini_set(“error_log”, ‘err1.log’); //后缀随便用
    ini_set(“error_log”, ‘err2.txt’);
    ini_set(“error_log”, ‘err3.html’);
    int_set(“error_log”, syslog); //记录到操作系统日志中。
    几点说明:
    1,一定是用自定义错误处理程序,则系统不再处理错误。
    2,但:如果一旦发生严重错误(E_ERROR, E_USER_ERROR),则立即停止程序,并也不去调用自定义错误处理——此时系统错误处理工作会照常进行——即对于严重错误,自定义错误处理函数处理不了
    global:
    局部范围内,使用global关键字对全局变量进行一次“声明”,则就可以使用了:
    语法:global $变量名;

    有关函数的系统函数:
    function_exists():判断某个函数是否被定义过,返回布尔值
    oif( function_exists(“ func1 “) == false ){
    function func1(){。。。。。。};//定义函数
    o}
    func_get_arg(n):获得一个函数的第n个实参值(n从0开始)
    func_get_args():获得一个函数的所有实参,结果是一个数组
    func_num_args():获得一个函数的所有实参的个数。

    有关函数的编程思想
    递归思想(递归函数)
    递归思想的一个基本形式是:在一个函数中,有至少一条语句,又会去调用该函数自身。
    但是,从代码角度来说,如果单纯是函数内部调用函数本,则会出现“出不来”的现象。
    则我们就必须再来解决下一个问题:
    怎么终止(停止)这种调用——找到递归函数的出口。
    递归思想的总结:
    为了解决一个“大”问题,根据现实逻辑,该问题可以通过比它小一级的同类问题的答案而“轻松得到”。小一级的问题又可以通过更小一级的问题而轻松得到,依次类推——直到“最小问题”,通常就是一个已知数(答案)。

    递推思想(迭代思想)
    递推思想本身并不跟函数有直接关系(虽然常常写在函数中)。
    其基本思路为:
    为了解决一个“大”问题,根据现实逻辑,如果能够找到同类问题的一个“最小问题”的答案(通常是已知的),并且根据已知算法,又可以因此得到比最小问题“大一级”问题的答案。 而且,依次类推,又可以得到再大一级问题的答案,最终就可以得到“最大那个问题”(即要解决的问题)的答案。
    可见,该思想的过程依赖与2个条件:
    1,可知同类最小问题的答案;
    2,大一级问题的答案可以通过小一级问题的答案经过简单运算规则而得到。
    此思想的解体思路是:从小到大
    对比:递归思想是:从大到小,在回归到大。

    数组基础
    数组基础
    php中,数组的下标可以是整数,或字符串。
    php中,数组的元素顺序不是由下标决定,而是由其“加入”的顺序决定。

    定义:
    $arr1 = array(元素1,元素2,。。。。。 );
    array(1, 5, 1.1, “abc”, true, false); //可以存储任何数据,此时为“默认下标”,
    array(2=>1, 5=>5, 3=>1.1, 7=>“abc”, 0=>true);//下标可以任意设定(无需顺序,无需连续)
    array(2=>1, 5, 1=>1.1, “abc”, 0=>true)//可以加下标,也可以不加(默认下标),下标分别是:2,3,1,4,0
    //默认下标规则:前面已经用过的最大数字下标+1
    array(2=>1, ‘dd’=>5, 1=>1.1, “abc”, 0=>true)//混合下标,同样遵循默认下标规则
    array(-2=>1, ‘dd’=>5, 1.1, “abc”, true); //负数下标不算在整数下标中,而只当作字符下标
    //则最后3项的下标是:0, 1, 2
    array(2.7=>1, ‘dd’=>5, 1=>1.1, “abc”, 0=>true);//浮点数下标为自动转换为整数,且直接抹掉小数
    array(“2.7” =>1, ‘dd’=>5, “11”=>1.1, “abc”, true)//纯数字字符串下标,当作数字看待,
    //则此时下标为:2, ‘dd’, 11, 12, 13
    array(2=>1, ‘dd’=>5, true=>1.1, “abc”, false=>true)//布尔值当下标,则true为1,false为0;
    array(2=>1, ‘dd’=>5, 2=>1.1, “abc”, true)//如果下标跟前面的重复,则单纯覆盖前面同名下标的值
    //此时相当于为:array(2=>1.1, ‘dd’=>5, “abc”, true)
    其他形式;
    $arr1[] = 1;
    $arr1[] = 5;
    $arr1[] = 1.1; //直接在变量后面使用[],就成为数组,并依次赋值。
    。。。。
    $arr2[‘aa’] = 1;
    $arr2[‘bbbcc’] = 5;
    $arrr2[5] = 1.1;
    。。。。。。。。
    这种形式写的下标,其实跟使用array语法结构几乎一样。
    取值:通过下标。

    赋值(同定义):
    数组的分类
    从键值关系:
    关联数组:通常是指下标为字符串,并且该字符串大体可以表达出数据的含义的数组。
    例:$person = array(
    “name” => “小花”,
    “age”=>18,
    “edu” => “大学毕业” ,
    );
    索引数组:
    通常是指一个数组的下标是严格的从0开始的连续的数字下标——跟js数组一样。

    从数组层次来分:
    一维数组:
    就是一个数组中的每一个元素值,都是一个普通值(非数组值)
    $arr1 = array(
    “name” => “小花”,
    “age”=>18,
    “edu” => “大学毕业” ,
    );

    二维数组:
    一个数组中的每一项,又是一个一维数组。
    $arr1 = array(
    “name” => array(‘小花’, ‘小芳’, ‘小明’, );
    “age”=> array(18, 22, 19),
    “edu” => array(“大学毕业”, ‘中学’, ‘小学’)
    );

    多维数组:
    依此类推。。。

    多维数组的一般语法形式:
    $v1 = 数组名[下标][下标][.....]

    数组遍历
    遍历基本语法
    foreach( $arr as [ $key => ] $value ) //$key可以称为键变量,$value可以称为值变量。
    {
    //这里就可以对$key 和 $value 进行所有可能的操作——因为他们就是一个变量
    //$key 代表每次取得元素的下标,可能是数字,也可以能是字符串
    //$value 代表每次取得元素的值,可能是各种类型。
    //此循环结构会从数组的第一项一直遍历循环到最后一项,然后结束。
    }

    foreach 遍历细节探讨
    foreach也是正常的循环语法结构,可以有break和continue等操作。
    遍历过程中值变量默认的传值方式是值传递。
    遍历过程中值变量可以人为设定为引用传递:
    foreach($arr as $key => &$value){ ... }
    键变量不可以设定为引用传递
    foreach默认是原数组上进行遍历。但如果在遍历过程中对数组进行了某种修改或某种指针性操作(就是指前面的指针函数),则会复制数组后在复制的数组上继续遍历循环。
    foreach中如果值变量是引用传递,则无论如何都是在原数组上进行

  • 相关阅读:
    移动开发 Native APP、Hybrid APP和Web APP介绍
    urllib与urllib2的学习总结(python2.7.X)
    fiddler及postman讲解
    接口测试基础
    UiAutomator2.0 和1.x 的区别
    adb shell am instrument 命令详解
    GT问题记录
    HDU 2492 Ping pong (树状数组)
    CF 567C Geometric Progression
    CF 545E Paths and Trees
  • 原文地址:https://www.cnblogs.com/loveMis/p/8361900.html
Copyright © 2020-2023  润新知