PHP《基础篇》-知识点整理

167 阅读8分钟

数组函数系列

array();//创建数组
array_chunk(array,size,preserve_key);
    /*把数组分割成新的数组块,array,要分割的数组,size,规定新数组包含多少个元素
    preserve_key,ture为保留原始数组的键名,false-默认,每个结果数组从0开始新的索引;*/
array_column(array,column_key,index_key);
    /*返回数组中某一列的值,array,要使用的多维数组,column_key,要返回的列
    index_key-可选,用作返回数组的键;*/
array_combine(array1,array2);
    //合并两个数组,第一个数组为键名,第二个数组为键值,如果两个数组的元素个数不相同返回false;
array_count_values(array);//用于统计数组内所有值出现的次数;
array_diff_key(array1,array2,array3...);
    /*(只比较键名)返回数组的差集数组,array1为被比较数组,
    返回的数组包含了所有在被比较数组中但是不在其他参数数组中的键名,键名保持不变;*/
array_diff(array1,array2,array3);//(只比较键值)返回数组的差集数组
array_diff_assoc(array1,array2,array3...);//(比较键名和键值)返回数组的差集数组
array_intersect_key();//比较数组,返回交集(只比较键名)。
array_intersect();//比较数组,返回交集(只比较键值)。
array_intersect_assoc();//比较数组,返回交集(比较键名和键值)
array_key_exists(key,array);//检查数组中是否存在key这个键名;
array_keys();//返回数组中所有键名;
array_merge();//合并数组;
array_merge_recursive();//递归合并数组;
array_multisort();//对数组排序
array_pop(); //删除数组中的最后一个元素;
array_push(); //向数组的尾部添加一个或多个元素;
array_rand(); //返回数组中一个或多个键;
array_replace(); //后边的数组将会替换前面数组的值;
array_reverse(); //相反的元素顺序返回数组;
array_search(); //在数组中查找某个键值,并返回相对应的键名,如果没找到则返回false;
array_shift(); //函数删除数组中第一个元素,并返回被删除元素的值;
array_slice(array,start,lenght); 
    /*函数返回数组中根据条件取出一段值, array相应数组,start开始的位置,lenght选取的元素个数;*/
array_splice(); //删除或替换数组中指定元素;
array_sum(); //返回数组元素值的和;
array_flip(); //数组内键名和键值互换;
array_unique(); //移除数组内重复的值;
array_unshift(); //从数组的开始处插入一个或多个元素;
array_values(); //返回数组内的所有值;
count()、sizeof(); //返回数组中元素个数;
in_array(); //判断数组内是否存在指定值;
shuffle(); //打乱数组顺序;
sort(); //对数组进行排序,该函数重新赋予新的键名;

字符串函数系列

chunk_split //将字符串分割成小块
explode //使用一个字符串分割另一个字符串
implode //将一个一维数组的值转化为字符串
lcfirst //使一个字符串的第一个字符小写
ltrim //删除字符串开头的空白字符(或其他字符)
md5 //计算字符串的 MD5 散列值
money_format //将数字格式化成货币字符串
nl2br //在字符串所有新行之前插入 HTML 换行标记
number_format //以千位分隔符方式格式化一个数字
ord //返回字符的 ASCII 码值
rtrim //删除字符串末端的空白字符(或者其他字符)
str_replace //子字符串替换
str_ireplace //str_replace 的忽略大小写版本
str_repeat //重复一个字符串
str_shuffle //随机打乱一个字符串
str_split //将字符串转换为数组
stripos //查找字符串首次出现的位置(不区分大小写)
strpos //查找字符串首次出现的位置
strstr //查找字符串的首次出现
stristr //strstr 函数的忽略大小写版本
strlen //获取字符串长度
strrchr //查找指定字符在字符串中的最后一次出现
strrev //反转字符串
strripos //计算指定字符串在目标字符串中最后一次出现的位置(不区分大小写)
strrpos //计算指定字符串在目标字符串中最后一次出现的位置
strtok //标记分割字符串
strtolower //将字符串转化为小写
strtoupper //将字符串转化为大写
substr_count //计算字串出现的次数
substr_replace //替换字符串的子串
substr //返回字符串的子串
trim //去除字符串首尾处的空白字符(或者其他字符)
ucfirst //将字符串的首字母转换为大写
ucwords //将字符串中每个单词的首字母转换为大写
wordwrap //打断字符串为指定数量的字串

&引用

变量引用相当于不同的变量都指向同一个内容。

== 与 === 区别

===比较两个变量的值和类型;==比较两个变量的值,不比较数据类型。

isset与empty区别

    isset()函数一般用来检测变量是否设置,且值是否为NULL(为空返回FALSE)
    emmpty()函数用来判断值为空,且值是否为NULL(为空返回TRUE)

魔术函数

    __construct(); //类的构造函数
    __destruct(); //类的析构函数
    __call(); //在对象中调用一个不可访问方法时调用
    __callStatic(); //用静态方式中调用一个不可访问方法时调用
    __get(); //获得一个类的成员变量时调用
    __set(); //设置一个类的成员变量时调用
    __isset(); //当对不可访问属性调用isset()或empty()时调用
    __unset(); //当对不可访问属性调用unset()时被调用。
    __sleep(); //执行serialize()时,先会调用这个函数
    __wakeup(); //执行unserialize()时,先会调用这个函数
    __toString(); //类被当成字符串时的回应方法
    __invoke(); //调用函数的方式调用一个对象时的回应方法
    __set_state(); //调用var_export()导出类时,此静态方法会被调用。
    __clone(); //当对象复制完成时调用
    __autoload(); //尝试加载未定义的类
    __debugInfo(); //打印所需调试信息

static、$this、self区别

    1、$this 表示对象的引用,谁调用该方法(一般是对象调用)$this则表示该对象的引用。
    2、self 它指向类本身,不指向任何实例化对象,self写在哪个类中则表示该类的引用。
    3static 一般用来访问类中的静态变量和静态方法,哪个类调用该方法static就表示那个类。

private、protected、public、final 区别

   public(公有);  //被定义为公有的类成员可以在任何地方被访问。
   protected(受保护);//被定义为受保护的类成员则可以被其自身以及其子类和父类访问。
   private(私有);//被定义为私有的类成员则只能被其定义所在的类访问。
   
   final;
       /*
         PHP 5 新增了一个 final 关键字。
         如果父类中的方法被声明为 final,则子类无法覆盖该方法。
         如果一个类被声明为 final,则不能被继承。
       */

OOP 思想

1.特点:
    - 封装:隐藏对象的属性和实现细节;
    - 继承:从一个基类得到一个或多个类的机制;
    - 多态:根据使用类的上下文来重新定义或改变类的性质或行为;
2.访问控制符
    public 全局,类内部、外部、子类都可访问
    protected 受保护 只有本类/子类可访问
    private 私有 本类内部可访问
3.类与对象
4.类中的属性
5.类中方法
6.构造方法

抽象类、接口使用场景

    abstract(抽象类)
        /*
        1、定义为抽象的类不能被实例化,只有抽象类中才可以写抽象方法;
        2、抽象方法只是声明,不能定义具体的功能实现;
        例如:数据库mysql、nosql等,通用的写到一块,写一个父类(抽象类),不同的东西在各个子类实现。
        */
    interface(接口)
        /*
        interface:接口    implements:实现
        1、接口中的方法都是抽象方法,所以abstract可以省略不写接口中的方法必须是public;
        2、接口中只能规定方法,不能写属性,可以写常量,一个类可以实现多接口,用逗号隔开;
        3、接口可以继承接口,但是里面的方法都要实现;
        4、接口是比抽象类还抽象,abstract(抽象类)可以有实现好的方法,interface(接口)不可以;
        */

Trait介绍

/*
    1、trait是php5.4新增。
    2、trait是为解决php单继承而准备的一种代码复用机制。
       trait解决了单继承的限制,使开发人员能够在不同的类中复用trait中的method。
       trait和class组合的语义定义了一种减少复杂性的方式,避免传统多继承的相关典型问题
    3、trait就是把复用代码写入到一个文件中,在类中通过use引入,然后使用$this调用。
    4、解决了父类臃肿的问题
    5、代码复用更加灵活。需用trait的类使用use关键字引入即可,做到了随机随用。
    6、可读性更强。使用trait后一眼就可以看出类中引用了哪些特性,如果trait名字起的好,
       可以正真做到见名知意。而在传统的代码中子类中根本看不出引入了哪些方法。
    7、耦合度低,随意组合,可读性高是以上3点的总结。
*/

echo、print、print_r区别

    1、echo是PHP语句, print和print_r是函数,语句没有返回值,函数可以有返回值;
       echo 输出一个或者多个字符串;
    2、print() 只能打印出简单类型变量的值(如int,string);
    3、print_r() 可以打印出复杂类型变量的值(如数组,对象);

__construct 与 __destruct 区别

    __construct:对象被创建的时候触发;
    __destruct:对象被销毁的时候触发;

__toString () 作用

    1__toString() 方法用于一个类被当成字符串时应怎样回应,例如 `echo $obj;` 应该显示些什么;
    2、必须返回一个字符串,否则将发出一条 `E_RECOVERABLE_ERROR` 级别的致命错误;
    3、不能在 __toString() 方法中抛出异常,这么做会导致致命错误;

单引号’与双引号” 区别

    1:双引号解释变量,单引号不解释变量,双引号里插入单引号,其中单引号里如果有变量的话,变量解释;
    2:双引号转义特殊字符(/r/n之类的),单引号不解释转义字符;
    3:效率,单引号被系统默认是普通字符串类型,会直接编译,
       但是双引号中有可能会存在变量和转义字符,所以通常会先遍历一遍字符串,
       将其中的变量编译完才输出;
    4:单引号的编译效率比双引号的快;

HTTP 状态码简介

    1**	信息。服务器收到请求,请继续执行请求。
    2**	成功。请求被成功接收及处理。
          200:成功,服务器已成功处理了请求,通常这标识服务器提供了请求的网页。
    3**	重定向。需要进一步操作来完成请求。
          301:错误主要是域名更换后,搜索引擎还在使用原有域名访问你的网站,
               搜索引擎知道你更换了域名,下次就会使用新域名来索引你的网站,
               当然你要告诉搜索引擎你的新域名是什么;
    4**	客户端错误。无法完成请求或请求包含语法错误。
          404:未找到,服务器找不到请求的网页,可以自定义页面展示。			
    5**	服务器错误。服务器在处理请求的过程中发生错误。
          500:服务器内部错误,服务器遇到错误,无法完成请求。
          501:尚未实施,服务器不具备完成请求的功能,eg:服务器无法识别请求方法时可能会返回此代码。
          502:错误网关,服务器作为代理网关或代理,从上游服务器收到无效响应。
          503:服务不可用,服务器目前无法使用(由于超载或停机维护)。通常,这只是暂时状态。
          504:网关超市,服务器作为网关或代理,但是没有及时从上游服务器收到请求。
          505HTTP版本不受支持,服务器不支持请求中所用的HTTP协议版本。