PHP基础知识
1、标记风格
<?php echo "Hello Php"; ?>
推荐使用
<? echo "Hello Php"; ?>
这 是一种短标记风格,用于在PHP中嵌入代码块。它是一种较早期的标记风格,但在一些PHP配置中可能被禁用或不推荐使用。
2、分号、空白、换行符
在PHP中分号“ ;”用作语句的结束符号。每个语句应该以分号结尾,以表示语句的结束。
空白和换行符(包括空格、制表符和换行符)通常被解释器忽略,因此它们在大多数情况下对代码的执行没有直接影响。
提示: 通过在适当的位置使用空白和换行符,可以使代码更易于阅读和理解,并且有助于代码的组织和格式化。
3、注释
//............
单行注释
#..............
单行注释
/*..................*/
多行注释
4、内容输出
-
echo语句:echo是PHP中最常用的输出方法之一,用于将内容输出到浏览器或命令行。
`echo "Hello Php!";`
-
print语句:print是另一种常见的输出方法,与echo类似,用于将内容输出到浏览器或命令行。
print "Hello Php!";
-
print_r函数:print_r函数用于打印复杂数据类型(如数组、对象)的可读性较好的表示形式。
$demoArr = ['apple','banana','orange]; print_r($demoArr);
-
var_dump函数:var_dump函数用于打印变量的详细信息,包括数据类型和值。
$name = "John_lee"; var_dump($name);
-
printf函数:printf函数用于格式化输出字符串,可以根据指定的格式打印变量的值。
$number = 42; printf("The answer is %d", $number);
5.1 常用的占位符:
占位符 说明 %d 带符号的十进制数 %u 不带符号的十进制数 %o 不带符号的八进制数 %x 不带符号的十六进制数(小写字母) %X 不带符号的十六进制数(大写字母) %f 浮点数(本地设置) %F 浮点数(不本地设置) %e 科学计数法(小写e) %E 科学计数法(大写E) %s 字符串 %c ASCII码值相应的字符 %b 二进制数 %a 十六进制数(小写字母) %A 十六进制数(大写字母) -
sprintf函数:sprintf函数与printf函数类似,但它返回格式化后的字符串 (用变量保存),而不是直接将其打印出来。
$number = 42;
$formattedString = sprintf("The answer is %d", $number);
echo $formattedString;
5、变量与常量
5.1 变量命名规则
在PHP中,变量名必须以美元符号“
”开头,后面跟着变量名。变量名可以包含字母、数字和下划线,但必须以字母或下划线开头。此外,
P
H
P
是区分大小写的,因此
‘
”开头,后面跟着变量名。变量名可以包含字母、数字和下划线,但必须以字母或下划线开头。此外,PHP是区分大小写的,因此`
”开头,后面跟着变量名。变量名可以包含字母、数字和下划线,但必须以字母或下划线开头。此外,PHP是区分大小写的,因此‘name和
$Name`是两个不同的变量。
5.2 变量声明
PHP是一种动态弱类型语言,这意味着您无需显式声明变量的类型。变量的类型是根据其值自动确定的。例如:
$name = "John"; // 字符串类型
$age = 25; // 整数类型
$isStudent = true; // 布尔类型
5.3 变量赋值
要为变量赋值,只需使用赋值操作符(=)将值分配给变量。例如:
$name = "John";
$age = 25;
5.4 变量输出
要在PHP中输出变量的值,可以使用echo
语句或print
函数。例如:
$name = "John";
echo $name; // 输出:John
5.5 变量类型
字符串(String)
字符串是由一串字符组成的数据类型。可以使用单引号或双引号来定义字符串。例如:
$name = "John";
$message = 'Hello, World!';
整数(Integer)
整数是不带小数点的数字。例如:
$age = 25;
浮点数(Float)
浮点数是带有小数点的数字。例如:
$pi = 3.14;
布尔(Boolean)
布尔类型表示真或假的值。可以是true
或false
。例如:
$isStudent = true;
数组(Array)
数组是一种用于存储多个值的数据结构。可以使用array()
函数或简化的[]
语法来创建数组。例如:
$fruits = array("apple", "banana", "orange");
// 或者
$fruits = ["apple", "banana", "orange"];
对象(Object)
对象是类的实例。对象具有属性和方法。例如:
class Person {
public $name;
public function sayHello() {
echo "Hello, my name is " . $this->name;
}
}
$person = new Person();
$person->name = "John";
$person->sayHello(); // 输出:Hello, my name is John
空(Null)
null
表示变量没有值。例如:
$foo = null;
5.6 变量作用域
变量的作用域指的是变量在程序中有效的区域。在PHP中,有以下几种作用域:
5.6.1 局部作用域
局部作用域是指在函数或代码块内部声明的变量。这些变量只在其声明的函数或代码块内部可见。例如:
function myFunction() {
$name = "John"; // 局部变量
echo $name;
}
myFunction(); // 输出:John
echo $name; // 错误:变量$name在该作用域外部不可见
5.6.2全局作用域
全局作用域是指在函数外部声明的变量。这些变量在整个程序中都可见。例如:
$name = "John"; // 全局变量
function myFunction() {
global $name; // 使用global关键声明全局变量
echo $name;
}
myFunction(); // 输出:John
echo $name; // 输出:John
5.6.3 静态作用域
静态作用域用于在函数调用之间保持变量的持久性。静态变量在函数内部声明,但在函数调用之间保持其值。例如:
function myFunction() {
static $count = 0; // 静态变量
$count++;
echo $count;
}
myFunction(); // 输出:1
myFunction(); // 输出:2
myFunction(); // 输出:3
5.7 变量技巧
5.7.1 变量的引用传递
默认情况下,PHP中的变量是通过值传递的,这意味着在函数内部对变量的更改不会影响函数外部的变量。但是,您可以使用引用传递来让函数修改外部变量。例如:
function increment(&$num) {
$num++;
}
$count = 0;
increment($count);
echo $count; // 输出:1
在函数参数前加上&
符号将参数声明为引用。
5.7.2 变量的动态变量名
在PHP中,您可以使用变量的值作为另一个变量的名称。这被称为动态变量名。例如:
$fruit = "apple";
$apple = "A delicious fruit";
echo $$fruit; // 输出:A delicious fruit
$$fruit
将使用$fruit
的值作为变量名称,即$apple
。
5.8 超全局变量
PHP提供了一些特殊的全局变量,称为超全局变量。这些变量在脚本的任何地方都可用,并且不需要使用global
关键字来访问。一些常见的超全局变量包括$_GET
、$_POST
、$_SERVER
等。例如:
echo $_GET['name']; // 输出URL参数中的name值
echo $_POST['email']; // 输出表单提交中的email值
echo $_SERVER['REMOTE_ADDR']; // 输出客户端IP地址
超全局变量 | 说明 |
---|---|
$_GET | 地址栏 GET 提交 |
$_POST | 表单 POST 提交 |
$_FILES | 文件上传变量 |
$_SESSION | 会话变量 |
$_COOKIE | cookie 值变量 |
$_GLOBALS | 全局变量 |
$_REQUEST | 包含$_GET,$_POST,$_COOKIE |
$_SERVER | 服务器环境变量 |
5.9 常量命名和规则
常量命名规则
在PHP中,常量名通常使用大写字母,并且建议使用下划线来分隔单词。
- 常量前面没有定义变量符号 ”$“
- 常量只能用 define() 函数定义,而不能通过赋值语句
- 常量一旦定义就不能被重新定义或者取消定义
- 常量的值用来定义 整型,浮点,字符串,布尔值,数组
- 常量可以不用理会变量范围的可以在任何位置访问
例如:
define("PI", 3.14);
define("MAX_SIZE", 100);
//---------------------------------------
define("FRUITS", ["apple", "banana", "orange"]);
echo FRUITS[0]; // 输出:apple
echo FRUITS[1]; // 输出:banana
echo FRUITS[2]; // 输出:orange
5.9.1 常量声明
在PHP中,可以使用define()
函数来定义常量。define()
函数接受两个参数。例如:
define("PI", 3.14);
自PHP 7.3起,常量默认是大小写敏感的,并且不再支持通过第三个参数来声明大小写不敏感的常量。
5.9.2常量使用
定义常量后,可以在整个脚本中使用它们,无论是在函数内部还是在函数外部。要访问常量的值,只需使用常量名称即可。例如:
define("PI", 3.14);
echo PI; // 输出:3.14
5.9.3预定义常量
PHP还提供了一些预定义的常量,它们在整个脚本中都可用。一些常见的预定义常量包括:
__FILE__
: 当前脚本的文件名(包含完整路径)__LINE__
: 当前脚本中的行号__DIR__
: 当前脚本所在的目录__FUNCTION__
: 当前函数的名称__CLASS__
: 当前类的名称__METHOD__
: 当前方法的名称
例如:
echo __FILE__; // 输出当前脚本的文件名
echo __LINE__; // 输出当前脚本中的行号
5.10常量用例
5.10.1 存储配置信息
常量非常适合存储配置信息,例如数据库连接信息、API密钥等。通过将这些敏感信息存储为常量,可以确保它们在整个脚本中不会被更改。
define("DB_HOST", "localhost");
define("DB_USERNAME", "myuser");
define("DB_PASSWORD", "mypassword");
5.10.2 枚举值
常量可以用于定义枚举值,即一组相关的命名常量。您可以使用这些常量来表示不同的颜色。例如,假设您想定义一些颜色常量:
define("COLOR_RED", "red");
define("COLOR_GREEN", "green");
define("COLOR_BLUE", "blue");
5.10.3 数学常量
PHP提供了一些内置的数学常量,方便在数学运算中使用,具体可以查阅PHP手册。例如:
echo M_PI; // 输出圆周率π的值
echo M_E; // 输出自然对数的底数e的值
5.10.4条件编译
常量还可以用于条件编译。根据不同的条件,您可以定义不同的常量值。然后,您可以根据这些常量的值来执行不同的代码块。例如:
define("DEBUG_MODE", true);
if (DEBUG_MODE) {
// 执行调试模式下的代码
} else {
// 执行非调试模式下的代码
}
6、运算符
6.1 算术运算符
运算符 | 说明 |
---|---|
$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 = 5;
$b = 3;
$result = $a + $b; // $result 的值为 8
$a = 5;
$b = 3;
$result = $a - $b; // $result 的值为 2
$a = 5;
$b = 3;
$result = $a * $b; // $result 的值为 15
$a = 10;
$b = 2;
$result = $a / $b; // $result 的值为 5
$a = 10;
$b = 3;
$result = $a % $b; // $result 的值为 1
$a = 2;
$b = 3;
$result = $a ** $b; // $result 的值为 8
$a = 5;
echo ++$a; // 输出:6
echo $a; // 输出:6
$a = 5;
echo $a++; // 输出:5
echo $a; // 输出:6
$a = 5;
echo $a--; // 输出:5
echo $a; // 输出:4
$a = 5;
echo --$a; // 输出:4
echo $a; // 输出:4
6.2 赋值运算符
运算符 | 说明 |
---|---|
= | 右边值赋值给左边变量 |
+= | 左边值加上右边值赋值给左边变量 |
-= | 左边值减掉右边值赋值给左边变量 |
*= | 左边值乘以右边值赋值给左边变量 |
/= | 左边值除以右边值赋值给左边变量 |
.= | 左边字符串连接到右边变量后面 |
%= | 左边值对右边值取余数后赋值给左边变量 |
6.3 字符串运算符
运算符 | 说明 |
---|---|
. | 它返回其左右参数连接后的字符串 |
.= | 左边字符串连接到右边变量后面 |
6.4 比较运算符
运算符 | 说明 |
---|---|
$a==$b | 等于 TRUE,如果 a 等于 a 等于 a等于b |
$a===$b | 全等于 TRUE,如果 a 等于 a 等于 a等于b,并且类型也相同 |
$a!=$b | 不等 TRUE,如果 a 不等于 a 不等于 a不等于b |
$a<>$b | 不等 TRUE,如果 a 不等于 a 不等于 a不等于b |
$a!==$b | 非全等 TRUE,如果 a 不等于 a 不等于 a不等于b,或者类型不同 |
$a<$b | 小于 TRUE,如果 a 严格小于 a 严格小于 a严格小于b |
$a>$b | 大于 TRUE,如果 a 严格 a 严格 a严格b |
$a<=$b | 小于等于 TRUE,如果 a 小于或者等于 a 小于或者等于 a小于或者等于b |
$a>=$b | 大于等于 TRUE,如果 a 大于或者等于 a 大于或者等于 a大于或者等于b |
6.5 逻辑运算符
运算符 | 说明 |
---|---|
$a and $b | 逻辑与 TRUE,如果 $a 与 $b 都为 TRUE |
$a or $b | 逻辑或 TRUE,如果 $a 或 $b 任一为 TRUE |
!$a | 逻辑非 TRUE,如果 $a 不为 TRUE |
$a && $b | 逻辑与 TRUE,如果 $a 与 $b 都为 TRUE |
`$a |
6.6 三元表达式
变量 = 条件 ? 值1 : 值2;
当表达式的条件 true 时, 变量 = 值 1 否则 变量 = 值 2
变量?? "默认值";
??
操作符是空合并运算符,它用于简化对变量是否为null的判断,并在变量为null时提供一个默认值。 注意是:null
$s1 = null;
echo $s1?? "888"; //结果:888
$s2 = 0;
echo $s2?? 888; // 结果为:0
$s3 = flase;
echo $s3?? 888; // 结果为:不显示
$s4 = true;
echo $s4?? 888; // 结果为:1
7、流程控制
7.1 if/elseif/else
用于执行条件分支的控制结构。它们可以根据条件的真假执行不同的代码块
if (条件1) {
// 当条件1为真时执行的代码块
} elseif (条件2) {
// 当条件1为假而条件2为真时执行的代码块
} else {
// 当所有条件都为假时执行的代码块
}
$age = 25;
if ($age < 18) {
echo "未成年人";
} elseif ($age >= 18 && $age < 65) {
echo "成年人";
} else {
echo "老年人";
}
7.2 switch
用于执行多个条件分支的控制结构。根据表达式的值选择不同的代码块进行执行
switch (表达式) {
case 值1:
// 当表达式的值等于值1时执行的代码块
break;
case 值2:
// 当表达式的值等于值2时执行的代码块
break;
// 可以有多个case块
default:
// 当表达式的值与所有case的值都不匹配时执行的代码块
break;
}
$day = "Monday";
switch ($day) {
case "Monday":
echo "星期一";
break;
case "Tuesday":
echo "星期二";
break;
case "Wednesday":
echo "星期三";
break;
case "Thursday":
echo "星期四";
break;
case "Friday":
echo "星期五";
break;
default:
echo "周末";
break;
}
注意:如果在 switch
语句的 case
块中没有使用 break
语句,程序将会继续执行后续的 case
块,而不会跳出 switch
语句。
$day = "Monday";
switch ($day) {
case "Monday":
echo "Today is Monday.";
case "Tuesday":
echo "Tomorrow is Tuesday.";
case "Wednesday":
echo "The day after tomorrow is Wednesday.";
default:
echo "Other days.";
}
/**
结果为: Today is Monday.
Tomorrow is Tuesday.
The day after tomorrow is Wednesday.
Other days.
*/
7.3 while
是一种常用的循环控制结构,用于在满足条件的情况下重复执行一段代码块。
while (条件) {
// 循环体中的代码
}
$count = 1;
while ($count <= 5) {
echo $count . " ";
$count++;
}
7.4 do while
是一种循环控制结构,类似于 while
循环,但它会先执行一次循环体中的代码,然后再检查条件是否为真,如果条件为真,则继续执行循环。
do {
// 循环体中的代码
} while (条件);
$count = 1;
do {
echo $count . " ";
$count++;
} while ($count <= 5);
7.5 for
是一种常用的循环控制结构,用于在指定的条件下重复执行一段代码块,并控制循环变量的增量。
for (初始表达式; 条件表达式; 增量表达式) {
// 循环体中的代码
}
for ($i = 1; $i <= 5; $i++) {
echo $i . " ";
}
注意: 循环的时候必须设置停止循环的条件,不然呵呵~ 死机了吧!
7.6 break和
continue
-
break
语句用于立即终止当前循环(例如for
、while
、do while
循环),并跳出循环体,继续执行循环后的代码。它可以用于提前结束循环,无论是否满足循环条件。当程序执行到break
语句时,循环会立即结束,不再执行循环体内剩余的代码。 -
continue
语句用于跳过当前循环的剩余代码,立即进入下一次循环迭代。当程序执行到continue
语句时,循环会跳过当前迭代的剩余代码,直接进入下一次迭代。它可以用于跳过某些特定条件下的迭代操作。
for ($i = 1; $i <= 10; $i++) {
if ($i == 5) {
break;
}
echo $i . " ";
}
for ($i = 1; $i <= 5; $i++) {
if ($i == 3) {
continue;
}
echo $i . " ";
}
8、日期时间
8.1 时区
-
PHP.ini 配置 date.timezone = PRC` (不推荐)
-
脚本中修改 (推荐使用)
date_default_timezone_get() //取得当前使用时区 date_default_timezone_set() //设定当前使用时区
8.2 DateTime
PHP提供了一个内置的DateTime类和一些相关的函数,用于处理日期和时间的创建、格式化、计算等操作。
//获取当前日期和时间:
$timeNow = new DateTime(); // 当前日期和时间
$dateNow = $timeNow->format('Y-m-d'); // 当前日期
$timeNow = $timeNow->format('H:i:s'); // 当前时间
//格式化日期和时间:
$dateTime = new DateTime('2021-12-01 14:30:00');
$formattedDateTime = $dateTime->format('Y-m-d H:i:s'); // 格式化为字符串
//解析日期和时间:
$dateString = '2021-12-01 14:30:00';
$dateTime = DateTime::createFromFormat('Y-m-d H:i:s', $dateString); // 解析字符串为日期对象
//计算日期和时间:
$dateTime = new DateTime('2021-12-01');
$dateTime->modify('+1 day'); // 添加一天
$newDate = $dateTime->format('Y-m-d'); // 修改后的日期
//比较日期和时间
$dateTime1 = new DateTime('2021-12-01');
$dateTime2 = new DateTime('2022-01-01');
if ($dateTime1 < $dateTime2) {
// 日期1早于日期2
}
//格式化输出相对时间:
$dateTime = new DateTime('2021-12-01');
$now = new DateTime();
$diff = $dateTime->diff($now); // 计算日期差
$relativeTime = $diff->format('%y years, %m months, %d days'); // 格式化为相对时间
9、文件引入
include
、require
、include_once
和require_once
是用于在脚本中包含其他文件的语句。它们的功能类似,但在文件包含的方式和错误处理方面有一些不同。
include`:用于包含指定文件,并在包含过程中产生一个警告(非致命错误),如果包含的文件不存在或发生其他错误,脚本会继续执行。
include 'file.php';
require
:用于包含指定文件,并在包含过程中产生一个致命错误,如果包含的文件不存在或发生其他错误,脚本会停止执行。
require 'file.php';
include_once
:与include
类似,但是如果同一个文件已经被包含过,include_once
会检查并确保文件不会被重复包含。这避免了重复定义函数、类或变量等问题。
include_once 'file.php';
require_once
:与require
类似,但是如果同一个文件已经被包含过,require_once
会检查并确保文件不会被重复包含。这避免了重复定义函数、类或变量等问题。
require_once 'file.php';
使用include
和require
语句时,可以包含任何PHP文件,包括库文件、模块文件等。被包含的文件可以是相对于当前脚本文件的路径或绝对路径。
需要注意以下几点:
include
和require
语句在包含文件时,会创建一个新的局部作用域,包含的文件中定义的函数、类和变量在包含语句后可用。- 如果包含的文件中有语法错误或其他错误,
include
会产生一个警告并继续执行,require
会产生一个致命错误并停止执行。 include_once
和require_once
语句在包含文件时,会检查文件是否已经被包含过,避免重复包含相同文件。- 推荐在包含文件时使用
require
或require_once
,因为如果被包含文件是必需的(例如核心库文件),则应该确保它们存在,以避免脚本出现严重错误。