文章目录
1 认识PHP
1.1 PHP简介
PHP是一种广泛使用的开源服务器端脚本语言,主要用于Web开发,它可以嵌入到HTML中,特别适合用于创建动态网页和web应用程序。
1.2 主要的特点
易于学习和使用:
PHP的语法类似于c,java等语言,对于有编程基础的开发人员来说,很容易上手,当然没有基础的话也不需要担心,PHP的语法相对的简单,新手学习也会比较轻松
PHP适合快速开发项目,在经费不充裕或者时间短的情况下,是非常好的选择,它提供了丰富的函数库和扩展,能够快速的实现各种功能,例如数据库连接,文件操作,图像处理,会话管理等
1.3 跨平台性
可以在多种操作系统上运行,如windows,Linux,macos等,PHP在不同的服务器环境下有良好的工作
1.4 与数据库的良好集成
可以方便的与各种数据库系统进行交互,如MySQL,Oracle等实现数据库的存储,检索,更新和删除等操作
1.5 开源和社区支持
作为开源语言,PHP拥有庞大的开发者社区,开发人员可以共享代码,经验和解决方案,大量的开源框架和工具可以使用的,提高了开发的效率
1.6 应用场景
1.6.1 网站开发
可以用于开发各种类型的网站,从简单的个人博客到复杂的电子商务网站和社交网络
1.6.2 内容的管理程序
许多流行的CMS(一种用于创建,管理,发布和修改数字内容的软件系统)都是使用PHP开发的,方便用户管理网站的内容
1.6.3 Web应用程序开发
创建在线的论坛,在线投票系统,电子邮件系统等
1.6.4 为什么学习了解PHP
- 第二阶段的很多的靶场,都是由php语言区写的,学习php有助于后续的漏洞和攻防的学习
- 黑客攻击的网站不一定都是一种编写的,我们后续还会去学习新的语言,以php作为切入点,后续我们学习其他语言也会比较轻松简单
2 PHP的基础语法
写php会用到的工具:phpstorm专门用于写php的一个工具
2.1 创建第一个PHP程序
php脚本以;
结束
php中的每个代码都必须以;
结束,分号是一种分隔符,用于把指令集分开来
php中代码的缩进主要是为了提高代码的可读性和可维护性,可以适当的缩进
通过php有两种在浏览器输出文本的指令:echo
和print
echo
和print
的区别:
echo
:可以输出一个或者多个数据print
:只允许输出一个数据
提示:echo
输出的速度比print
的快
<?php
#当所有要输出的数据都是用引号包裹的时候,用英文的点进行分隔
#当所有要输出的数据有有引号有不用引号的情况下,用英文的逗号分隔
echo "hello"."<br>"; #默认不换行的
echo "liuxiao", 1234,"<br>";
print "hello";
?>
2.2 如何写注释
注释就是对代码的解释说明,注释是方便程序员可以看到的
注释是代码中不会被执行的文本,用于:
-
解释代码功能
-
临时禁用代码
-
方便团队协作阅读代码
注释的三种方法:
//单行注释
#也是单行的注释
禁用代码或给代码添加备注的时候会用到
/*多
行
注
释*/ 只要被/**/包裹住的全部更改为注释
2.3 PHP的变量
变量:是程序中一个用于临时存储数据的容器,这个容器在程序启动后存在,在程序停止后销毁
PHP变量与代数类似,例如:
x=5
y=6
z=x+y
在代数,我们使用字母(如x
),并给它赋值(等于5)从上面的表达式z=x+y
,我们可以计算出z
的值为11,在php中,这些字母被称为变量,变量可以是很短的名称(如x
和y
)或者更具描述的名称
变量的命名规则
-
变量以
$
符号开始,后面跟着变量的名称 -
变量名必须以
字母
或者下划线
字符开始 -
变量名只能包含
字母
,数字
以及下划线
(A-z,0-9和_)不能包含空格的
变量是用于存储数据的容器;php语句和php变量都是区分大小写的
<?php
//变量设置$开始 变量值不能是数字
$name = "刘小"
$a1 = 20;
$a2 = 30;
?>
2.4 PHP变量声明
/*趣味实验:
我今天一共有一百块钱,买水果花了43,买菜花了19,现在还有多少?*/
<?php
//变量设置$开始 变量值不能是数字
$name = "老王";
$a1 = 43;
$a2 = 19;
$a3 = 100;
//我今天一共有一百块钱,买水果花了43,买菜花了19,现在还有多少?
$a = 100-43-19; #$a = $a3-$a2-$a1;
echo "我今天一共有一百块钱,买水果花了43,买菜花了19,现在还有",$a,"元";
?>
2.5 数据类型
在php中变量可以存储不同的类型的数据,在不同数据类型可以做不一样的事情。
2.5.1 字符串类型(string)
#在编程中用引号包裹起来的一串字符就是字符串数据
#一个字符串就是一串字符数据
#在php中用单引号或者双引号包裹
$aa = "我是一个整数";
echo $aa;
#字符串拼接
$ab = "我是成绩第一";
echo $aa.$ab;
#当所有要输出的数据都是用引号包裹的时候,用英文的点进行分隔
2.5.2 整数类型(integer)
/*整数必须至少有一个数字
整数不能包含空格
整数是没有小数的
整数可以是正数或者负数*/
//整数类型
$int1 = 10;
$int2 = -20;
echo "int1=",$int1,"int2=",$int2,"<br>"; #换行
# var_dump(要查看信息的数据)
var_dump($int2);
2.5.3 浮点数类型(float)
// 浮点数类型(小数) -Float
$fo1 = 3.14;
$fo2 = -3.14;
print "<br>";
echo "fo1=",$fo1,"fo2=",$fo2,"<br>";
var_dump($fo2) #查看数据的属性
2.5.4 布尔类型(boolean)
什么是布尔类型?
布尔类型非常特殊,其只有两个数据,分别是TRUE
(1)和FALSE
(0)
布尔类型用于?
布尔类型通常用于条件判断,在接下来的学习中你会学到更多关于条件控制的知识。
//布尔类型 (只有两个值)
$bo1 = true;
$bo2 = false;
echo "bo1=",$bo1, "bo2=",$bo2,"<br>";
//bo2输出显示空
var_dump($bo2);
var_dump($bo1);
print "<br>";
2.5.5 数组类型(array)
什么是数组?
由多个值组成的,一个完整的数据序列,就是数组。
数组有什么用?
数组可以在一个变量中存储多个值
如何创建数组?
在php中,array()
函数用于创建一个数组
如何访问索引数组中的值?
数组中的每个值,电脑都会给其标序号,序号从0开始,这个序号我们称为下标 程序员通常通过下标访问数组的每个值。
下标取值语法:数组名{下标}
如何访问关联数组中的值?
关联数组中每个值会对应一个键,程序员通常通过键访问数组的每个值。(键值对)
关联取值语法:数组名{键}
在下边示例中创建了一个数组,然后使用下标取值的方式,打印数组中的每个元素。
//数组类型(由多个值组成的,一个完整的数据序列,就是数组。)
//索引数组
//array(值1, 值2, 值3)
// 下标 0 1 2
//下标取值的语法:数组变量名{下标值}
$li1 = array("张三","李四","王五");
echo "通过下标取值: ",$li1{2};
print "<br>";
//关联数组语法:array(键1=>值1 , 键2=>值2 , 键3=>值3)
//关联取组语法:数值变量名{键}
$li2 = array("姓名"=>"liuxiao","性别"=>"男","年龄"=>"18");
echo "通过键取值: ",$li2{"姓名"};
2.5.6 空值类型(null)
null
值表示变量没有值;可以通过设置变量值为null
来清空变量数据。
//null值
$li2 = null;
echo $li2{"姓名"};
var_dump($li2);
print "<br>";
3 PHP函数
函数是程序员提前定义好的,可以重复使用的代码块;
PHP 的真正威力源自于它的函数。在 PHP 中,提供了超过 1000 个内建的函数。在本章中,将为你讲解如何创建自己的函数。如要在页面加载时执行脚本,可以把它放到函数里。函数是通过调用函数来执行的。你可以在页面的任何位置调用函数。
function 函数名(参数列表){
//要执行的代码
}
3.1 PHP函数准则
- 函数的名称应该提示出它的功能
- 函数名称以字母或下划线开头(不能以数字开头的)
3.1.1 实例
- PHP函数参数
<?php
function add($a,$b){
echo "a+b=$a+$b","<br>";
#函数的执行
add(7,9);
add(31,8);
add(2,6);
add(2131,1232);
?>
- PHP返回值
如果需要函数返回一个值,那么我们就会使用到return
语句
# 基础语法
function 函数名(参数列表){
//要执行的代码
return值;
}
<?php
function acc($c,$d){
//函数的功能代码,返回变量c+d的结果
return $c+$d;
}
//函数的调用
$res1 = acc(1,2);
echo $res1,"<br>";
$res2 = acc(8,9);
echo $res2;
?>
- PHP变量作用域问题
- 局部变量
- 全局变量
- 静态变量
3.1.2 局部变量(Local)
局部变量是在函数或方法内部声明的变量,它们的作用域局限于声明他们的板块(即函数或方法体)内,一旦离开该代码块,这些变量就不能再被访问。
echo "变量的作用域讲解:","<br>";
print "<br>";
function local(){
//局部变量
$x = "我是局部变量"; //在这个函数中创建了个局部变量
echo $x,"<br>"; //在局部中可以用到这个变量
}
local(); //调用这个函数的使用可以看到打印的一个结果
echo $x; //我们要是把echo写在外边的话 可以看到代码是红色的代表错误的,就是不能写在外边的
3.1.3 全局变量(Global)
全局变量是在函数或方法外部声明的变量,他们的作用域是全局的,即在整个脚本中都可以
访问。然而,在函数或方法内部访问全局变量时,需要使用global
关键字
echo "变量的作用域讲解:","<br>";
$y = "我是全局变量";
echo $y; //看一下全局变量的话 是可以写在外边的 但是全局变量也可以写在里边的
print "<br>";
function local(){
//局部变量
$x = "我是局部变量"; //在这个函数中创建了个局部变量
echo $x,"<br>"; //在局部中可以用到这个变量
//全局变量演示
global $y; //声明在局部使用全局变量
echo $y; //我们需要加一个参数 去声明使用我们的全局变量 global
}
local(); //调用这个函数的使用可以看到打印的一个结果
echo $x;
3.1.4 静态变量(Static)
静态变量也是函数或方法内部声明的,但与局部变量不同的是,静态变量的值在函数调用结
束后不会被销毁,他们保持其值,直到下一次函数调用,这意味着静态变量在函数调用之间
保持其状态
<?php
function test01(){
//声明静态变量
static $zz = 0;
$zz ++; //让静态变量产生变化的代码
echo $zz,"<br>";
}
echo $zz; //静态变量还是无法在外部去使用
//他跟普通局部变量的区别,只在于,每次函数调用结束,都会记录静态变量的状态,不会丢失
test01();
test01();
test01();
test01();
?>
3.2 面向对象
面向对象(Object-Oriented
,简称 OO
)是一种编程思想和方法,它将程序中的数据和操作数据的方法封装在一起,形成 ‘对象’ ,并通过对象之间的交互消息传递来完成程序的功能。
面向对象编程强调数据的封装,继承,多态和动态绑定等特性,使得程序具有更好的可扩展性,可维护性和可重用性。
在面向对象的程序设计(英语:Object-oriented programming
,缩写:OOP
)中,对象是一个由信息及对信息进行处理的描述所组成的整体,是对现实世界的抽象。
在现实世界里我们所面对的事情都是对象,如计算机,电视,自行车等
3.2.1 对象的主要三个特征
- 对象的行为:对象可以执行的操作,比如:开灯,关灯就是行为
- 对象的形态:对象不同的行为是如何响应的,比如:颜色,尺寸,外型
- 对象的表示:对象的表示就相当于身份证,具体区分在相同的行为与状态下有什么不同
比如Animal(动物) 是一个抽象类,我们可以具体到一只狗跟一只羊,而狗跟羊就是具体的对象,他们有颜色属性,可以写,可以跑等行为状态。
3.2.2 面向对象编程的三个主要的特性
1.封装(Encapsulation
):指将对象的属性和方法封装在一起,使得外部无法直接访问和
修改对象的内部状态。通过使用访问控制修饰符(public
、private
、protected
)来限制属
性和方法的访问权限,从而实现封装;
2.继承(Inheritance
):指可以创建一个新的类,该类继承了父类的属性和方法,并且可以
添加自己的属性和方法。通过继承,可以避免重复编写相似的代码,并且可以实现代码的重
用;
3.多态(Polymorphism
):指可以使用一个父类类型的变量来引用不同子类类型的对象,
从而实现对不同对象的统一操作。多态可以使得代码更加灵活,具有更好的可扩展性和可维
护性。在 PHP 中,多态可以通过实现接口(interface
)和使用抽象类(abstract class
)来
实现。
3.2.3 面向对象的内容
- 类
定义了一件事物的抽象特点。类的定义包含了数据的形式以及对数据的操作; - 对象
是类的实例; - 成员变量
定义在类内部的变量。该变量的值对外是不可见的,但是可以通过成员函数访问,在类被实例化为对象后,该变量即可成为对象的属性; - 成员函数
定义在类的内部,可用于访问对象的数据; - 继承
继承性是子类自动共享父类数据结构和方法的机制,这是类之间的一种关系。在定义和实现一个类的时候,可以在一个已经存在的类的基础之上来进行,把这个已经存在的类所定义的内容作为自己的内容,并加入若干新的内容; - 父类
一个类被其他类继承,可将该类称为父类,或基类,或超类; - 子类
一个类继承其他类称为子类,也可称为派生类; - 多态
多态性是指相同的函数或方法可作用于多种类型的对象上并获得不同的结果。不同的对象,收到同一消息可以产生不同的结果,这种现象称为多态性; - 重载
简单说,就是函数或者方法有同样的名称,但是参数列表不相同的情形,这样的同名不同参数的函数或者方法之间,互相称之为重载函数或者方法; - 抽象性
抽象性是指将具有一致的数据结构(属性)和行为(操作)的对象抽象成类。一个类就是这样一种抽象,它反映了与应用有关的重要性质,而忽略其他一些无关内容。任何类的划分都是主观的,但必须与具体的应用有关; - 封装
封装是指将现实世界中存在的某个客体的属性与行为绑定在一起,并放置在一个逻辑单元内; - 构造函数
主要用来在创建对象时初始化对象, 即为对象成员变量赋初始值,总与new运算符一起使用在创建对象的语句中; - 析构函数
析构函数(destructor) 与构造函数相反,当对象结束其生命周期时(例如对象所在的函数已调用完毕),系统自动执行析构函数。析构函数往往用来做"清理善后" 的工作(例如在建立对象时用new开辟了一片内存空间,应在退出前在析构函数中用delete释放)。
3.2.4 PHP类定义
PHP定义类通常语法格式如下
class 类名{
//类的属性
//类的构造方法在创建对象时自动调用,用于初始化对象的属性
//类的方法(也称为成员函数)
}
// 定义一个名为 Car 的类
class Car {
// 类的属性(也称为成员变量)
public $color; // 汽车的颜色
public $make; // 汽车的制造商
public $model; // 汽车的型号
// 类的构造方法在创建对象时自动调用,用于初始化对象的属性
public function __construct($color, $make, $model) {
$this->color = $color; // 设置汽车的颜色
$this->make = $make; // 设置汽车的制造商
$this->model = $model; // 设置汽车的型号
}
// 类的方法 用于显示汽车的信息
public function displayInfo() {
// 输出汽车的颜色、制造商和型号信息
echo "这个车是 " . $this->color . " " . $this->make . " " . $this->model . ".";
}
}
下图中我们通过Car 类
创建了三个对象:Mercedes
, Bmw
, 和 Audi
。再调用一下各个汽车对象的方法:
// 创建 Car 类的实例(对象),并初始化其属性
$mercedes = new Car("绿色", "梅赛德斯奔驰", "e300");
$bmw = new Car("蓝色", "宝马", "随便");
$audi = new Car("橙色", "奥迪", "a6");
// 调用对象的方法,显示汽车的信息
$mercedes->displayInfo();
$bmw->displayInfo();
$audi->displayInfo();
3.2.5 小练习
自定义创建一个类用来收集学生信息
<?php
$huan = PHP_EOL;
class infomation{
public $name;
public $age;
public $gender;
public $address;
public $phone;
public $email;
public $password;
public function __construct($name, $age, $gender, $address, $phone, $email, $password){
$this->name = $name;
$this->age = $age;
$this->gender = $gender;
$this->address = $address;
$this->phone = $phone;
$this->email = $email;
$this->password = $password;
}
public function display(){
global $huan;
echo "Name: " , $this->name , $huan;
echo "Age: " , $this->age , $huan;
echo "Gender: " , $this->gender , $huan;
echo "Address: " , $this->address , $huan;
echo "Phone: ", $this->phone, $huan;
echo "Email: ", $this->email, $huan;
echo "Password: ", $this->password, $huan;
}
}
$xiao_wang = new infomation("xiaowang","19","grade one","tianjin","111111","111@qq.com","111111");
$xiao_wang->display();
echo $huan;
$xiao_liu = new infomation("xiaoliu","21","grade two","shandong","222222","222@qq.com","222222");
$xiao_liu->display();
echo $huan;
?>
本文内容源于好课优选教育网络安全培训后的笔记整理!