[TOC]
php调试环境搭建
phpstudy
(以往笔记有教程)
vscode
(以往笔记有教程)
中文语言包
Vscode默认是英⽂显示,不习惯的可以安装中⽂语⾔包进⾏汉化处理,安装完成之后,重启vscode即可显示中⽂。如果重启vscode后,中⽂仍然没有⽣效,那么可以尝试配置VScode的显示语⾔。在VScode中,按下“Ctrl+Shift+P”快捷键,打开命令⾯板。在命令⾯板的输⼊框中,输⼊“Configure DisplayLanguage”,然后按下回⻋键。在弹出的语⾔列表中,选中“zh-cn”(简体中⽂)选项
php调试插件
配置Open PHP/HTML/JS In Browser插件(该插件是用来快捷访问网站的)
右键点击第一个选项,就会直接打开网页
配置xdebug
使⽤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
新建一个网站
用vscode打开
创建一个默认的网页文件
点击运行和调试,选择第三个
超时配置
后续将使⽤phpstudy进⾏php代码审计,为了防⽌出现超时问题,可以提前设置好相关参数,在下⾯⽂件末尾加上相关参数
KeepAliveTimeout 50000
MaxKeepAliveRequests 100000
Timeout 600000
FcgidIOTimeout 36000
FcgidIdleTimeout 36000
IPCConnectTimeout 36000
IPCCommTimeout 36000
在软件管理->对应php版本->PHP设置 修改执⾏超时时间
php基础知识
基本php语法
php 文件的特点
- php ⽂件的默认⽂件扩展名是
.php - php 代码以
<?php开始,以?>结束,可以放在⽂档中的任何位置。 - php 中的每个代码⾏都必须以分号结束。分号是⼀种分隔符,⽤于把指令集区分开来。
- 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!";
?>
常⽤的输出函数还有 var_dump() 函数,
var_dump() 是 PHP 中用于输出一个或多个表达式的结构信息的函数,包括表达式的类型和值。如果表达式是数组,它会递归展开值,并通过缩进显示其结构。
php 中的注释
<!DOCTYPE html>
<html>
<body>
<?php
// 这是php 单⾏注释
/*
这是
php 多⾏
注释
*/
?>
</body>
</html>
php的注释在网页源代码中是看不见的
php 变量
- 变量以 $ 符号开始,后⾯跟着变量的名称
- 变量名必须以字母或者下划线字符开始
- 变量名只能包含字⺟、数字以及下划线(A-z、0-9 和 _ )
- 变量名不能包含空格
- 变量名是区分大小写的(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"; //函数内的局部变量是不能在函数外使用的
?>
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 关键字来定义。⼀个常量由英⽂字⺟、下划线、和数字组成,但数字不能作为⾸字⺟出现。 (常量名不需要加 $ 修饰符)。常量在整个脚本中都可以使⽤。
常量的特性
-
不变性
-
全局作⽤域
-
数据类型:常量的值可以是标量数据类型(如布尔值、整数、浮点数、字符串)或数组(PHP 7 及以上本)。
-
区分⼤⼩写
<?php
// 区分⼤⼩写的常量名
define("GREETING", "hello world!");
echo GREETING;
echo '<br>';
echo greeting; // 输出"greeting",但是有警告信息,表示该常量未定义
echo '<br>';
// 不区分⼤⼩写的常量名
define("GREETING", "hello world!", true);
echo greeting;
?>
预定义常量
PHP 提供了⼀些预定义常量,可以在脚本中直接使⽤。这些常量通常⽤于获取PHP 的配置信息、版本信息等。
PHP_VERSION :当前 PHP 解析器的版本。
PHP_OS :服务器的操作系统。
PHP_INT_MAX :最⼤的整数值。
E_ERROR 、 E_WARNING 、 E_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__ . ' " ';
?>
更多魔术常量参考:
PHP 数据类型
PHP 变量存储不同的类型的数据,不同的数据类型可以做不⼀样的事情。
PHP ⽀持以下⼏种数据类型:
- String(字符串)
- Integer(整型)
- Float(浮点型)
- Boolean(布尔型)
- Array(数组)
- Object(对象)
- NULL(空值)
- 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;
?>
有时知道字符串值的⻓度是很有⽤的。strlen() 函数返回字符串的⻓度(字节数),下⾯的代码将输出:12
<?php
echo strlen("Hello world!");
?>
在字符串内查找⼀个字符或⼀段指定的⽂本,可以⽤strpos() 函数,如果在字符串中找到匹配,该函数会返回第 ⼀个匹配的字符位置。如果未找到匹配,则返回FALSE。下⾯的代码将输出:6
<?php
echo strpos("Hello world!","world");
?>
PHP 整型
整数是⼀个没有⼩数的数字。整数规则:
- 整数必须⾄少有⼀个数字 (0-9)
- 整数不能包含逗号或空格
- 整数是没有⼩数点的
- 整数可以是正数或负数
- 整型可以⽤三种格式来指定:⼗进制, ⼗六进制( 以 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 = 2.4e3;
PHP 布尔型
布尔型可以是 TRUE 或 FALSE,布尔型通常⽤于条件判断。 y=false;
PHP 数组
数组是⼀个能在单个变量中存储多个值的特殊变量。
遍历数组:
<?php
$cars=array("Volvo","BMW","Toyota");
var_dump($cars);
?>
创建数组:
<?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、类型不相等';
}
?>
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 + y | 加 | x 和 y 的和 | 2 + 2 | 4 |
| x - y | 减 | x 和 y 的差 | 5 - 2 | 3 |
| x * y | 乘 | x 和 y 的积 | 5 * 2 | 10 |
| x / y | 除 | x 和 y 的商 | 15 / 5 | 3 |
| x % y | 模(除法的余数) | x 除以 y 的余数 | 5 % 2 10 % 8 10 % 2 | 1 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 = y | x = y | 左操作数被设置为右侧表达式的值 |
| x += y | x = x + y | 加 |
| x -= y | x = x - y | 减 |
| x *= y | x = x * y | 乘 |
| x /= y | x = x / y | 除 |
| x %= y | x = x % y | 模(除法的余数) |
| a .= b | a = a . b | 连接两个字符串 |
PHP 递增/递减运算符
| 运算符 | 名称 | 描述 |
|---|---|---|
| ++ x | 预递增 | x 加 1,然后返回 x |
| x ++ | 后递增 | 返回 x,然后 x 加 1 |
| -- x | 预递减 | x 减 1,然后返回 x |
| x -- | 后递减 | 返回 x,然后 x 减 1 |
PHP 比较运算符
| 运算符 | 名称 | 描述 | 实例 |
|---|---|---|---|
| x == y | 等于 | 如果 x 等于 y,则返回 true | 5==8 返回 false |
| x === y | 绝对等于 | 如果 x 等于 y,且它们类型相同,则返回 true | 5==="5" 返回 false |
| x != y | 不等于 | 如果 x 不等于 y,则返回 true | 5!=8 返回 true |
| x <> y | 不等于 | 如果 x 不等于 y,则返回 true | 5<>8 返回 true |
| x !== y | 不绝对等于 | 如果 x 不等于 y,或它们类型不相同,则返回 true | 5!=="5" 返回 true |
| x > y | 大于 | 如果 x 大于 y,则返回 true | 5>8 返回 false |
| x < y | 小于 | 如果 x 小于 y,则返回 true | 5<8 返回 true |
| x >= y | 大于等于 | 如果 x 大于或者等于 y,则返回 true | 5>=8 返回 false |
| x <= y | 小于等于 | 如果 x 小于或者等于 y,则返回 true | 5<=8 返回 true |
PHP 逻辑运算符
| 运算符 | 名称 | 描述 | 实例 |
|---|---|---|---|
| x and y | 与 | 如果 x 和 y 都为 true,则返回 true | x=6 y=3 (x < 10 and y > 1) 返回 true |
| x or y | 或 | 如果 x 和 y 至少有一个为 true,则返回 true | x=6 y=3 (x==6 or y==5) 返回 true |
| x xor y | 异或 | 如果 x 和 y 有且仅有一个为 true,则返回 true | x=6 y=3 (x==6 xor y==3) 返回 false |
| x && y | 与 | 如果 x 和 y 都为 true,则返回 true | x=6 y=3 (x < 10 && y > 1) 返回 true |
| x || y | 或 | 如果 x 和 y 至少有一个为 true,则返回 true | x=6 y=3 (x==5 || y==5) 返回 false |
| ! x | 非 | 如果 x 不为 true,则返回 true | x=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)
{
要执⾏代码;
}
遍历关联数组,每⼀次循环,当前数组元素的键与值就都会被赋值给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()
?>
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 [, $... ]] )
在上⾯的例⼦中我们就可以通过构造⽅法来初始化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;
?>
析构函数
析构函数(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();
?>
继承
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();
?>
方法重写
如果从⽗类继承的⽅法不能满⾜⼦类的需求,可以对其进⾏改写,这个过程叫⽅法的覆盖(override),也称为⽅法的重写。
function getUrl() {
echo $this->url .PHP_EOL;
return $this->url;
}
function getTitle(){
echo $this->title .PHP_EOL;
return $this->title;
}
PHP 包含文件
在 PHP 中,您可以在服务器执⾏ PHP ⽂件之前在该⽂件中插⼊⼀个⽂件的内容。
include 和 require 语句⽤于在执⾏流中插⼊写在其他⽂件中的有⽤的代码。
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
?>
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();
?>
读取数据
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);
?>
删除 Cookie
<?php
// 设置cookie 过期时间为过去1 ⼩时
setcookie("user", "test", time()-3600);
?>