【9】WEB安全学习----PHP基础语法二

目录

一、流程控制

1、IF语句

2、预定义变量

3、Switch语句

4、For循环

5、While循环

二、数组

创建数组

使用数组

多维数组

遍历数组

数组运算符

三、系统函数

字符串函数

数学函数

日期时间函数

四、自定义函数

定义函数

函数的参数

变量的作用域

传值和传引用

变量函数

回调函数

递归函数

匿名函数

可变参数


一、流程控制

1、IF语句

<?php
    #IF语句第一种形式 if
    if(True){
        echo 'hello world<br />';
        echo 'php is if';
    }

    #IF语句第二种形式 if-else
    if(True){
        echo 'True';
    }else {
        echo 'False';
    }

    #IF语句第三种形式  if-elseif-else
    $int1 = 5;
    if($int1 === 1){
        echo '1';
    }elseif($int1 ===2){
        echo '2';
    }elseif($int1 ===3){
        echo '3';
    }else{
        echo 'hello';
    }

    #获取星期几例子   输出 2018年09月01日 14:58:52星期六
    header('content-type:text/html;charset=utf8'); #有中文,设置编码
    echo @date('Y年m月d日 H:i:s'); #加上错误抑制符@,就不会显示日期警告
    $a = @date('w');
    if($a === '1'){
        echo '星期一';
    }elseif($a === '2'){
        echo '星期二';
    }elseif($a === '3'){
        echo '星期三';
    }elseif($a === '4'){
        echo '星期四';
    }elseif($a === '5'){
        echo '星期五';
    }elseif($a === '6'){
        echo '星期六';
    }elseif($a === '0'){
        echo '星期日';
    }else{
        echo '错误';
    }
?>

2、预定义变量

  1. _POST:接收表单以POST方式发送的数据
  2. _GET:接收以?形式传参的数据
  3. _FIFES:文件上传变量
  4. _SERVER:服务器和执行环境变量
  5. _ENV:环境变量
  6. _SESSION:会话变量
  7. COOKIE:HTTP Cookie
  8. REQUEST:$_GET+$_POST+$_COOKIE
  9. GLOBALS:超全局变量,在全部作用域中始终可用的内置变量
  10. $php_errormsg:前一个错误信息
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>POST、GET和REQUEST例子</title>
</head>
<body>
    <form action="" method="post">
        姓名:<input type="text" name="name" id="">
        <input type="submit" name="submit" value="提交">
    </form>
    <a href="http://127.0.0.1/bj/index.php?name=php">GET提交</a>
    <?php
        if(isset($_POST['submit'])){ #使用isset()函数,检测变量是否被设置值
            $name=$_POST['name'];
            echo '欢迎'.$name;
        }
        if(isset($_GET['name'])){
            echo '欢迎'.$_GET['name'];
        }
        echo $_REQUEST['name'];
    ?>
</body>
</html>

3、Switch语句

<?php
    /*
    switch(exp){
        case 值1:
            代码段;
            break;
        case 值2:
            代码段;
            break;
        default:
            代码段;
            break;
    }
     */
    header('content-type:text/html;charset=utf-8');
    $date=@date('w');
    switch($date){
        case '1':
            echo '星期一';
            break;
        case '2':
            echo '星期二';
            break;
        case '3':
            echo '星期三';
            break;
        case '4':
            echo '星期四';
            break;
        case '5':
            echo '星期五';
            break;
        case '6':
            echo '星期六';
            break;
        default:
            echo '星期日';
            break;
    }
?>

4、For循环

<?php
    for($i=1;$i<10;$i++){
        echo '<br />';
        for($j=1;$j<=$i;$j++){
            echo $j.'*'.$i.'='.$i*$j."  ";
        }
    }
    #continue:跳过本次循环,继续下次循环
    #break:跳出循环
?>

5、While循环

<?php
    $i=1;
    while($i<10){
        $j=1;
        echo '<br />';
        while($j<=$i){
            echo $j.'*'.$i.'='.$i*$j.'  ';
            $j++;
        }
        $i++;
    }

    #do-while循环,无条件执行一次循环体代码
    do{
        echo 'aaaa';
    }while(False)
?>

二、数组

创建数组

<?php

#一、通过array()函数声明数组
    $array1=array(); //声明一个空数组
    var_dump($array1); //array(0) { }
    echo gettype($array1); //array
    var_dump(is_array($array1)); //bool(true)
    $array2=array(1,2.3,'hello','name'=>'php'); //定义混合数组
    var_dump($array2); //数组下标从0开始,数组分为索引数组和关联数组
    /*
  array(4) {
  [0]=>
  int(1)
  [1]=>
  float(2.3)
  [2]=>
  string(5) "hello"
  ["name"]=>
  string(3) "php"
}
     */

#二、动态创建数组  连续索引数组
     $array1[]=1;
     $array1[]=3.14;
     $array1[]='aaa';
     var_dump($array1);
    #手动指定数组下标
    $array2[0]=1;
    $array2[1]=3.14;
    $array2[2]='aaa';
    var_dump($array1);
    #动态创建关联数组
    $arr1['name']='xiaoming';
    $arr1['age']=20;
    $arr1['sex']='男';
    $arr1[]=2;
    var_dump($arr1);

#三、快速创建索引数组
    $arr=range(1,10);
    var_dump($arr); //array(10) { [0]=> int(1) [1]=> int(2) [2]=> int(3) [3]=> int(4) [4]=> int(5) [5]=> int(6) [6]=> int(7) [7]=> int(8) [8]=> int(9) [9]=> int(10) }
    
    $arr1=range(1,10,2); //指定步长
    var_dump($arr1); //array(5) { [0]=> int(1) [1]=> int(3) [2]=> int(5) [3]=> int(7) [4]=> int(9) }
    
    #通过compact()函数快速创建关联数组
    $name='xiaoming';
    $age=20;
    $addr='CQ';
    $arr1=compact('name','age','addr');
    print_r($arr1); //Array ( [name] => xiaoming [age] => 20 [addr] => CQ )
?>

使用数组

<?php

#对数组进行增删改查

$arr['name']='php';
$arr['age']=20;
$arr['addr']='CQ'; //增:
echo $arr['name'];  //查: 通过指定键名获取键值  php
$arr['name']='PHP';  //改: 对数组内元素进行修改,只需要覆盖以前的键值即可
echo $arr['name']; //PHP
unset($arr['name']);  //删:使用unset()函数删除数组元素
print_r($arr);
unset($arr); //删除整个数组
?>

多维数组

<?php
    #使用array()函数创建多维数组
    $arr=array(
        array(1,2,3),
        array(4,5,6)
    );
    print_r($arr); //Array ( [0] => Array ( [0] => 1 [1] => 2 [2] => 3 ) [1] => Array ( [0] => 4 [1] => 5 [2] => 6 ) )
    #使用动态创建多维数组
    $arr1[0]['dd']='php'; //创建一个二维数组
    $arr1[0]['name']='hello';
    print_r($arr1); 
    /*
    Array
(
    [0] => Array
        (
            [dd] => php
            [name] => hello
        )

)
    */
    echo $arr1[0]['name'];  //取值
?>

遍历数组

<?php
    #格式为:foreach($array as key=>value)
    $arr1[]='aaa';
    $arr1[]='bbb';
    $arr1[]='ccc';
    $arr1[]='ddd';
    foreach($arr1 as $key){ //只取key键名
        echo $key.'<br />';
    }
    /*
aaa
bbb
ccc
ddd
    */

    $arr2['name']='PHP';
    $arr2['age']=20;
    $arr2['addr']='CQ';
    foreach($arr2 as $key=>$value){ //取key和value
        echo $key.'=>'.$value.'<br />';
    }
    /*
name=>PHP
age=>20
addr=>CQ
    */


    #生成二维数组
    $arr1[]=array('name'=>'php','age'=>20,'addr'=>'CQ');
    $arr1[]=array('name'=>'C++','age'=>18,'addr'=>'SH');
    $arr1[]=array('name'=>'JAVA','age'=>29,'addr'=>'CD');
    print_r($arr1);
    /*
    Array
(
    [0] => Array
        (
            [name] => php
            [age] => 20
            [addr] => CQ
        )

    [1] => Array
        (
            [name] => C++
            [age] => 18
            [addr] => SH
        )

    [2] => Array
        (
            [name] => JAVA
            [age] => 29
            [addr] => CD
        )

)
    */
    foreach($arr1 as $key=>$value){ //遍历二维数组
        echo $value['name'].'<br />';
        echo $value['age'].'<hr />';
    };
?>

数组运算符

+:合并数组,如果都有相同的键则取左边的

==:具有相同的键值则为True

===:具有相同的键值且类似和顺序都相同则为True

!=:具有不相同的键值则为True

!==:具有不相同的键值且类似和顺序都相同则为True

<?php
    $arr1=array(1,2,3,4);
    $arr2=array('aa','bb');
    $arr3=$arr1+$arr2;
    print_r($arr3); //Array ( [0] => 1 [1] => 2 [2] => 3 [3] => 4 )
?>

三、系统函数

字符串函数

长度:strlen($String)  得到字符串长度

echo strlen('hello你好'); //11 在UTF-8中,一个中文占3个长度

字符串查找:strpos($string,$serch[,$offset])  在指定字符串中查找目标字符串第一次出现的位置

echo strpos('hello','l'); //2

字符串查找:stripos($string,$serch[,$offset])  忽略大小写的去查找

echo stripos('heLlo','l'); //2

字符串替换:str_replace($search,$replace,$string)  替换字符串    str_ireplace():忽略大小写进行替换

echo str_replace('a','1','aaabbbccc'); //111bbbccc

字符串大小写转换:strtolower() 到小写、strtoupper() 到大写

echo strtolower('ABC'); //abc
echo strtoupper('abc'); //ABC

字符串截取:substr($string,$start[,$length])  截取指定长度字符串

echo substr('abcdefg',3); //defg
echo substr('abcdefg',3,2); //de

字符ASCII:ord()    chr()

echo ord('a'); //97
echo chr(98); //b

加密:md5()、sha1()

echo md5('admin'); //21232f297a57a5a743894a0e4a801fc3
echo sha1('admin'); //d033e22ae348aeb5660fc2140aec35850c4da997

字符串过滤:

1、trim() 删首尾空

echo trim(' a bc ');  //a bc

2、strip_tags() 过滤字符串中HTML标记

 echo strip_tags("<html><h1>hello</h1></html>"); //hello

3、addslashes() 使用反斜线引用字符串中特殊字符

 echo addslashes("a'");  //a\'

4、htmlentities() 

echo htmlentities('<script>alert(/"xs"/)</script>'); //&lt;script&gt;alert(/&quot;xs&quot;/)&lt;/script&gt;gt;

5、nl2br() 将字符串中的\n用<br/>代替

echo nl2br("hello\nworld"); //hello<br />world

字符串比较:strcmp() 比较两个字符串大小

echo strcmp('aaa','bbb'); //-1

分割文本:expload($delimiter,$string) 将指定字符串拆分为数组

print_r(explode('#','aaa#bbb#ccc')); //Array ( [0] => aaa [1] => bbb [2] => ccc )

合并文本:join($delimiter,$array)   将数组连接成字符串

$arr1=array('aaa','bbb','ccc');
echo join('-',$arr1); //aaa-bbb-ccc

反转字符:strrev()

echo strrev('abc'); //cba

数学函数

求绝对值:abs($number)

四舍五入:round($number,$percision)

幂运算:pow($base,$exp)

平方根:sqrt($number)

求最大值:max($va1,$va2......)

求最小值:min($va1,$va2......)

产生随机数:mt_rand($min,$max)

日期时间函数

得到当前时间戳:time()

echo time();//1535887462

得到当前服务器时间:date($format[,$time])

echo date('Y-m-d'); //2018-09-02

四、自定义函数

定义函数

<?php
    #函数的定义
    function fun1($int1,$int2){
        return $int1+$int2;
    }
    echo fun1(3,5); //函数的调用
?

函数的参数

<?php
    #函数的参数分为2种:形参和实参
    #形参有2种:必选参数和可选参数
    function fun1($str1,$str2='php'){
        return $str1.' '.$str2;
    }
    echo fun1('hello'); //hello php
    echo fun1('hello','world'); //hello world
?> 

变量的作用域

<?php
    #变量的作用域分为:局部变量和全局变量
    #局部变量又分为:动态变量和静态变量
    function test(){
        $i=1; //局部动态变量,函数执行完就释放
        $i++;
        echo $i.'<br/>';
        static $a=1; //局部静态变量,函数执行完保存在静态内存中
        $a++;
        echo $a.'<br/>';
    }
    test(); //2 2
    test(); //2 3
    test(); //2 4

    $str1='php';
    function test1(){
        global $str1;  //函数内不能直接调用全局变量,如果要使用,进行global关键字实现
        echo $str1; //php
    }
    test1();
?> 

传值和传引用

<?php
    #传值在函数体内对变量更改不影响变量本身
    #传引用在函数体内对变量更改影响变量本身
    $str1='php';
    function test($str){
        $str='hello';
        echo $str; //hello
    }
    test($str1);
    echo $str1; //php    直接传值,不会影响原变量

    function test1(&$str){
        $str='hello';
        echo $str; //hello
    }
    test1($str1);
    echo $str1; //hello   传引用,会影响变量本身
?>

变量函数

<?php
    #将函数名称赋值给变量,调用的时候通过变量名称加上小括号的形式进行调用
    $md51='md5';
    echo $md51('admin');  //21232f297a57a5a743894a0e4a801fc3

    function test(){
        echo 'hello php';
    }
    $test1='test';
    $test1(); //hello php
?>

回调函数

<?php
    #自定义回调函数
    function test($str){
        echo 'hello '.$str;
    }
    function callback($call,$str1){
        $call($str1);
    }
    callback('test','php'); //hello php  把函数当作参数传递

    #使用call_user_func()进行调用
    call_user_func('test','php'); //hello php
    

?>

递归函数

<?php
    #函数自己调用本身
    function test($i){
        echo $i.'<br />';
        $i++;
        if($i<=10){ //递归函数一定要有结束条件
            test($i);
        }
    }
    test(1); //输出1 2 3 4 5 6 7 8 9 10  和循环类似
?>

匿名函数

<?php
    #匿名函数也叫闭包函数,允许临时创建一个不指定名称的函数
    $test=function($str1){
        echo 'hello '.$str1;
    };
    $test('php');  //匿名函数使用变量函数来进行调用  hello php
?>

可变参数

<?php
    #func_num_args() 得到函数参数个数
    #func_get_arg()  得到函数参数
    #func_get_args()  得到函数参数数组形式
    function test(){
        echo func_num_args();  //5
        echo func_get_arg(1);  //2  参数下标和数组一样,从0开始
        $arr1=func_get_args(); //Array ( [0] => 1 [1] => 2 [2] => 3 [3] => 4 [4] => 5 )
        foreach($arr1 as $key){
            echo $key;  //12345 得到每个参数值
        }
    };
    test(1,2,3,4,'5'); 

?>

猜你喜欢

转载自blog.csdn.net/a15803617402/article/details/82287868