PHP
一门编程语言
运行在服务器端
专门用户开发网站的
脚本后缀名.php
与HTML语言进行混编,脚本后缀依然是.php
解释型语言,不要编译直接运行
PHP运行需要环境:Windows phpstudy
PHP 基本语法
PHP可以和HTML混编,混编时需要用PHP 语言标记
开始标记 <?php
结束标记 ?>
特点:
- <?php ?>这之间就表示进入PHP模式,在开始和结束处之外的内容都会被PHP解析器忽略
- 可以直接嵌入到html代码中,并且可以嵌入到html代码中的任何地方
- 在一个html文档中可以嵌入任意多个PHP标记
- 文件末尾的PHP代码结束标记可以不要,在一些情况下省略掉更好
指令分隔符 [;]
一个php语句必须(建议)要用分号结束
注释(和C语言类似)
单行注释 //
多行注释 /* */
注意
PHP代码中注释,不会显示在浏览器的源代码中
PHP运行环境是服务器,我们浏览器看到的是PHP引擎运行PHP代码后的执行结果
PHP脚本是顺序执行的
简单的PHP语句
- phpinfo(); PHP探针
- echo 用于输出简单的变量
- var_dump(); 用于输出变量值及其变量类型
<?php
echo "This is var.php";
echo "<hr />";
echo "<span style='color:pink;background-color:blue;'>123</span>";
?>

变量
变量的声明
不需要声明变量,但要初始化 → 给变量初次赋值,或者变量的默认值
一个变量没有初始化,内存中就没有这个变量
赋值
通过[=]赋值
引用赋值 KaTeX parse error: Expected 'EOF', got '&' at position 4: c =&̲a,相当于给 a 起 了 一 个 别 名 , a起了一个别名, a起了一个别名,c值的改变,$a也随之改变
unset(变量) → 释放变量
变量的命名
-
以$符号开头
-
严格区分大小写
-
可以用字母、数字、下划线,不能以数字开头
$name1
$my_name
$_my_name
$1_name → 错误
-
尽量不要使用php关键字作为变量名
可变变量 —— 双$问题
<?php
$name="hello";
$$name="world";
echo $name; //输出 hello
echo $$name; //输出 world
echo $hello; //输出 world $$name=$hello
?>
$name = hello,$$name = $($name) = $hello = world
变量的类型
-
int 存储整数
-
float 存储小数 3.14
-
str 字符串
字符串的定义
-
‘ ’
-
“ ”
-
定界符
echo <<<EOF This is EOF EOF; //This is EOF
注意:
-
单引号定义的字符串中出现单引号要转义[\’]
-
单引号定义的字符串中,[$] 符号原样输出
$name = "ASD"; $str = '$ASD is my name'; echo $str; //$A is my name -
双引号定义的字符串中,[$] 是变量的开始,整体变量名需要用{}括起来
$name = "ASD"; $str = "{$A} is my name"; echo $str; //ASD is my name -
单双引号定义的字符串中输入的特殊字符包括[’,",$…]需要转义
-
定界符开始和结束后面不能有任何字符包括空白字符和注释
-
-
布尔类型 true和false (弱类型比较)
以下所有内容会被当做false,其他均会被认为true- 布尔值false
- 0,使用科学计数法0e…时也被认作为0
- 浮点型0.0
- 空白字符串和字符串0
- 没有成员的数组
- NULL
-
数组
-
对象
常量
定义方式
define("NAME","GGG");
echo NAME; //GGG
预定义常量
| 常量名 | 常量值 |
|---|---|
| __FILE __ | 当前PHP文件的文件名和路径 |
| __LINE__ | 该常量名代码的行数 |
| __FUNCTION__ | 当前的函数名 |
| __CLASS__ | 当前的类名 |
| __METHOD__ | 当前的对象的方法名 |
| PHP_OS | PHP运行环境 |
| PHP_VERSION | 当前的PHP服务器的版本 |
| DIRECTORY_SEPARATOR | \或/ 根据操作系统决定目录的分隔符 |
运算符
算术运算符
+ - * / % ++ –
逻辑运算
非 !
与 and &&
或 or ||
异或 xor 不同为真,相同为假
与运算的优先级高于或运算
比较运算
比较参与运算的单元是否相同,相同为真,不同为假
==
弱类型比较
PHP是弱类型语言,使用[==]比较时会进行松散比较

测试:
<?php
var_dump(1=="1");
var_dump(123=='123asd');
var_dump("1"==true);
var_dump("0"==false);
var_dump(-1 == true);
var_dump(true=="php");
var_dump(0==NULL);
var_dump(0=="php");
var_dump(0=="");
var_dump(NULL==false);
var_dump(""==false);
var_dump(array()==false);
var_dump(array()==NULL);
?>
结果:

字符串与数字进行比较的漏洞
例子1:
var_dump(123=="123asd");//true
var_dump(123=="1234asd");//false
var_dump(123=="123asd1234");//true
var_dump("asdf1"==1) //false
在PHP中遇到数字与字符串进行松散比较时,会将字符串中前几位是数字且数字后面不是”.",“e"或"E"的子串转化为数字,与数字进行比较,如果相同则返回为true,不同返回为false,后面的所有字符串直接截断扔掉。
例子2:
var_dump(123=="123.5asd1234");//输出为false
var_dump(123=="123e5asd1234");//输出为false
var_dump(123=="123E5asd1234");//输出为false
如果字符串数字后面是”." , “e”, “E”,则会有其他结果。
"."为浮点数的标志,会将字符串的子串转化为浮点数。
"e"和"E"为科学计数法的标志,将字符串的子串转化为科学计数法。
所以比较出错。
=== → 比较两个变量的值和类型
>
>=
<
<=
!= → 对比时将两边转换为相同类型,如 1!= '1’返回false
!== → 对比时不转换两边类型
<> → 与!=同义
<、>、<=、>=都存在弱类型比较
字符串运算符
. 连接字符串echo “A”. “B” //AB
赋值运算符
=
+=
-=
*=
/=
%=
.=
其他运算符
[? :]三元运算符
$a = 10 > 20 ? 10 : 20
[`]将字符串当作命令执行
echo `whoami`;
echo `ping baidu.com`;
[@] 屏蔽错误代码解释的报错提示、警告
运算符的优先级

流程控制
if(判断){语句块}
elseif(判断2){语句块2}
……
else{语句块n}
switch(变量){
case 条件1:
语句1
case 条件2:
语句2
……
case 条件n:
语句n
}
while(条件){
语句块
}
do{
语句块
}while(条件)
for(;😉{语句块}
特殊流程控制语句
- break;
- break 2; //跳出两层循环
- continue;
- exit([“String”]); //结束脚本
…(img-PUcpz5TY-1626656653350)]
流程控制
if(判断){语句块}
elseif(判断2){语句块2}
……
else{语句块n}
switch(变量){
case 条件1:
语句1
case 条件2:
语句2
……
case 条件n:
语句n
}
while(条件){
语句块
}
do{
语句块
}while(条件)
for(;😉{语句块}
特殊流程控制语句
- break;
- break 2; //跳出两层循环
- continue;
- exit([“String”]); //结束脚本
- die([“String”]);
这篇博客详细介绍了PHP的基础知识,包括基本语法、变量、常量、运算符、流程控制等。讲解了PHP如何与HTML混编,以及PHP的弱类型比较特性,特别是字符串与数字比较的潜在问题。还提到了PHP的注释、赋值运算符、流程控制语句等核心概念。

3143

被折叠的 条评论
为什么被折叠?



