• 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!!!
  • 相关阅读:
    HDU 5791 Two (DP)
    POJ 1088 滑雪 (DPor记忆化搜索)
    LightOJ 1011
    POJ 1787 Charlie's Change (多重背包 带结果组成)
    HDU 5550 Game Rooms (ccpc2015 K)(dp)
    HDU 5542 The Battle of Chibi (ccpc 南阳 C)(DP 树状数组 离散化)
    HDU 5543 Pick The Sticks (01背包)
    HDU 5546 Ancient Go (ccpc2015南阳G)
    NB-IoT的DRX、eDRX、PSM三个模式 (转载,描述的简单易懂)
    MQTT 嵌入式端通讯协议解析(转)
  • 原文地址:https://www.cnblogs.com/longfeiPHP/p/4685602.html
Copyright © 2020-2023  润新知