php基础环境搭建

36 阅读9分钟

[TOC]

php调试环境搭建

phpstudy

(以往笔记有教程)

vscode

(以往笔记有教程)

中文语言包

Vscode默认是英⽂显示,不习惯的可以安装中⽂语⾔包进⾏汉化处理,安装完成之后,重启vscode即可显示中⽂。如果重启vscode后,中⽂仍然没有⽣效,那么可以尝试配置VScode的显示语⾔。在VScode中,按下“Ctrl+Shift+P”快捷键,打开命令⾯板。在命令⾯板的输⼊框中,输⼊“Configure DisplayLanguage”,然后按下回⻋键。在弹出的语⾔列表中,选中“zh-cn”(简体中⽂)选项

php调试插件

image-20251110145554041.png

配置Open PHP/HTML/JS In Browser插件(该插件是用来快捷访问网站的)

image-20251110185502253.png

image-20251110194958392.png

右键点击第一个选项,就会直接打开网页

image-20251110195538980.png

image-20251110195623074.png

配置xdebug

既可以参考xdebug.org/wizard官⽹安装,…

image-20251110185821564.png

使⽤phpstudy配置xdebug插件,会有⼀点点bug,需要⼿动修改php.ini,加⼊下⾯配置项并重启apache Xdebug v2.x.x:

[Xdebug]
..............
xdebug.remote_enable = 1
xdebug.remote_autostart = 1
xdebug.remote_log="D:/phpstudy_pro/Extensions/php_log/xdebug_remote.log"  #如果断点无法正常工作,就添加日志信息来强制刷新配置缓存

Xdebug v3.x.x:

zend_extension =xdebug
xdebug.mode=debug,develop
xdebug.start_with_request=yes

image-20251110191244233.png

新建一个网站

image-20251110190504791.png

用vscode打开

image-20251110190555150.png

创建一个默认的网页文件

image-20251110190907359.png

image-20251110191441122.png

点击运行和调试,选择第三个

image-20251110191658975.png

超时配置

后续将使⽤phpstudy进⾏php代码审计,为了防⽌出现超时问题,可以提前设置好相关参数,在下⾯⽂件末尾加上相关参数

KeepAliveTimeout 50000
MaxKeepAliveRequests 100000
Timeout 600000
FcgidIOTimeout 36000
FcgidIdleTimeout 36000
IPCConnectTimeout 36000
IPCCommTimeout 36000

在软件管理->对应php版本->PHP设置 修改执⾏超时时间

image-20251110194519049.png

php基础知识

基本php语法

php 文件的特点

  1. php ⽂件的默认⽂件扩展名是 .php
  2. php 代码以 <?php 开始,以 ?> 结束,可以放在⽂档中的任何位置。
  3. php 中的每个代码⾏都必须以分号结束。分号是⼀种分隔符,⽤于把指令集区分开来。
  4. php ⽂件通常包含 HTML 标签和⼀些 php 脚本代码。

PHP基本输出

在 PHP 中有两个基本的输出⽅式: echo 和 print,⼆者之间的区别

echo - 可以输出⼀个或多个字符串 print - 只允许输出⼀个字符串,返回值总为 1

<?php
echo"<h2>php 很有趣!</h2>";
echo "Hello world!<br>";
echo "我要学php!<br>";
echo "这是⼀个", "字符串,", "使⽤了", "多个", "参数。";

print "<h2>php 很有趣!</h2>";
print "Hello world!<br>";
print "我要学习 php!";
?>

image-20251110203009691.png

常⽤的输出函数还有 var_dump() 函数,

var_dump() 是 PHP 中用于输出一个或多个表达式的结构信息的函数,包括表达式的类型和值。如果表达式是数组,它会递归展开值,并通过缩进显示其结构。

php 中的注释

<!DOCTYPE html>
<html>
<body>
<?php
// 这是php 单⾏注释
/*
这是
php 多⾏
注释
*/
?>
</body>
</html>

php的注释在网页源代码中是看不见的

image-20251110202933676.png

php 变量

  1. 变量以 $ 符号开始,后⾯跟着变量的名称
  2. 变量名必须以字母或者下划线字符开始
  3. 变量名只能包含字⺟、数字以及下划线(A-z、0-9 和 _ )
  4. 变量名不能包含空格
  5. 变量名是区分大小写的(yy 和 Y 是两个不同的变量)

php是弱类型语⾔,不必向 PHP 声明该变量的数据类型

PHP 变量作用域

PHP 有四种不同的变量作⽤域: ● local ● global ● static ● paramete

要在⼀个函数中访问⼀个全局变量,需要使⽤ global 关键字。

<?php
$x=5; // 全局变量
function myTest()
{
$y=10; // 局部变量
/*global $x;  //若有声明,则x输出结果应与下面相同*/
echo "<p>测试函数内变量:<p>";
echo "变量x 为: $x";
echo "<br>";
echo "变量y 为: $y";
}
myTest();
echo "<p>测试函数外变量:<p>";
echo "变量x 为: $x";
echo "<br>";
echo "变量y 为: $y"; //函数内的局部变量是不能在函数外使用的
?>

image-20251110203128236.png

image-20251110203211656.png

PHP 超级全局变量

超级全局变量在PHP 4.1.0之后被启⽤, 是PHP系统中⾃带的变量,在⼀个脚本的全部作⽤域中都可⽤。

PHP 超级全局变量列表:

$GLOBALS		#包含了全部变量的全局组合数组
$_SERVER		#包含了诸如头信息header、路径path、以及脚本位置script locations等等信息的数组。
$_REQUEST		#用于收集HTML表单提交的数据
$_POST			#使⽤超级全局变量 $_POST 来收集http协议中post⽅法传输的数据
$_GET			#使⽤超级全局变量 $_POST 来收集http协议中get⽅法传输的数据
$_FILES
$_ENV
$_COOKIE
$_SESSION

PHP 常量

PHP 中的常量是指⼀旦定义后其值不能被改变的标识符。常量可以⽤ define() 函数或 const 关键字来定义。⼀个常量由英⽂字⺟、下划线、和数字组成,但数字不能作为⾸字⺟出现。 (常量名不需要加 $ 修饰符)。常量在整个脚本中都可以使⽤。

常量的特性

  1. 不变性

  2. 全局作⽤域

  3. 数据类型:常量的值可以是标量数据类型(如布尔值、整数、浮点数、字符串)或数组(PHP 7 及以上本)。

  4. 区分⼤⼩写

<?php
// 区分⼤⼩写的常量名
define("GREETING", "hello world!");
echo GREETING;
echo '<br>';
echo greeting;  // 输出"greeting",但是有警告信息,表示该常量未定义
echo '<br>';
// 不区分⼤⼩写的常量名
define("GREETING", "hello world!", true);
echo greeting;
?>

image-20251111165858953.png

预定义常量

PHP 提供了⼀些预定义常量,可以在脚本中直接使⽤。这些常量通常⽤于获取PHP 的配置信息、版本信息等。

PHP_VERSION :当前 PHP 解析器的版本。 PHP_OS :服务器的操作系统。 PHP_INT_MAX :最⼤的整数值。 E_ERRORE_WARNINGE_PARSE 等:错误报告级别

echo PHP_VERSION; // 输出php 版本,例如"7.4.1"
echo PHP_OS;  // 输出操作系统,例如"Linux"
echo PHP_INT_MAX; // 输出最⼤的整数值,例如"9223372036854775807"

魔术常量

PHP 向它运⾏的任何脚本提供了⼤量的预定义常量。不过很多常量都是由不同的扩展库定义的,只有在加载了这些扩展库时才会出现,或者动态加载后,或者在编译时已经包括进去了。有⼋个魔术常量它们的值随着它们在代码中的位置改变⽽改变。

__LINE__:⽂件中的当前⾏号。

__FILE__:⽂件的完整路径和⽂件名。如果⽤在被包含⽂件中,则返回被包含的⽂件名。

__DIR__:⽂件所在的⽬录。如果⽤在被包括⽂件中,则返回被包括的⽂件所在的⽬录。

<?php
echo '该⽂件位于" '  .__FILE__ . ' " <br>';
echo '该代码的⾏号" '  .__LINE__ . ' " <br>';
echo '该⽂件⽬录位于" '  .__DIR__ . ' " ';
?>

image-20251111170527854.png 更多魔术常量参考:

PHP 魔术常量 | 菜鸟教程

PHP 数据类型

PHP 变量存储不同的类型的数据,不同的数据类型可以做不⼀样的事情。

PHP ⽀持以下⼏种数据类型:

  1. String(字符串)
  2. Integer(整型)
  3. Float(浮点型)
  4. Boolean(布尔型)
  5. Array(数组)
  6. Object(对象)
  7. NULL(空值)
  8. Resource(资源类型)

PHP 字符串

⼀个字符串是⼀串字符的序列,就像 "Hello world!"。你可以将任何⽂本放在单引号和双引号中:

<?php
$x = "Hello world!";
echo $x;
echo "<br>";
$x = 'Hello world!';
echo $x;
?>

在创建字符串之后,我们就可以对它进⾏操作了。在PHP 中,只有⼀个字符串运算符。并置运算符(.) ⽤于把两个字符串值连接起来。

<?php
$txt1="Hello world!";
$txt2="What a nice day!";
echo $txt1 . " " . $txt2;
?>

image-20251111171222019.png

有时知道字符串值的⻓度是很有⽤的。strlen() 函数返回字符串的⻓度(字节数),下⾯的代码将输出:12

<?php
echo strlen("Hello world!");
?>

在字符串内查找⼀个字符或⼀段指定的⽂本,可以⽤strpos() 函数,如果在字符串中找到匹配,该函数会返回第 ⼀个匹配的字符位置。如果未找到匹配,则返回FALSE。下⾯的代码将输出:6

<?php
echo strpos("Hello world!","world");
?>

PHP 整型

整数是⼀个没有⼩数的数字。整数规则:

  1. 整数必须⾄少有⼀个数字 (0-9)
  2. 整数不能包含逗号或空格
  3. 整数是没有⼩数点的
  4. 整数可以是正数或负数
  5. 整型可以⽤三种格式来指定:⼗进制, ⼗六进制( 以 0x 为前缀)或⼋进制(前缀为 0)
<?php
$x = 5985;
var_dump($x);
echo "<br>";
$x = -345; // 负数
var_dump($x);
echo "<br>";
$x = 0x8C; // ⼗六进制数
var_dump($x);
echo "<br>";
$x = 047; // ⼋进制数
var_dump($x);
?>

PHP 浮点型

浮点数是带⼩数部分的数字,或是指数形式。 x=10.365;x = 10.365; x = 2.4e3;

PHP 布尔型

布尔型可以是 TRUE 或 FALSE,布尔型通常⽤于条件判断。 x=true;x=true; y=false;

PHP 数组

数组是⼀个能在单个变量中存储多个值的特殊变量。

遍历数组:

<?php
$cars=array("Volvo","BMW","Toyota");
var_dump($cars);
?>

image-20251111175111190.png

创建数组:

<?php
$cars=array("Volvo","BMW","Toyota");
// $cars[0]="Volvo";
// $cars[1]="BMW";
// $cars[2]="Toyota";
echo "I like " . $cars[0] . ", " . $cars[1] . " and " . $cars[2] . ".";
?>

关联数组 - 带有指定的键的数组,每个键关联⼀个值

<?php
$age=array("Peter"=>"35","Ben"=>"37","Joe"=>"43");
// $age['Peter']="35";
// $age['Ben']="37";
// $age['Joe']="43";
echo "Peter is " . $age['Peter'] . " years old.";
?>

多维数组 - 包含⼀个或多个数组的数组

PHP NULL 值

NULL 值表示变量没有值。NULL 是数据类型为 NULL 的值。

可以通过设置变量值为 NULL 来清空变量数据:

<?php
$x="Hello world!";
$x=null;
var_dump($x);
?>

PHP 类型比较

松散⽐较:使⽤两个等号 == ⽐较,只⽐较值,不⽐较类型。 严格⽐较:⽤三个等号 === ⽐较,除了⽐较值,也⽐较类型

<?php
if(42 == "42") {
echo '1、值相等';
}
echoPHP_EOL; // 换⾏符
if(42 === "42") {
echo '2、类型相等';
} else {
echo '3、类型不相等';
}
?>

image-20251111175601526.png

PHP中 ⽐较 0、false、null

<?php
echo '0 == false: ';		
var_dump(0 == false);		0 == false: bool(true)
echo '0 === false: ';
var_dump(0 === false);		0 === false: bool(false)
echoPHP_EOL;
echo '0 == null: ';			
var_dump(0 == null);		0 == null: bool(true)
echo '0 === null: ';		
var_dump(0 === null);		0 === null: bool(false)
echoPHP_EOL;
echo 'false == null: ';		
var_dump(false == null);	false == null: bool(true)
echo 'false === null: ';
var_dump(false === null);	false === null: bool(false)
echoPHP_EOL;
echo '"0" == false: ';
var_dump("0" == false);		"0" == false: bool(true)
echo '"0" === false: ';
var_dump("0" === false);	"0" === false: bool(false)
echoPHP_EOL;
echo '"0" == null: ';
var_dump("0" == null);		"0" == null: bool(false)
echo '"0" === null: ';
var_dump("0" === null);		"0" === null: bool(false)
echoPHP_EOL;
echo '"" == false: ';
var_dump("" == false);		"" == false: bool(true)
echo '"" === false: ';
var_dump("" === false);		"" === false: bool(false)
echoPHP_EOL;
echo '"" == null: ';
var_dump("" == null);		"" == null: bool(true)
echo '"" === null: ';
var_dump("" === null);		"" === null: bool(false)
# 下⾯这些都是‘假’
false ==  0  ==  null == ""

PHP 运算符

PHP 算术运算符

运算符名称描述实例结果
x + yx 和 y 的和2 + 24
x - yx 和 y 的差5 - 23
x * yx 和 y 的积5 * 210
x / yx 和 y 的商15 / 53
x % y模(除法的余数)x 除以 y 的余数5 % 2 10 % 8 10 % 21 2 0
-x设置负数取 x 的相反符号<?php $x = 2; echo -$x; ?>-2
~x取反x 取反,按二进制位进行"取反"运算。运算规则:~1=-2; ~0=-1;<?php $x = 2; echo ~$x; ?>-3
a . b并置连接两个字符串"Hi" . "Ha"HiHa

PHP 赋值运算符

运算符等同于描述
x = yx = y左操作数被设置为右侧表达式的值
x += yx = x + y
x -= yx = x - y
x *= yx = x * y
x /= yx = x / y
x %= yx = x % y模(除法的余数)
a .= ba = a . b连接两个字符串

PHP 递增/递减运算符

运算符名称描述
++ x预递增x 加 1,然后返回 x
x ++后递增返回 x,然后 x 加 1
-- x预递减x 减 1,然后返回 x
x --后递减返回 x,然后 x 减 1

PHP 比较运算符

运算符名称描述实例
x == y等于如果 x 等于 y,则返回 true5==8 返回 false
x === y绝对等于如果 x 等于 y,且它们类型相同,则返回 true5==="5" 返回 false
x != y不等于如果 x 不等于 y,则返回 true5!=8 返回 true
x <> y不等于如果 x 不等于 y,则返回 true5<>8 返回 true
x !== y不绝对等于如果 x 不等于 y,或它们类型不相同,则返回 true5!=="5" 返回 true
x > y大于如果 x 大于 y,则返回 true5>8 返回 false
x < y小于如果 x 小于 y,则返回 true5<8 返回 true
x >= y大于等于如果 x 大于或者等于 y,则返回 true5>=8 返回 false
x <= y小于等于如果 x 小于或者等于 y,则返回 true5<=8 返回 true

PHP 逻辑运算符

运算符名称描述实例
x and y如果 x 和 y 都为 true,则返回 truex=6 y=3 (x < 10 and y > 1) 返回 true
x or y如果 x 和 y 至少有一个为 true,则返回 truex=6 y=3 (x==6 or y==5) 返回 true
x xor y异或如果 x 和 y 有且仅有一个为 true,则返回 truex=6 y=3 (x==6 xor y==3) 返回 false
x && y如果 x 和 y 都为 true,则返回 truex=6 y=3 (x < 10 && y > 1) 返回 true
x || y如果 x 和 y 至少有一个为 true,则返回 truex=6 y=3 (x==5 || y==5) 返回 false
! x如果 x 不为 true,则返回 truex=6 y=3 !(x==y) 返回 true

PHP 数组运算符

运算符名称描述
x + y集合x 和 y 的集合
x == y相等如果 x 和 y 具有相同的键/值对,则返回 true
x === y恒等如果 x 和 y 具有相同的键/值对,且顺序相同类型相同,则返回 true
x != y不相等如果 x 不等于 y,则返回 true
x <> y不相等如果 x 不等于 y,则返回 true
x !== y不恒等如果 x 不等于 y,则返回 true

三元运算符

对 expr1 求值为 TRUE 时的值为 expr2,在 expr1 求值为 FALSE 时的值为 expr3。

(expr1) ? (expr2) : (expr3) 

PHP 条件语句

if 语句

if (条件)
{
条件成⽴时要执⾏的代码;
}

if...else 语句

if (条件)
{
	条件成⽴时执⾏的代码;
}
else
{
	条件不成⽴时执⾏的代码;
}

if...elseif....else 语句

if (条件)
{
	if 条件成⽴时执⾏的代码;
}
elseif (条件)
{
	elseif 条件成⽴时执⾏的代码;
}
else
{
条件不成⽴时执⾏的代码;
}

switch 语句

<?php
switch (expression) {
	case value1:
		// 代码块1
		break;
	case value2:
		// 代码块2
		break;
	// 更多的case 语句
	default:
		// 如果没有匹配的值
}
?>

expression 是要被⽐较的表达式。

case value: 是可能的值,如果 expression 的值等于某个 case 的值,就执⾏相应的代码块。

break; ⽤于终⽌ switch 语句,防⽌继续执⾏下⼀个 case 。

default: 是可选的,⽤于指定当没有匹配的 case 时执⾏的代码块。

PHP 循环语句

while 循环

while (条件)
{
要执⾏的代码;
}

do...while 语句

do
{
要执⾏的代码;
}
while (条件);

for 循环

for (初始值; 条件; 增量)
{
要执⾏的代码;
}

foreach 循环

foreach 循环⽤于遍历数组。

遍历数值数组,每进⾏⼀次循环,当前数组元素的值就会被赋值给$value 变量(数组指针会逐⼀地移动),在 进⾏下⼀次循环时,您将看到数组中的下⼀个值。

foreach ($array as $value)
{
	要执⾏代码;
}

遍历关联数组,每⼀次循环,当前数组元素的键与值就都会被赋值给keykey 和 value 变量(数字指针会逐⼀地移动),在进⾏下⼀次循环时,你将看到数组中的下⼀个键与值。

foreach ($array as $key => $value)
{
	要执⾏代码;
}

PHP 函数

创建函数

函数名称以字⺟或下划线开头(不能以数字开头)

<?php
	function functionName()
	{
	// 要执⾏的代码
	}
?>

添加参数

为了给函数添加更多的功能,我们可以添加参数,参数类似变量。参数就在函数名称后⾯的⼀个括号内指定。

<?php
function test($a,$b)
{
	echo $a . " 和" . $b . "是好朋友!<br>";
}
test("张三","李四");
test("a","b");
?>

返回值

如需让函数返回⼀个值,请使⽤ return 语句。

<?php
function add($x,$y)
{
	$total=$x+$y;
	return $total;
}
echo "1 + 1 = " . add(1,1);
?>

变量函数

变量函数是指在 PHP 中,将⼀个变量作为函数名来调⽤的函数。

变量函数不适⽤于此类语⾔结构 如 echo、print、unset()、isset()、empty()、include、require 、eval等

<?php
function foo() {
echo "In foo()<br />\n";
}
function bar($arg = '')
{
	echo "In bar(); argument was '$arg'.<br />\n";
}
// 使⽤echo 的包装函数
function echoit($string)
{
	echo $string;
}
$func = 'foo'; //此处''和""都一样
$func();  // 调⽤foo()
$func = 'bar';
$func('test');  // 调⽤bar()
$func = 'echoit';
$func('test');  // 调⽤echoit()
?>

image-20251111194941095.png

PHP 面向对象

类(Class):类是对象的模板或蓝图,它定义了对象的属性和⽅法。类可以看作是⼀种⽤户⾃定义的数据类型。

对象(Object):对象是类的实例,它是具体存在的数据结构,包含了类中定义的属性和⽅法。

封装(Encapsulation):封装是将数据和操作封装在对象中的过程,通过将数据隐藏在对象内部,只暴露有限的接⼝给外部,实现了数据的保护和安全性。

继承(Inheritance):继承是指⼀个类(⼦类)可以继承另⼀个类(⽗类)的属性和⽅法。⼦类可以通过继承和扩展来重⽤⽗类的代码,并且可以添加新的功能。

多态(Polymorphism):多态允许不同类的对象对同⼀消息做出响应,提供了⼀种统⼀的接⼝以处理不同 类的对象

类定义

<?php
class phpClass {
	var $var1;
	var $var2 = "constant string";
    
	function myfunc ($arg1, $arg2) {
		[..]
	}
	[..]
}
?>

解析如下: 类使⽤ class 关键字后加上类名定义。 类名后的⼀对⼤括号({})内可以定义变量和⽅法。 类的变量使⽤ var 来声明, 变量也可以初始化值。 函数定义类似 PHP 函数的定义,但函数只能通过该类及其实例化的对象访问

创建对象

类创建后,我们可以使⽤ new 运算符来实例化该类的对象:

$runoob = new 类名();
$taobao = new 类名();

调用成员方法

类成员变量和成员函数都是一样的方法

// 调⽤成员函数,设置标题和URL
$runoob->setTitle( "菜⻦教程" );
$taobao->setTitle( "淘宝" );
$google->setTitle( "Google 搜索" );

$runoob->setUrl( 'www.runoob.com' );
$taobao->setUrl( 'www.taobao.com' );
$google->setUrl( 'www.google.com' );

// 调⽤成员函数,获取标题和URL
$runoob->getTitle();
$taobao->getTitle();
$google->getTitle();

$runoob->getUrl();
$taobao->getUrl();
$google->getUrl();

构造函数

构造函数是⼀种特殊的⽅法。主要⽤来在创建对象时初始化对象, 即为对象成员变量赋初始值,在创建对象的语句中与 new 运算符⼀起使⽤。

void __construct ([mixed $args [, $... ]] )

在上⾯的例⼦中我们就可以通过构造⽅法来初始化urlurl 和 title 变量

<?php
class test {
	var $url;
    var $title;

	function __construct( $par1, $par2 ) {
		$this->url = $par1;   //$this是类本身
		$this->title = $par2;
	}
}

$runtest = new test(1, 2);  //调用构造函数来初始化对象
echo $runtest->url."<br>";
echo $runtest->title;
?>

image-20251111200647760.png

析构函数

析构函数(destructor) 与构造函数相反,当对象结束其⽣命周期时(例如对象所在的函数已调⽤完毕),系统⾃动执⾏析构函数。PHP 5 引⼊了析构函数的概念,这类似于其它⾯向对象的语⾔,其语法格式如下:

void __destruct (void )
<?php
class MyDestructableClass {
	function __construct() {
		print "构造函数<br>";
		$this->name = "MyDestructableClass";
	}
	function __destruct() {
		print "销毁" . $this->name . "<br>";
	}
}
$obj = new MyDestructableClass();
?>

image-20251111201233196.png

继承

PHP 使⽤关键字 extends 来继承⼀个类,PHP 不⽀持多继承,格式如下:

class Child extends Parent {
	// 代码部分
}

示例:

<?php
// ⼦类扩展站点类别
class Child_Site extends Site {
	var $category;
	function setCate($par){
		$this->category = $par;
	}
	function getCate(){
		echo $this->category .PHP_EOL;
	}
}

调⽤⽗类构造⽅法

PHP 不会在⼦类的构造⽅法中⾃动的调⽤⽗类的构造⽅法。要执⾏⽗类的构造⽅法,需要在⼦类的构造⽅法中调⽤ parent::__construct() 。注:若无构造函数,子类自动继承BaseClass 的构造⽅法

<?php
class BaseClass {
	function __construct() {
		print "BaseClass 类中构造⽅法<br>" .PHP_EOL;
	}
}
class SubClass extends BaseClass {
	function __construct() {
		parent::__construct();  // ⼦类构造⽅法不能⾃动调⽤⽗类的构造⽅法
		print "SubClass 类中构造⽅法<br>" .PHP_EOL;
	}
}
class OtherSubClass extends BaseClass {
	// 若无构造函数,子类自动继承BaseClass 的构造⽅法
}
// 调⽤BaseClass 构造⽅法
$obj = new BaseClass();

// 调⽤BaseClass、SubClass 构造⽅法
$obj = new SubClass();

// 调⽤BaseClass 构造⽅法
$obj = new OtherSubClass();
?>

image-20251111201933644.png

方法重写

如果从⽗类继承的⽅法不能满⾜⼦类的需求,可以对其进⾏改写,这个过程叫⽅法的覆盖(override),也称为⽅法的重写。

function getUrl() {
	echo $this->url .PHP_EOL;
	return $this->url;
}
function getTitle(){
	echo $this->title .PHP_EOL;
	return $this->title;
}

PHP 包含文件

在 PHP 中,您可以在服务器执⾏ PHP ⽂件之前在该⽂件中插⼊⼀个⽂件的内容。 includerequire 语句⽤于在执⾏流中插⼊写在其他⽂件中的有⽤的代码。

include 和 require 除了处理错误的⽅式不同之外,在其他⽅⾯都是相同的: require ⽣成⼀个致命错误(E_COMPILE_ERROR),在错误发⽣后脚本会停⽌执⾏。 include ⽣成⼀个警告(E_WARNING),在错误发⽣后脚本会继续执⾏。

被包含⽂件⽆论后缀如何,都会被当成php⽂件执⾏

语法

filename可以是任意⽂件后缀,filename中的内容都会被当作php代码执⾏。

include 'filename';
或者
require 'filename';

基础实例

假设我们有⼀个定义变量的包含⽂件("vars.php")

<?php
$color='red';
$car='BMW';
?>

这些变量可⽤在调⽤⽂件中:

<?php
	include 'vars.php';
	// $color='red';
	// $car='BMW';
	echo "I have a $color $car"; // I have a red BMW
?>

image-20251111202821127.png

PHP 操作MySQL

通过 PHP,您可以连接和操作数据库。PHP 5 及以上版本建议使⽤以下⽅式连接 MySQL : MySQLi extension ("i" 意为 improved) PDO (PHP Data Objects)

连接 MySQL

在我们访问 MySQL 数据库前,我们需要先连接到数据库服务器:

<?php
$servername = "localhost";
$username = "root";
$password = "root";
// 创建连接
$conn = new mysqli($servername, $username, $password);
// 检测连接
if ($conn->connect_error) {
die("连接失败: " . $conn->connect_error);
}
echo "连接成功";
// 关闭连接
$conn->close();
?>

image-20251111203358984.png

读取数据

SELECT 语句⽤于从数据表中读取数据: SELECT column_name(s) FROM table_name

我们可以使⽤ * 号来读取所有数据表中的字段: SELECT * FROM table_name

<?php
$servername = "localhost";
$username = "root";
$password = "root";
$dbname = "mysql"; //数据库名称

// 创建连接
$conn = new mysqli($servername, $username, $password, $dbname);

// Check connection
if ($conn->connect_error) {
	die("连接失败: " . $conn->connect_error);
}

$user = $_GET['user'];

$sql = "SELECT * FROM user where user = '" . $user . "'";
$result = $conn->query($sql);

if ($result->num_rows > 0) {
	// 输出数据
	while($row = $result->fetch_assoc()) {
		//echo "id: " . $row["id"]. " - Name: " . $row["firstname"]. " ". $row["lastname"]. "<br>";
		var_dump($row);
	}
} else {
echo "0 结果";
}
$conn->close();
?>

PHP Cookie

创建 Cookie

语法:

setcookie(name, value, expire, path, domain);

示例:

<?php
	setcookie("user", "test", time()+3600);
?>

取回 Cookie 的值

<?php
	// 输出cookie 值
	echo $_COOKIE["user"];
	// 查看所有cookie
	print_r($_COOKIE);
?>

image-20251111204144440.png

删除 Cookie

<?php
	// 设置cookie 过期时间为过去1 ⼩时
	setcookie("user", "test", time()-3600);
?>