PHP 基础

初识PHP

  • 了解PHP 语言

PHP 语言标记

复制代码
<h1>My Name is 123!</h1>
<script>
    console.log("This message is from info.php!")
</script>
<?php           // PHP 的开始标记,表示从此标记开始,进入PHP 模式。
    phpinfo();  // PHP 代码
                // PHP 的结束标记,表示从开始标记到结束标记,之间的内容是PHP 模式
                // 之后的内容依然被PHP 解释引擎认为是纯文本字符串。
?>

说明:

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

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

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

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

    $str=<<<HTML

    test.php

    <script> console.log("This message is from test.php!"); </script> HTML; echo $str;

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

基础语法

指令分隔符

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

注释

单行注释

复制代码
phpinfo();  //  该函数会显示PHP 配置信息

多行注释

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

空白字符

空白符包括:

|---------|-----------|
| 空白字符 | 表达 |
| 空格 | <space> |
| TAB 制表符 | \t |
| 回车换行 | \r\n |

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

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

变量

  • 掌握PHP 语言中变量的命名
  • 掌握PHP 语言中字符串类型变量的定义

变量概述

变量在任何一门语言中都处于核心地位。

变量是用于临时存储值的容器,通过变量名能够访问到变量值,变量包含四个部分内容:

  • 变量名
  • 变量值
  • 数据类型
  • 内存空间

PHP 脚本语言是一种弱数据类型语言,变量或常量的数据类型由程序的上下文决定,给一个变量赋予什么样的值,就是什么数据类型。

变量声明与初始化

变量命名

变量名称组成:

复制代码
$ + 变量名

变量名是严格区分大小写的。以下变量是完全不同的:

复制代码
$name;
$Name;
$NAME;

变量名由字母、数字、下划线组成,并且不能以数字开头,也不能包含空白字符、特殊字符等其他字符。

复制代码
$name = "Caliy";
$name1 = "Caliy";
$my_name = "123";
$_name = "321";
//$1name;
//$n@me;
//$nam$;

变量命名时,建议使用驼峰式命名法或者下划线命名法,做到变量名的"见名知意"。

复制代码
$firstName;
$LastName;
$first_name;
$last_name;

PHP 中有一些标识符是系统定义的,也称为关键字,是PHP 语言的组成部分,因此不建议使用它们中的任何一个作为变量名,包括函数名,类名等。

复制代码
$echo;      //建议不要使用

变量声明与初始化

直接赋值,直接使用。

复制代码
echo $username;     // Notice: Undefined variable: username

$username = "Caliy";

echo $username;

变量释放

unset() 函数释放指定的变量。

复制代码
$username = "Caliy";

echo $username;

unset($username);

echo $username;     //Notice: Undefined variable: username

可变变量

可变变量,一个变量的名字可以动态的设置和使用。$$ 是php 的特性,也是产生php 中变量覆盖漏洞的原因之一。

复制代码
// $$.php

$username = "Caliy";
$CY = "I am from China!";

// echo $username;     // Caliy
// echo $Caliy;        // I am from China!
// echo $$username;    // I am from China!  $($username) -> $Caliy

$$username = "i love php!";
echo $Caliy;

变量类型

变量类型是指保存在该变量中的数据的数据类型,在计算机编程语言世界中每个数据都有它的类型。

具有相同类型的数据才能被彼此相互操作。

在强类型的语言中例如C 语言,变量要通过声明指定类型,然后才可以存储对应指定的数据,就好比现实生活中在制作一个柜子之前,就要决定好这个柜子的类型,是书柜那么以后就只能用来存书,是衣柜以后就只能用来存衣服。

但是PHP 是一种弱类型的语言,和其他语言不同的是,变量或者常量的数据类型由程序的上下文决定,不需要事先声明类型。一个柜子,要是往里面存书籍那么他就是书柜;要是往里面存放衣服,那么它就是衣柜,根本不需要事先说明这个是书柜还是衣柜,一切根据实际需要使用即可。

可以将数据的变量类型输出,使用的函数var_dump()。

复制代码
// var_dump.php

$name   = "Caliy";      // string
$sex    = true;         // bool
$age    = 24;           // int
$score  = 59.9;         // float

// echo $name;
// echo $sex;           // 1
// var_dump($sex);
// var_dump($score);
var_dump($name);

bool

布尔类型,这个是最简单的类型,布尔型表达了true 或false,即真或假。

复制代码
// bool.php

$a = true;
$b = false;

var_dump($b);

进行if 判断的时候,如果表达式不是bool 类型的值,会有类型转换,其他类型的值转换成布尔类型的值。大多数的值是被认为是true,少部分以下值被认为是false。

复制代码
bool(false)
int(0)
float(0)
string(0)""
string(1)"0"
array(0){}
NULL

int

整型,存储整数。

复制代码
$age = 24;
var_dump($age);

float

浮点型,也称double,指包含小数的数。

复制代码
$score = 99.9;
var_dump($score);

string

字符串是有序的一系列字符。字符串可以使用单引号、双引号、定界符三种方法来定义。

单引号定义字符串:

  • 单引号定义的字符串中不能包含单引号,如果包含,需要转义\'。

  • 单引号中的变量不会被识别。

    // string.php

    name = 'CY'; msg = 'Welcome, ';

    echo msg.name; // . 运算符,在PHP 中代表字符串拼接。

双引号定义字符串:

  • 双引号中可以包含单引号,双引号中包含双引号,需要转义\"。

  • PHP 会解析双引号之间的变量,最好用{} 将变量名括起来。

    // string.php

    $username = "CY";

    message = "Welcome, {username}";

    echo $message;

定界符定义字符串:

  • 当需要定义输出大段字符串时,并且该字符串中有超多特殊字符,包括单引号,双引号等等。

  • 定界符定义的字符串中的单双引号,还有大部分特殊字符不需要进行转义。

  • 定界符开始标识符<<< + 标志,标志建议大写字母,并且具备一定的语义。

  • 定界符结束标示符标志 + ;,结束标识符之后,只能有换行回车。

  • 标志的命名规则,字母、数字、下划线,并且不能以数字开始。

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

    // string.php

    name = "Caliy"; msg = <<<Caliy

    My Name is {$name}!

    <script> console.log('This message is from info.php!') </script> Caliy; echo $msg;

常量

常量是一个简单值的标示符,如其名称所暗示的。在PHP 脚本执行期间一个常量一旦被定义,就不能被改变或者取消定义,常量的作用域是全局,常量包含bool,int,float,string 类型的数据。

定义和使用

常量的命名与变量类似,也遵循PHP 标识符的名称规则,按照惯例常量标识符总是大写的。

复制代码
// define.php

define("USERNAME", "Caliy");

// USERNAME = 'Caliy';
// unset("USERNAME");

echo USERNAME;

变量一般由$ 符号起头,常量一般大写。

预定义常量

PHP 已经定义好了,可以直接使用的常量,一般代表特殊的含义。魔术常量是预定义常量中比较特殊的一类。

|---------------------|---------------|
| 常量名 | 常量值 |
| FILE | 当前的文件名,完整的路径。 |
| LINE | 当前行号 |
| FUNCTION | 当前的函数名 |
| CLASS | 当前的类名 |
| METHOD | 当前对象的方法名 |
| PHP_OS | 操作系统类型 |
| PHP_VERSION | 当前PHP 的版本 |
| DIRECTORY_SEPARATOR | 目录的分隔符。 |

运算符

  • 了解运算符
  • 掌握反引号和@ 符号用法

算术运算符

|----------|-------|-----------------|
| 例子 | 名称 | 结果 |
| -a | 取反 | a 的负值 |
| a + b | 加法 | a和b 的和 |
| a - b | 减法 | a 和b 的差 |
| a \* b | 乘法 | a 和b 的积 |
| a / b | 除法 | a 除以b 的商 |
| a % b | 取模,取余 | a 除以b 的余数 |
| ++ a | 前加 | a 的值加一,然后返回a | | a++ | 后加 | 返回a,然后将a 的值加一 |
| --a | 前减 | a 的值减一, 然后返回a | | a-- | 后减 | 返回a,然后将a 的值减一 |

复制代码
<meta charset = "utf-8">
<h1>算术运算符</h1>
<?php
$a = 10;
$b = 3;

// echo -$a;
// echo $a + $b;
// echo $a - $b;
// echo $a * $b;
// echo $a / $b;
// echo $a % $b;
// echo ++ $a;
// echo $a ++;
// echo -- $a;
echo $a--;

字符串运算符

字符串运算符完成的主要工作,就是字符串拼接。

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

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

复制代码
<meta charset = "utf-8">
<h1>字符串连接符</h1>
<?php
$name = "Caliy";
$str = "Hello,".$name;
//$str = "Hello,"+$name;
var_dump($str);
?>

赋值运算符

左边的操作数必须是变量,右边可以是一个表达式,也可以是一个值,一个变量等等。

作用:将右边表达式的值赋给左边变量。

|---------|----|----|
| 二元赋值运算符 | 例子 | 解释 |
| = | | |
| += | | |
| -= | | |
| *= | | |
| /= | | |
| %= | | |
| .= | | |

复制代码
<meta charset = "utf-8">
<h1>赋值运算符</h1>
<?php
$a = 10;
$b = 3;

// $a += $b; 
// $a -= $b;
// $a *= $b; 
// $a /= $b;
// $a %= $b;
$a .= $b;    103         

echo $a;

比较运算符

对操作数(按照比较运算符的要求,规则)进行比较后,得到返回值(boolean)。

如果比较出的结果满足比较运算符的要求那么结果就是true(真,成立,满足),否则就是false (假,不成立,不满足)。

|------------|------|-------------|
| 例子 | 说明 | 备注 |
| a == b | 等于 | |
| a === b | 全等 | 值相等并且数据类型相同 |
| a != b | 不等 | |
| a \<\> b | 不等 | |
| a !== b | 不全等 | |
| a \< b | 小于 | |
| a \> b | 大于 | |
| a \<= b | 小于等于 | |
| a \>= b | 大于等于 | |

复制代码
<meta charset = "utf-8">
<h1>比较运算符</h1>
<?php
$a = 5;
$b = 3;
$c = $a == $b;
$c = $a === $b;
$c = $a != $b;
$c = $a <> $b;
$c = $a !== $b;
$c = $a > $b;
$c = $a >= $b;
$c = $a < $b;
$c = $a <= $b;

var_dump($c);

?>

PHP 中规定:使用echo 输出布尔类型值的时候echo true; 它在页面中会输出1。echo false; 它会在页面中什么都不输出。建议使用var_dump() 来输出更明了的结果。

逻辑运算符

|----------|----------------------|----------|------------|
| 逻辑运算符 | 例子 | 解释 | 运算符法则 |
| and && | a and b a \&\& b | 逻辑"与"运算 | 有假则假 |
| or || | a or b a \|\| b | 逻辑"或"运算 | 有真则真 |
| xor | a xor b | 逻辑"异或"运算 | 相同为假,不同为真。 |
| ! | !$a | 逻辑"非"运算 | |

复制代码
<meta charset = "utf-8">
<h1>逻辑运算符</h1>
<?php
$a = true;
$b = false;
//var_dump($a);
//var_dump($b);
$c = ($a and $b);
$c = ($a && $b);
$c = ($a or $b);
$c = ($a || $b);
$c = ($a xor $b);
$c = !$a;

var_dump($c);
?>

其他运算符

如果,则

?:

取最大值 10

复制代码
$a = 10;
$b = 20;
$max = $a > $b ? $a : $b;
echo $max;

反引号 、、

自动适配系统命令,调用系统命令。

复制代码
// ``.php

$cmd = "whoami";
$cmd = "ipconfig";
$cmd = "net user";

echo "<pre>".`$cmd`;

@

屏蔽表达式可能发生的错误。

复制代码
echo @$username;

PHP 流程控制

  • 了解PHP 流程控制过程
  • 掌握if,while,for 等流程控制语句的用法。

顺序执行

自上而下的执行即可,这也是PHP 语句的默认执行过程。对这个执行过程没有控制。

复制代码
echo "This is first echo";
echo "<br />";
echo "This is second echo";
echo "<br />";
echo "This is third echo";

分支执行

分支执行可以根据表达式的值是否为True 来选择执行某些代码,PHP 的分支执行主要通过if 和switch 来实现。

if 语句

语言结构

复制代码
if(){//判断条件,如果判断条件的返回值为True,则执行语句块1,否则执行语句块2
    //语句块1
}else{
    //语句块2
}

单向条件:

复制代码
// if.php

$score = 59.9;
if($score >= 60 ){
    echo "congratulations";
}

双向条件:

复制代码
// if.php

$score = 99.9;
if($score >= 60 ){
    echo "congratulations";
}else{
    echo "Sorry, you may need help!";
}

多向条件:成绩定级脚本。

switch 语句

功能与if 语句类似,当需要多向分支结构时,并且判断条件是具体的某个值,此时大多使用switch 结构。

复制代码
$day = 8;

switch($day){
    case 1:
        echo "Monday";
        break;
    case 2 :
        echo "Tuesday";
        break;
    case 3 :
        echo "Wednesday";
        break;
    case 4 :
        echo "Thursday";
        break;
    case 5:
        echo "Friday";
        break;
    case 6:
    case 7:
        echo "Weekend!";
        break;
    default:
        echo "Error!";
}

注意:

  • 表达式的值最好是整形或者字符串。
  • 不要忘记break 语句,用来跳出switch 语句。每个case 语句后面都加上break。
  • 如果某个case 语句后面并没有接语句块,那么就说明这个语句块的内容是同下。
  • case 后面的语句块是不需要{} 括起来的。

判断条件 if

在编写if 语句时,要求判断条件是一个布尔类型的值。但是实际应用中,是无法保障这一点。如果判断条件是非布尔类型的值,就需要强制转换成布尔类型的值。如下:

复制代码
// if.php

$flag = 0;
$flag = 0.0;
$flag = "";
$flag = "0";
$flag = array();
$flag = NULL;
$flag = "Caliy";
$flag = true;
$flag = 24;
$flag = 59.9;

if($flag){
    echo var_dump($flag)." means Ture"; 
}else{
    echo var_dump($flag)." means False"; 
}

循环执行

计算机最擅长的功能之一就是按照规定的条件,重复执行某些操作,这是程序设计中最能发挥计算机特长的程序结构。

while

语言结构

复制代码
while(表达式){//当表达式的值为真的时候,执行循环体。
    //循环体
}

当表达式的值为true,就执行下面的循环体。当循环体执行结束之后,继续判断表达式的值是true 还是false,如果还是true,那么就继续执行循环体。直到,这个表达式的值为false,那么这个while 语句就执行结束了。

例子:输出1 到100 数字。

复制代码
// while.php

$a = 1;

while ($a <= 100) {
    echo $a."<br />";
    $a ++;
}

do while

复制代码
//  do-while.php

$a = 1;

do{
    echo $a."<br />";
    $a ++;
}while ($a <= 10);

for

语法格式。

复制代码
for(;;){//计数器;判断条件;自增或自减
    //循环体
}

例子:输出1 到1000 数字。

复制代码
// for.php

for ($i=0; $i < 1000 ; $i++) { 
    echo $i."<br />";
}

特殊流程

break

break 用于switch,for,while,do...while,foreach 等的中断。后面可以接上一个数字来表示跳出几层循环。默认不加就是跳出当前循环语句。

复制代码
// break.php

for ($i=1; $i <= 100; $i++) { 
    if ($i % 17 == 0) {
       break;
    }
    echo $i."<br />";
}

echo "PHP is DONE!";

continue

continue 只能用在循环语句,轮空本次循环,并不是结束整个循环语句。

复制代码
//  continue.php

for ($i=1; $i <= 100; $i++) { 
    if ($i % 17 == 0) {
       continue;
    }
    echo $i."<br />";
}

echo "PHP is DONE!";

exit

exit 表示结束当前整个PHP 脚本的执行。同die() 语句。

复制代码
// exit.php

for ($i=1; $i <= 100; $i++) { 
    if ($i % 17 == 0) {
        // exit;
        // exit("PHP is OVER");
        // die("PHP is OVER");
        die();
    }
    echo $i."<br />";
}

echo "PHP is DONE!";
相关推荐
谈不譚网安10 小时前
Raven2
web安全·网络安全
魔众13 小时前
ModStartCMS v9.7.0 组件升级优化,模块升级提醒,访问明细导出
php·cms
网安INF15 小时前
网络攻防技术:网络安全攻击概述
安全·web安全·网络安全·网络攻防
一人の梅雨15 小时前
京东商品详情深度解析:从接口调用到商业价值挖掘的技术实现
服务器·数据库·php
帅帅梓16 小时前
docker网络
网络·docker·php
吃鱼吃鱼吃不动了18 小时前
什么是负载均衡?
开发语言·php
BingoGo20 小时前
PHP 开发者应该理解的 Linux 入门权限指南
后端·php
emma羊羊20 小时前
【文件读写】18,21关
网络安全·upload
苏琢玉21 小时前
再也不用翻一堆日志!一键部署轻量级错误监控系统,帮你统一管理 PHP 报错
go·github·php
JaguarJack1 天前
PHP 开发者应该理解的 Linux 入门权限指南
后端·php