• php基础知识


    1、php嵌套模式

    <?php ... ?> <? ... ?> <% ... %> <script language="php"> ... </script> <?=$hello ?>

    2、php注释

    // 或 /* ... */ 或 #

    3、变量

    1、命名规则:(1)不能以数字开头;(2)不能使用运算符+-*/;(3)可以使用关键字;(4)区分大小写;(5)变量名称一定要有意义。$aaaBbbCcc
    2、$$four  //可变变量,很少用
    3、变量的引用赋值:$two = &$one
    4、变量的类型:int,bool,float(double,real),string;array,object;resource,null
    5、var_dump()//检验变量类型
    6、变量的声明
       $int = 10; //十进制声明
       $int = 045; //0开头是8进制
       $int = 0xff; //0x开头是16进制
       $float = 3.14E2 //3.14乘以10的二次方
       $str = <<<one
    ……
    one;//定界符声明字符串
       $str = `abc`; //反引号声明的字符串
    7、数据类型的强制转换:
       setType($aa,int)//强制转换成整型
       intval($aa);//强制转换成整型
       floatval($aa);//强制转换成浮点型
       stringval($aa);//强制转换成字符串
    8、声明类型的变量:$a = (int)”123abc”;
    9、与变量有关的函数:
       isset()   //判断变量是否存在 
       empty()   //判断变量是否为空
       unset()   //删除变量
       setType() //变量类型转换
       getType() //获取变量类型
       is_bool()
       is_int(),is_integer(),is_long()
       is_string()
       is_float(),is_double(),is_real()
       is_array()
       is_object()
       is_resource()
       is_null()
       is_scalar() //判断是否为标量(int,float,bool,string)
       is_numberic() //判断是否是数字
       is_callable() //判断是否为有效的函数名

    4、常量

    define("HOME","aaa");//其值只能是标量类型(int,string,bool,float)
    defined("HOME"); //判断常量是否存在,注意是defined,多个d
    M_PI        //3.14……
    __FILE__    //当前文件名
    __LINE__    //当前行
    __FUNCTION__//当前函数名
    __PHP__VERSION //php

    5、php运算符与表达式

    1、$a++,++$a,$a—,—$a 的区别
    2、逻辑运算符 &&和|| 的短路问题
    3、反引号:$str = `ipconfig /all`; //执行shell命令,并返回结果

    6、php流程控制

    1、如果判断范围用if……else……,如果单个值匹配用switch……case……
    2、for,while循环;

    7、php常用函数

        /*时间函数*/
        echo '<h4 style="color:#f00">时间函数</h4>';
        echo time().'<br />';//当前时间unix时间戳
         echo date("Y:m:d H:i:s").'<br />';//当前格式化时间
        
        /*字符串函数*/
        echo '<h4 style="color:#f00">字符串函数</h4>';
        $word = " abc d ef ";
        echo strlen($word).'<br />';//获取字符串长度  空格也算
        echo implode("-",array(1,2,3,4)).'<br />';//数组转换成字符串,用“-”连接
        print_r(explode("-","1-2-3-4"));//字符串转换成数组  以“-”分割
        echo '<br />';
        echo ltrim($word,'b').'<br />';//剔除左边空格
        echo rtrim($word,'b').'<br />';//剔除右边空格
        echo trim($word,'b').'<br />';//剔除两边空格
        echo substr($word,0,3).'<br />';//ab 截取字符串 若第二个参数为负数,则从倒数第几个开始取,但是截取规则还是从左到右
        echo str_replace("b","_",$word).'<br />';//查找与替换字符串
        echo strtoupper($word).'<br />';//小写转大写
        echo strtolower('ABCDEF').'<br />';//大写转小写
        echo ucfirst('abc').'<br />';//首字母转大写,只操作首字母
        echo htmlentities('<br /> &nbsp;').'<br />';//打印标签
        echo substr_count('abcdagca','a').'<br />';//返回第二个字符串在第一个字符串中出现的次数
        echo strpos('abcdagca','a').'<br />';//查找a在第一个字符串中第一次出现的位置,第一个位置为0
        echo strrpos('abcdagca','a').'<br />';//查找a在第一个字符串中最后一次出现的位置,第一个位置为0
        echo strstr('sddabdsabg','ab').'<br />';//截取ab以后的字符串(包括ab)
        echo strrchr('sdfabkjkabsdf','ab').'<br />';//截取最后一个ab以后的字符串(包括ab)
        echo addcslashes("abcdefghijklman","akd").'<br />';//查找字符串中akd,并且在前面加上
        echo str_pad('abc',10,'a',0).'<br />';//字符串填充函数: 把字符串abc左填充a到10位,0:左填充;1:右填充;2:两边填充  默认左填充
        echo strcmp('b','c').'<br />';//字符串比较函数:阿克斯码值,返回1  0  -1
        echo number_format(1235.3254,2,":",";").'<br />';//格式化数字函数: 2:保留两位小数,四舍五入 ::小数点用冒号表示,;:三位分隔符    

    8、php数组

    1、数组的遍历
    for($i=0; $i<count($arr); $i++){
        echo "$user[{$i}]=".$arr[$i]."<br>";
    }
    foreach($arr as $key=>$val){   
        echo $key."=========>".$val."<br>";
    }
    while($arr=each($user)){//$user是一个数组
        echo $arr["key"]."---->".$arr["value"]."<br>";
    }
    //list接收数组元素
    list($name, $age, $sex)=array("zansan", 10, "nnnnn");
    2、数组的处理函数
        /*常用数组函数*/  更多详情  http://www.shouce.ren/api/view/a/3635
        count($arr);//返回数组元素的个数 或sizeof()
        array_count_values($arr);//所有元素出现的个数 返回数组
        array_unique(array(0,1,2,1,2,3));//删除数组中重复元素,键值不重排,即键值不变 
         in_array('b',$arr);//判断b是否在数组中  返回1或0
        array_keys($arr);//返回数组里面的key 组成新的索引数组
        array_key_exists('k1',$arr);//判断k1这个键是否在数组里  返回1或0
        array_values($arr);//把数组转换成索引数组,键值从0开始
        key($arr);//返回当前指针所指向的键值   k0
        current($arr);//返回当前指针所指向的元素值   a
        each($arr)//当前指针所指向的元素和键值组成新的数组,并且指针下移    next($arr);//指针下移,然后返回该指针元素值
        prev($arr);//指针上移,然后返回该指针元素值  
        reset($arr);//指针重置,然后返回该指针的元素值  a
        end($arr);//指针移到最后,然后返回该指针的元素值  c
        array_push($arr,'d','e');//把d和e作为元素追加到$arr数组里,键值为索引最小数    返回值为数组长度  5
        array_unshift($arr,'t1','t2');//把t1、t2...作为元素插入到数组的前面,键值从0开始,后面的索引键值依次增加,关联键值不便,元素顺序不变   返回值为数组长度
        array_pop($arr);//删除数组中的最后一个元素,返回值为最后一个元素
        array_shift($arr);//删除数组中的第一个元素,返回值为第一个元素
        array_pad($arr,10,"t10");//数组用‘t10’作为元素添加到10个,键值自动累计
        sort($arr);//数组重新排序成索引数组,与array_values的区别是按照元素的阿克斯码排序
        rsort($arr);//数组重新排序成索引数组,与array_values的区别是按照元素的阿克斯码倒叙排序
        array_combine(array('a','b','c','d','e'),$arr);//改变数组的键值,元素个数必须一致
        array_merge($arr,array('a','b','c'));//合并数组
        array_slice($arr,2,1);//截取数组,从第3个开始取1个
        array_splice($arr,2,1);//截取出来的数组然后删除 原数组已经改变
        json_encode($arr);//把数组转换成json格式  
       array_flip($arr);//数组元素顺序反过来显示
    array_reverse($arr);//键值互换
        func_get_args() //获取函数的参数组成一个数组   
        func_num_args() //统计函数参数的个数      
        array_filter(arrar(),fun) //用回调函数过滤数组中的元素…
       array_walk(arrar(),fun) //数组中每个成员应用用户函数
       array_map(fun,arrar()) //将回调函数作用到给定数组的单元上
    3、数组的排序(一维数组)
        /**
        * sort 按数组的value升序排序
        * @ Tips key from 0,1... 键重新排,原有数组被改变
        * @ return Boolean 1 or 0
        **/
        $cars = array('v'=>"Volvo",'b'=>"BMW",'s'=>"SAAB");
        sort($cars);
        print_r($cars);//Array ( [0] => BMW [1] => SAAB [2] => Volvo )
        
        /**
         * rsort 按数组的value降序排序
         * @ Tips key from 0,1... 键重新排,原有数组被改变
         * @ return Boolean 1 or 0
         **/
        $cars = array('v'=>"Volvo",'b'=>"BMW",'s'=>"SAAB");
        rsort($cars);
        print_r($cars);//Array ( [0] => Volvo [1] => SAAB [2] => BMW )
        
        /**
         * asort 按数组的value升序排序
         * @ Tips 键不变,原有数组被改变
         * @ return Boolean 1 or 0
         **/
        $age=array("Steve"=>"37","Bill"=>"35","Peter"=>"43");
        asort($age);
        print_r($age);//Array ( [Bill] => 35 [Steve] => 37 [Peter] => 43 )
    
        /**
         * arsort 按数组的value降序排序
         * @ Tips 键不变,原有数组被改变
         * @ return Boolean 1 or 0
         **/
        $age=array("Steve"=>"37","Bill"=>"35","Peter"=>"43");
        arsort($age);
        print_r($age);//Array ( [Peter] => 43 [Steve] => 37 [Bill] => 35 )
    
        /**
         * ksort 按数组的key升序排序
         * @ Tips 键值不变,原有数组被改变
         * @ return Boolean 1 or 0
         **/
        $age=array("Bill"=>"35","Steve"=>"37","Peter"=>"43");
        ksort($age);
        print_r($age);//Array ( [Bill] => 35 [Peter] => 43 [Steve] => 37 )
    
        /**
         * krsort 按数组的key降序排序
         * @ Tips 键值不变,原有数组被改变
         * @ return Boolean 1 or 0
         **/
        $age=array("Bill"=>"35","Steve"=>"37","Peter"=>"43");
        krsort($age);
        print_r($age);//Array ( [Steve] => 37 [Peter] => 43 [Bill] => 35 ) 
    4、数组的排序(二维数组)
    <?php
    $arr = array(
            'd' => array('id' => 5, 'name' => 1, 'age' => 7),
            'b' => array('id' => 2,'name' => 3,'age' => 4),
            'a' => array('id' => 8,'name' => 10,'age' => 5),
            'c' => array('id' => 1,'name' => 2,'age' => 2)
    );
    //方法一:自定义排序方法
    function multi_array_sort($multi_array,$sort_key,$sort=SORT_ASC){
        if(is_array($multi_array)){
            foreach($multi_array as $row_array){
                if(is_array($row_array)){
                    $key_array[]=$row_array[$sort_key];
                }else{
                    return false;
                }
            }
        }else{
            return false;
        }
        array_multisort($key_array,$sort,$multi_array);
        return $multi_array;
    }
    echo '<pre>';
    print_r(multi_array_sort($arr,'id'));
    echo '</pre>';
    //方法二:推荐方法(手册)
    foreach($arr as $k=>$v){
        $name[$k]=$v['name'];
    }
    array_multisort($name,SORT_ASC,$arr);
    echo '<pre>';
    print_r($arr);
    echo '</pre>';
    
    /**
     * 多维数组根据value进行排序,value可能是number也可能是string
     */
    $a = array(
        '001'=>array("name"=>"LHL","age"=>"25","count"=>array(2,3)),
        '002'=>array("name"=>"XYQ","age"=>"22","count"=>array(3,1)),
        '003'=>array("name"=>"aNN","age"=>"24","count"=>array(1,2)),
    );
    
    // function my_sort($x,$y){//安装$value进行排序并且value is number
    //     return $x['count'][1]<$y['count'][1];
    // }
    function my_sort($x,$y){//安装$value进行排序并且value is string
        return strcasecmp($x['name'],$y['name']);
    }
    uasort($a,"my_sort");//usort():外层数组的键重排
    echo '<pre>';
    print_r($a);
    echo '</pre>';

    8、php面向对象

    1、魔术方法:在不同时刻为了完成某一功能自动调用的方法
    function __construct(){//构造方法 第一个调用的方法,初始化成员属性
    
    }
    
    function __destruct(){//析构方法 对象释放前最后调用的方法
    
    }
    //和封装有关的方法
    __get()//获取成员属性时自动调用的方法
    /*
    * private $name
    * 通过__get()方法可以外部调用 $name
    */
    private function __get($proName){
    return $this->$proName;
    }
    __set()//设置成员属性时自动调用的方法
    /*
    * private $name
    * 通过__set()方法可以外部设置 $name
    */
    
    private function __set($proName,$proValue){
    return $this->$proName=$proValue;
    }
    __isset()//在类外部使用isset($p->name)判断私有属性private $name是否存在时使用
    private function __isset($proName){
    return isset($this->$proName)
    }
    __unset()//删除私有成员的时候自动调用的方法
    private function __unset($proName){
    unset($this->$proName);
    }
     
    __call()//调用类中不存在的方法时调用该方法
    function __call($nethoName,$args){
    echo “你调用的方法{$methoName}参数”;
    print_r($args);
    echo “不存在”;
    }
     
    __toString()//echo $p = new className  使之返回一个字符串
    function __toString(){
    return “string”;
    } 
     
    __clone()//克隆对象$p1 = clone $p 时调用的方法。为复本初始化
    function __clone(){
    $this->name = “复本张三”;//$this 代表复本 $that 代表原本
    }
     
    __autoload() //自动加载,在类外部使用(加载类的时候使用很方便)
    function __autoload($className){
    include “./”.$className.”.class.php”;
    }
    $o = new One();//自动加载当前目录下的One.class.php这个类
    $t = new Two();//自动加载当前目录下的Two.class.php这个类
     
    //serialize()和unserialize()把对象转串行化和反串行化
    $str = serialize($p);//$p = new ClassName() 由此可以把$str(对象)写进文件或者数据库
    $unstr = unserialize($str);//通过$unstr->可以访问该类里面的属性和方法
     
    __sleep()//serialize()序列化时自动调用的方法,可以将一个对象部分串行化
    function __sleep(){
    return array("name","age");
    }
     
    __weakup()//unrialize()反序列化时自动调用的方法,即对象反序列号时初始化函数
    function __wakeup(){
    $this->name = "张三";
    $this->age = 20;
    }
    
     
    2、常用关键字 
    final:修饰类和方法,final修饰类不能继承,final修饰方法不能重载覆盖
    static:静态,修饰属性和方法。
    1、ClassName::$conunty 这样的方式访问静态属性
    2、self::$conunty   类内部访问
    3、static function funName(){//静态方法中不能访问非静态成员
    $this->$var//这种方法是错误的
    }
    const:只能修饰成员属性,在类中声明常量,用const。访问方式和static静态访问方式一样
     
    $this,selef,parent
     
    3、三大特性:封装、继承、多态
     
    //封装性 private public protected
     
    //继承性 
      extends ,private 子类不能继承使用  protected
      子类重载父类的方法:定义与父类相同的成员方法
    function say(){
    parent::say($a,$b)
    ……
    } 
    function __construct(){
    parent::__construct($a,$b)
    ……
    }
     
    4、抽象类、接口、多态  抽象类是一种特殊的类,接口是特殊的抽象类,多态会使用到抽象类或者接口
     
    抽象类:有abstract修饰的类;并且里面至少有一个抽象方法;抽象类不能实例化对象;要想使用抽象类,就必须用一个类去继承抽象类,而且必须重写抽象方法。
    抽象类和接口的作用是定义一些规范,让子类去继承
    abstract class Demo {//这是一个完整的抽象类
    var $name;
    abstract function test();//抽象方法,没有方法体
    function say(){
    }
    }
     
    class Hello extends Demo{//该类继承抽象类
    function test(){
    ……
    }
    }
     
    接口:接口中的方法必须都是抽象方法,方法不用abstract修饰;接口中的成员属性只能声明常量,不能声明变量;接口中的成员的访问权限必须都是public
    interface Demo{//接口的声明
    const HOST=”localhost”;
    function fun1();
    function fun2();
    }
    echo Demo::HOST;
     
    interface Demo2 extends Demo{//接口继承接口
    function fun3();
    function fun4();
    }
     
    interface Demo3{
    function fun5();
    function fun6();
    }
     
    class Hello{
     
    }
     
    class extends Hello implements Demo2,Demo3{//接口的实现、使用
    function fun1(){
     
    }
    function fun2(){
     
    }
    function fun3(){
     
    }
    function fun4(){
     
    }
    function fun5(){
     
    }
    function fun6(){
     
    }
    }
     
    多态:

    interface Test{
            function aaa();
            function bbb();   
        }
        class One implements Test{
            function aaa(){
                echo "aaaaaaaaaaa";   
            }
            function bbb(){
                echo "bbbbbbbbbbbb";   
            }
        }
        class Two implements Test{
            function aaa(){
                echo "111111";   
            }
            function bbb(){
                echo "222222";   
            }
        }
        $a = new One;//Two
        $a->aaa();

        $a->bbb();

    9、php正则表达式:

    //preg_match 单个匹配,如果有一个则匹配成功
    if (preg_match ("/php/i", "PHP is the web scripting language of choice.")) {
        print "A match was found.";
    } else {
        print "A match was not found.";
    }
    
    //preg_match_all  匹配所有  int preg_match_all ( string $pattern , string $subject , array $matches [, int $flags ] )
    
    //preg_replace      mixed preg_replace ( mixed $pattern , mixed $replacement , mixed $subject [, int $limit ] )
    //在 subject 中搜索 pattern 模式的匹配项并替换为 replacement。如果指定了 limit,则仅替换 limit 个匹配,如果省略 limit 或者其值为 -1,则所有的匹配项都会被替换。
    
    //str_ireplace   忽略大小写替换

    10、文件处理:详解文件处理类

    If the copyright belongs to the longfei, please indicate the source!!!
  • 相关阅读:
    Vue生命周期
    事件
    改变this指向
    全屏要素
    微信小程序
    编程心得
    设计模式-单例与实例化
    第五节课 课堂总结
    作业四 分支结构
    课堂总结
  • 原文地址:https://www.cnblogs.com/longfeiPHP/p/4685602.html
Copyright © 2020-2023  润新知