PHP 基础/练习

news2024/11/15 15:57:02

练习

成绩定级

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>成绩定级脚本</title>
</head>
<body>
    <form method="post">
        输入成绩:
        <input type="text" name="score">
        <input type="submit">
    </form>
    <?php
        @$score=$_POST["score"];
        if($score==NULL){
        }else{
            if($score>=60){
                echo"congratulations";
            }else{
                echo "sorry";
            }
        }
    ?>
</body>
</html>

image-20231020144537911

image-20231020144552072

验证可变变量

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>The person around me</title>
</head>
<body>
    <?php
        $gaopeng="favorite";
        $favorite="gaopeng_love_eating_dick";
        echo $$gaopeng;
    ?>
</body>
</html>

在这里插入图片描述

九九乘法表

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>99 乘法表</title>
</head>
<body>
    <?php
        echo"<table border=1>";
        for ($i = 1; $i < 10; $i++) {
            echo "<tr>";
            for ($j = 1; $j <= $i; $j++) {
                echo "<td>";
                echo "{$j}"."*"."{$i}"."="."{$j}"*"{$i}";
                echo "</td>";
            }
            echo "</tr>";
        }
        echo"</table>";
    ?>
</body>
</html>

image-20231020150101748

PHP 基础

概述

  • 在PHP 文件中,可以与HTML 和JavaScript 混编。

  • 开始标记<?php 表示进入PHP 模式,结束标记?>,标识退出PHP 模式。

  • PHP 模式之外的内容会被作为字符输出到浏览器中。

  • PHP 在服务端执行,HTML 和 JS 在浏览器执行

  • HTML 或JavaScript 对于PHP 来说就是纯文本字符串

  • phpinfo

    安全问题:如果是一个在线的网站能够看到phpinfo 页面,说明存在敏感信息泄露漏洞,这个漏洞需要体现在后面的渗透测试报告中。

    <?php phpinfo()?>
    

    image-20231020092817786

基础语法

PHP 开始标记

<?php

PHP 结束标记

?>

指令分隔符

分号;,代表一句PHP 代码的结束。

注释

  • 单行注释

    该行 // 后的内容为注释内容

    phpinfo();  //  该函数会显示PHP 配置信息
    
  • 多行注释

    /* 开始,*/ 结束

    /*
        这是多行注释!
        以下语句表示PHP 配置信息
    */
    phpinfo();
    

空白字符

  • 空白符包括:

    空白字符表达
    空格
    TAB 制表符\t
    回车换行\r\n
    换行也可以在输出的字符中输出 <br>

    这些空白字符在PHP 中都是无关紧要的,可以将一个语句展开成任意行,或者紧缩在一行,空格与空行的合理运用可以增强代码的清晰性与可读性,如果运用不合理反而会对阅读产生负担!

    但是,不能是用空白符打断 PHP 的关键字,例如函数名,语句名,变量名,类名,方法名等等。

  • 例,不打断关键字 phpinfo

    image-20231020094203779

    依旧可执行

  • 例,打断关键字 phpinfo

    image-20231020094334750

错误级别

  • Notice、Warning 不会打断 PHP 运行
  • Error 会直接导致 PHP 程序结束运行

变量

变量的声明、使用、释放

变量定义

  • 形式

    $ + 变量名;
    
  • 严格区分大小写

    $name;
    $Name;
    $NAME
    //三个变量不是同一个变量
    
  • 字母、数字、下划线组成,不能以数字开头,不能包含其他字符(空白字符、特殊字符)

  • 驼峰式命名法、下划线式命名法

    $first_name;
    $firstName;
    $FirstName;
    
  • 标识符(关键字)尽量不作为变量名

变量的赋值、使用

  • echo 输出字符串

    <?php
    $username="gjl";
    echo $username;
    
    //在网页输出 gjl
    ?>
    

变量的释放

  • unset()函数

    unset($变量名);

    <?php
    $username="gjl";
    unset($username);
    echo $username;
    
    //报错Notice: Undefined variable: username in E:\phpstudy\WWW\test.php on line 4
    //未定义变量
    ?>
    

可变变量

  • 可变变量:

    一个变量的名字可以动态设置和使用

    也是 php 中变量覆盖漏洞的原因之一

    定义:

    $$
    
  • 使用举例

    <?php
    $username="gjl";
    $gjl="GuoJialiang";
    echo $$username;
    //输出 GuoJialiang
    //$($username)
    ?>
    
  • 应用

    <?php
    $username="gjl";
    $gjl="GuoJialiang";
    $$username="liang";
    echo $gjl;
    //输出 liang
    ?>
    

变量类型

  • 具有相同类型的数据才能相互操作

输出变量类型

  • 将变量类型输出使用函数 var_dump()

    <?php
    $name = "ZhangSan";
    var_dump($name);
    //输出 string(8) "ZhangSan"
    //长度为8的字符串“ZhangSan”
    ?>
    
    <?php
    $sex = true;
    var_dump($sex);
    $age = 24;
    var_dump($age);
    $score = 59.9;
    var_dump($score);
    
    //输出 bool(true) int(24) float(59.9) 
    ?>
    

bool

  • true/false

    进行 if 判断的时,候如果表达式不是布尔类型的值,会自动进行类型转换,将其它类型的值转换成布尔值,以下值被认为是false,其他大部分的值则被认为是true

    bool(false)        // $flag = 
    int(0)             // 0
    float(0)           // 0.0
    string(0)""        // ""
    string(1)"0"       // "0"
    array(0){}         // array()
    NULL               // NULL
    

int

  • 整型,存储整数

    $age = 24;
    var_dump($age);
    // int(21)
    

float

  • 浮点型,包含小数的数

    $score = 59.9;
    var_dump($score);
    // float(59.9)
    

string

  • 字符串,可以使用单引号、双引号、定界符三种方法进行定义
单引号
  • 单引号定义的字符串不能再包含单引号,如果必须使用单引号则需要用反斜杠 \ 进行转义 \'

    <?php
    $welcome = 'welcome \'ZhangSan\'';
    echo $welcome;
    //输出 welcome 'ZhangSan'
    ?>
    
  • php 不会解析单引号中的变量

    <?php
    $name = 'zhangSan';
    $msg = 'welcome $name';
    echo $msg;
    //输出 welcome $name
    ?>
    
双引号
  • 可以包含单引号,无须转义,但包含双引号时需要转义

    php 会解析双引号间的变量

    <?php
    $name = "zhangSan";
    $msg = "welcome $name";
    echo $msg;
    //输出 welcome zhangSan
    ?>
    
  • 双引号中要解析的变量通常要用 {} 括起来

    <?php
    $name = "zhangSan";
    $msg = "welcome {$name}";
    echo $msg;
    //输出 welcome zhangSan
    ?>
    
定界符
  • 使用情景

    当需要定义大段字符串时,并且该字符串出现大量特殊字符(包括反引号、双引号等)

  • 定界符定义字符串中的单双引号、大部分特殊字符不需要转义

  • <<< 标志 表示定界符开始,同样的标志;为结束标识符,定界符结束要顶格,分号之后的此行不可有任何字符(包括空字符)

  • 定界符中的标志建议使用纯大写字母

  • 定界符中的 $ 同样会被识别为变量,变量名要用 {} 括起来

    <?php
    
    $name = "gjl";
    $msg = <<<GJL
    <h1>My Name is <span style = "color:pink">{$name}</span>!</h1>
    <script>
        console.log( 'This message is from info.php! ")
    </script>
    GJL;
    //若结束符后输入任何字符(包括空字符)则会报错Parse error: syntax error, unexpected $end
    echo $msg;
    ?>
    

    输出效果

    image-20231020095700962

字符串拼接
  • 在php中 . 表示拼接

    $a.$b

    <?php
    $name = "zhangSan";
    $message = "welcome,";
    echo $message.$name;
    //输出 welcome,zhangSan
    ?>
    

常量

在php脚本执行期间,常量一旦本定义,就不能被改变或取消定义,常量的作用域是全局,有 bool , int , float , string 类型

自定义常量

  • 按照惯例常量标识符使用大写定义

  • 使用函数 define() 定义

    <?php
    define("USERNAME","GJL");
    //给常量 USERNAME赋值 GJL
    echo USERNAME;
    //输出结果 GJL
    ?>
    

    尝试对其赋值报错

    <?php
    define("USERNAME","GJL");
    USER
    echo USERNAME;
    ?>
        
    // Parse error: syntax error, unexpected T_ECHO in E:\phpstudy\WWW\php\test.php on line 13
    

预定义常量

总览

  • PHP已经定义好的,可以直接使用的常量,一般代表特殊含义。

    魔术常量是预定义常量中特殊的一类

    常量名常量值
    __FILE__当前文件名,完整路径
    __LINE__当前行号
    __FUNCTION__当前函数名
    __CLASS__当前的类名
    __NETHOD__当前对象的方法名
    PHP_OSUNIX | WINNT | Darwin
    PHP_VERSION当前 PHP 的版本
    DIRECTORY_SEPARATOR\/,根据操作系统决定目录的分隔符

使用

__FILE__

当前文件名,完整路径

<?php
echo __FILE__;
//输出效果 E:\phpstudy\WWW\test.php
?>
__LINE__

当前行号

<?php
echo __LINE__;
//输出效果 2
?>
PHP_OS

操作系统

<?php
echo PHP_OS;
//输出效果 WINNT
?>
PHP_VERSION

当前 PHP 的版本

<?php
echo PHP_VERSION;
//输出效果 5.3.29
?>
DIRECTORY_SEPARATOR

当前目录的分隔符

<?php
echo DIRECTORY_SEPARATOR;
//输出效果 \
?>

常见的运算符

算数运算符

  • 除加 +-*/ 取余 %

    $a$b 的运算

    运算符计算结果
    -$a取反$a 的负值
    ++$a前加$a 的值+1,然后返回 $a
    $a++后加返回 $a,然后将 $a 的值+1
    --$a前减$a 的值-1,然后返回 $a
    $a--后减返回 $a,然后将 $a 的值-1

字符串运算符

  • 字符串运算符用来拼接字符串

    • JS 语言中,字符串拼接用 + ,预算符 . 的作用是访问对象中的属性或方法

    • PHP 中使用 . 进行字符串拼接。PHP 中 . 也叫连接运算符

      <?php
      $name = "Jucy";
      $str = "hello,";
      echo $str.$name;
      //输出效果 hello,Jucy
      ?>
      

赋值运算符

  • 包括 = , += , -= , *= , /= , %= , .=

  • 解释 :$a ?= $b$a = $a ? $b

  • .=

    <?php
    $a = "hello,";
    $b = "LiHua";
    $a .= $b;
    echo $a;
    //输出 hello,LiHua
    ?>
    
  • 示例

    <?php
    $a = 5;
    $b = 3;
    $a *= $b;
    echo $a;
    // 输出结果 15
    //解释 第四行代码即 $a = $a * $b
    ?>
    

比较运算符

  • 运算结果为布尔类型

    truefalse

运算符说明备注
==等于执行==运算时要求运算符两边的数据类型一致
自动强制类型转换
===全等全等判断时若两边数据类型不同则直接返回false
!=不等
<>不等
!==不全等
<小于
>大于
<=小于等于
>=大于等于
<?php
$a = 3;
$b = 3;
$c = '3';
$j1 = $a == $b;
echo var_dump($j1);
//输出 bool(true)
$j2 = $a === $b;
echo var_dump($j2);
//输出 bool(true)
$j3 = $a == $c;
echo var_dump($j3);
//输出 bool(true)
$j4 = $a === $c;
echo var_dump($j4);
//输出 bool(false)
?>

逻辑运算符

逻辑运算符例子解释运算符规则
and
&&
$a and $b
$a && $b
逻辑"与"
or
`
`$a or $b
`$a
xor$a xor $b逻辑"异或"相同为假,不同为真
!!$a逻辑"非"

其他运算符

运算符名称举例解释
?:三目运算$a > $b ? $a : $b如果 $a > $b 是真值则返回 $a(前)
如果 $a > $b 是假值则返回 $b(后)
``反引号(esc键下方)自动调用系统命令
@错误屏蔽屏蔽表达式可能发生的错误
  • ?:

    判断条件 ? true : false
    
    <?php
    $a = 10;
    $b = 20;
    $max = $a > $b ? $a : $b;
    echo $max;
    //输出结果 20
    //$a > $b是假值,返回$b
    ?>
    
  • ``

    <?php
    $str = "chcp65001&&ipconfig";
    echo `$str`;
    ?>
    

    输出

    image-20231020114144854

    格式化输出

    <?php
    $str = "ipconfig";
    echo '<pre>'.`$str`;
    ?>
    

    输出效果

    image-20231020114153553

  • @

    <?php
    echo $username;
    //报错 Notice: Undefined variable: username in E:\phpstudy\WWW\test.php on line 2
    echo @$username;
    //不会报错
    ?>
    

流程控制

顺序执行

  • 自上而下顺序执行

    默认

    <?php
    echo "1";
    echo "<br />";
    echo "2";
    echo "<br />";
    echo "3";
    echo "<br />";
    ?>
    

分支执行

  • 根据表达式的值是否为 True 选择性执行代码

  • 主要通过 if 和 switch 实现

  • 进行 if 判断的时,候如果表达式不是布尔类型的值,会自动进行类型转换,将其它类型的值转换成布尔值,以下值被认为是false,其他大部分的值则被认为是true

    bool(false)
    int(0)
    float(0)
    string(0)""
    string(1)"0"
    array(0){}
    NULL
    

if 语句

  • 语法

    if(//判断条件){
        //语句块1
    }elseif(//判断条件2){
        //语句块2
    }else{
        //语句块3
    }
    //判断条件为True则执行语句块1,否则执行语句块2
    

    <?php
    $score = 99;
    if(60 <= $score && $score < 90){
    	echo "ok";	
    }elseif($score >=90){
    	echo "nb";
    }else{
        echo "lj";
    }
    //输出 nb
    ?>
    

switch 语句

  • 当需要多项分支结构,并且判断条件是具体某个值,此时大多使用 switch 结构

    switch(判断条件){
        case1:
            语句块;
            break;
        case2:
            语句块;
            break;
        default:    //默认,相当于if中的else
            语句块;
            break;
    }
    

    <?php
    $day = 1;
    switch($day){
        case 1:
            echo "Monday";
            break;
        case 2:
            echo "Tuesday";
            break;
        case 8:
        case 9:
            echo "gun";
            break;
    }
    //输出 Monday
        ?>
    
  • 注意

    • 每个 case 语句都需要加一个 break;
    • case表达式的值最好是整型或字符串
    • 如果某个 case 后没有接语句块,该判断条件要执行的语句块与下一判断条件所要执行的语句块相同
    • case 后的语句块不需要用 {} 括起来

循环执行

while 循环

  • 语法

    while(表达式){
        //循环体
    }
    

    当表达式为 True 时执行循环体,当循环体执行完一遍时,返回到 while 后的表达式继续判断表达式的值是否为 True ,如果还是 True 则继续循环,直到这个表达式的值为 False ,则该 while 循环结束

  • 举例

    输出 1 到 100 数字

    <?php
    $i = 1;
    while($i <= 100){
        echo $i."<br />";
        $i++;
    }
    ?>
    

do while 循环

  • 语法

    <?php
        do{
            //循环体
        }while(条件)
    ?>
    
  • 举例

    输出 1 到 100 数字

    <?php
        $i = 1;
        do{
            echo $i."<br />";
            $i ++;
        }while($i <= 100)
    ?>
    

for 循环

  • 语法

    for(计数器;判断条件;自增或自减){
        //循环体
    }
    
  • 举例

    输出 1 到 100 数字

    <?php
        for($i=1;$i<=100;$i++){
            echo $i."<br />";
        }
    ?>
    

特殊的流程控制语句

break 语句

  • 用于 switch,while,do...while,foreach 等的终端。后面可以接上一些数字表示跳出几层循环。默认不加就是跳出当前循环。

continue

  • 只能用于循环语句,轮空本次循环

exit 函数

  • 结束当前 PHP 脚本执行,同 die() 语句

    exit 中可以输入语句进行输出

    exit("php is over")
    

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1114008.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Windows 事件日志监控

Windows 事件日志是记录 Microsoft 系统上发生的所有活动的文件&#xff0c;在 Windows 环境中&#xff0c;将记录系统上托管的系统、安全性和应用程序的事件&#xff0c;事件日志提供包含有关事件的详细信息&#xff0c;包括日期、时间、事件 ID、源、事件类型和发起它的用户。…

spring cloud Eureka集群模式搭建(IDEA中运行)

spring cloud Eureka集群模式搭建&#xff08;IDEA中运行&#xff09; 新建springboot 工程工程整体目录配置文件IDEA中部署以jar包形式启动总结 新建springboot 工程 新建一个springboot 工程&#xff0c;命名为&#xff1a;eureka_server。 其中pom.xml文件为&#xff1a; …

el-input无法输入的问题和表单验证失败问题(亲测有效)-开发bug总结4

大部分无法输入的问题&#xff1a;基本都是没有进行v-model双向数据绑定&#xff0c;这个很好解决。 本人项目中遇到的bug问题如下&#xff1a; 点击添加&#xff0c;表单内可输入用户名 和 用户姓名&#xff0c;但有时会偶发出现无法这两个input框里面无法输入内容。 原因&a…

使用 Rust 开发:以太坊与 Layer2 生态建设新趋势

Rust 是一种系统编程语言&#xff0c;以其出色的性能、内存安全和并发性而闻名&#xff0c;在区块链和 Web3 中广泛应用&#xff0c;大多数编程语言和开发框架都以 Rust 为核心&#xff0c;如 Polkadot、Solana、NEAR、Elrond&#xff08;现名 MultiversX&#xff09;、Hyperle…

探索房产小程序源码中的十大必备功能

作为房地产行业的专家&#xff0c;我们深知房产小程序在实现高效交易和提升用户体验方面的重要性。选择适合的房产小程序源码&#xff0c;关乎着您的平台能否脱颖而出。在本文中&#xff0c;我将为您揭示房产小程序中不可或缺的十大必备功能&#xff0c;助您确保您的小程序具备…

CSDN 使用体验:一路向上

使用CSDN已经很多年了&#xff0c;这些年我真的在这一平台上收获了很多&#xff0c;而这些年CSDN自身也在不断进步&#xff0c;一步步成长&#xff0c;尤其是在最近的使用过程中&#xff0c;我感受到了CSDN前所未有的包容性、全面性&#xff0c;并且收获成就感。 包容性 随着…

Linux 下 Java 安装字体方法

因上线访问图字体乱码了&#xff0c;因为在windows下设置的微软雅黑&#xff0c;linux默认是没有的&#xff0c;所以需要给jdk安装一个微软雅黑字体。按照步骤来&#xff0c;so easy&#xff01; 1&#xff09;首先找到windows下面的字体&#xff0c;不用去其他地方下了&#…

干货:电视机顶盒哪个牌子好?双11必看网络机顶盒排行榜

电视机顶盒是我们必不可少的&#xff0c;新手们在面对众多品牌和产品是难免疑惑电视机顶盒哪个牌子好&#xff0c;双十一买哪款电视机顶盒最实惠&#xff1f;我将给大家分享的是业内公认的网络机顶盒排行榜&#xff0c;想知道哪些电视盒子品牌最值得买&#xff0c;看这篇就足够…

【vue】使用less报错:显示this.getOptions is not a function

在vue-cli中使用 lang“less” 时报错&#xff1a; Module build failed: TypeError: this.getOptions is not a function at Object.lessLoader 原因&#xff1a;版本过高所致&#xff0c;所用版本为 解决&#xff1a;降低版本&#xff1a;npm install less-loader4.1.0 --s…

c: Queue Calling in Ubuntu

/*** file TakeNumber.h* author your name (geovindu)* brief * version 0.1* date 2023-10-20* * copyright Copyright (c) 2023 站在巨人的肩膀上 Standing on the Shoulders of Giants* */#ifndef TAKENUMBER_H #define TAKENUMBER_H#include <stdio.h> #include <…

绝了!!AI写作神器,自动写小说真的牛

宝子们&#xff0c;这个写小说的神器有点牛&#xff01;尊的是宝藏写作神器啊&#xff01;分分钟写出小说&#xff0c;就连作文&#xff0c;论文都能写&#xff0c;这也太神了吧&#xff01; 使用炒鸡简单&#xff01;新手都能用 输入文字后就能得到你需要的文章 还有超多功…

Kubernetes技术与架构-Ingress Controller

Ingress Controller控制器是实现Ingress对象的定义的组件&#xff0c;也即网关&#xff0c;负责Kubernetes集群内流量的分发&#xff0c;Kubernetes可以运行多个Ingress Controller控制器实例&#xff0c;不同的Ingress定义可以使用不同的Ingress Controller控制器实现&#xf…

插入排序(学习笔记)

插入排序 每一轮插入排序后的结果与打扑克牌取牌原理相似&#xff0c;将取到的牌插入到合适的位置&#xff0c;但在程序实现方面还是基于交换的算法。 它的基本思想是将一个记录插入到已经排好序的有序表中&#xff0c;从而一个新的、记录数增1的有序表。 import java.util.…

vlookup函数踩坑(wps)

使用wps的朋友看过来 vlookup函数踩坑&#xff0c;vlookup&#xff08;查找值&#xff0c;查找范围&#xff0c;返回值的索引&#xff0c;精确查找or模糊查找&#xff09; 我们要查找的数据的那一列&#xff0c;必须是查找范围的第一列&#xff01; 案例&#xff0c;看下面的…

使用guacamole进行WEB远程桌面连接

Apache Guacamole 是一个无客户端的远程桌面网关。它支持标准协议&#xff0c;如 VNC、RDP 和 SSH&#xff0c;甚至还支持k8s、telnet连接。它可以在任何有网络的地方连接上你的服务器和Windows主机。可以同时连接多个终端&#xff0c;并且能够无缝切换。本文采用docker进行部署…

4.9 多协议标记交换MPLS

思维导图&#xff1a; 前言&#xff1a; **4.9 多协议标记交换MPLS笔记** 1. **定义与背景**&#xff1a; - MPLS (多协议标记交换) 是一种由 IETF 开发的新协议。 - “多协议”意味着 MPLS 的上层可以使用多种协议。 - 该协议综合了多家公司的技术&#xff0c;如 C…

LiveGBS流媒体平台GB/T28181常见问题-国标平台通道数为0无法播放的时候如何抓包分析windows抓包和Linux抓包

LiveGBS通道数为0无法播放的时候如何抓包分析windows抓包和Linux抓包 1、第一步&#xff1a;抓包工具准备1.1、Linux1.2、windows 2、第二步&#xff1a;找到设备出口ip3、第三步&#xff1a;执行命令抓设备出口ip3.1 Linux3.2 Windwos 4、第四步&#xff1a;触发相关页面操作4…

比例伺服阀放大器厂家

比例阀放大器具有以下优点&#xff1a; 高精度&#xff1a;比例阀放大器能够根据输入信号的微小变化实时调整输出信号&#xff0c;从而实现对液压系统的精确控制。快速响应&#xff1a;比例阀放大器能够快速响应输入信号的变化&#xff0c;并迅速调整输出信号&#xff0c;以满…

【标准化封装 SOT系列 】 D SOT-323 SOT-363

〇、关键词 SC70 。 一、D部分 SOT-323 SOT-363 这个应该叫SC-70可能更合适&#xff0c;典型特征 pin 间距 0.65mm ; body size 2.0mm1.25mm 这一节很像SOT-23&#xff0c;即A部分&#xff0c;因此也是最容易被混淆的。 二、SC70-3 / -5/ -6 鉴于此&#xff0c;封装最好给…

Oracle 19c OCM讲义课程:应用SQL执行计划基线的案例

使用SQL执行计划基线可以保证SQL的性能不下降&#xff0c;但实际生产中默认没有开启&#xff0c;这里是姚远老师在给OCM的学员授课中关于SQL执行计划基线的一个案例&#xff0c;大家可以借鉴一下。 关于号主&#xff0c;姚远&#xff1a; Oracle ACE&#xff08;Oracle和MyS…