Web渗透—PHP反序列化 课程学习分享(课程非本人制作,仅提供学习分享)
靶场下载地址:GitHub - mcc0624/php_ser_Class: php反序列化靶场课程,基于课程制作的靶场
课程地址:PHP反序列化漏洞学习_哔哩哔哩_bilibili
一、PHP面向对象基本概念
1.程序开发:面向过程VS面向对象
面向过程
面向过程是一种以“整体事件”为中心的编程思想,编程的时候把解决问题的步骤分析出来,然后用函数把这些步骤实现,在一步一步的具体步骤中再按顺序调用函数
面向对象
面向对象是一种以“对象”为中心的编程思想,把要解决的问题分解成各个“对象”;对象是一个由信息及对信息进行处理的描述所组成的整体,是对现实世界的抽象。
2.类的定义
类是定义了一件事物的抽象特点,它将数据的形式以及这些数据上的操作封装在一起。对象是具有类类型的变量,是对类的实例。
内部构成:成员变量(属性)+成员函数(方法)
成员变量(属性)
定义在类内部的变量。
该变量的值对外是不可见的,但是可以通过成员函数访问,在类被实例化为对象后,该变量即可成为对象的属性。
成员函数(方法)
定义在类的内部,可用于访问对象的数据。
继承:
继承性是子类自动共享父类数据结构和方法的机制,是类之间的一种关系。
在定义和实现一个类的时候,可以在一个已经存在的类的基础上来进行,把一个已经存在的类所定义的内容作为自己的内容,并加入若干新的内容。
父类:一个类被其他类继承,可以将该类称为父类,或基类,超类。
子类:一个类继承其他类称为子类,也可称为派生类。
二、类与对象
类是对象的抽象,而对象是类的具体实例。
类是想法,把类实例化(new),调用具体值后就变成了对象。
1.类的结构
类:定义类名、定义成员变量(属性)、定义成员函数(方法)
class Class_Name{//成员变量声明//成员函数声明
}
2.类的内容
创建一个类:
class hero{ //定义类(类名)var $name; //声明成员变量var $sex; //var是一种修饰符function jineng($var1){ //声明成员函数(方法)echo $this->name; //使用预定义$this调用成员变量echo $var1; //成员函数传参$var1可以直接调用}
}
3.实例化和赋值
$cyj=new hero(); //实例化类hero()为对象cyj
$cyj->name='chengyaojin'; //参数赋值
$cyj->sex='man'; //参数赋值
$cyj->jineng('zoufan'); //调用函数
print_r($cyj); //打印对象cyj
4.类的修饰符介绍
在类中直接声明的变量称为成员属性(也可以称为成员变量)。
可以在类中声明多个变量,即“对象”中可以有多个成员属性,每个变量都存储“对象”不同的属性信息。
访问权限修饰符:对属性的定义
常用访问权限修饰符:
public:公共的,在类的内部、子类中,或者类的外部都可以使用,不受限制;
protected:受保护的,在类的内部、子类中可以使用,但不能在类的外部使用;
private:私有的,只能在类的内部使用,在类的外部或者子类中都无法使用。
类的内部 | 子类 | 类的外部 | |
public | √ | √ | √ |
protected | √ | √ | × |
private | √ | × | × |
class hero{public $name='chengyaojin'; //公有的private $sex='man'; //私有的protected $shengao='165'; //受保护的:内部、子类可用function jineng($var1) {echo $this->name;echo $var1;}
}
class hero{public $name='chengyaojin'; //公有的private $sex='man'; //私有的protected $shengao='165'; //受保护的:内部、子类可用function jineng($var1) {echo $this->name;echo $var1;}
}class hero2 extends hero{function test(){echo $this->name."<br/>"; //public子类可用echo $this->sex."<br/>"; //private子类不可用echo $this->shengao."<br/>"; //protected子类可用}
}
$cyj= new hero();
$cyj2=new hero2();
echo $cyj->name."<br/>"; //外部只可用public
echo $cyj2->test(); //子类内部可用public和protected
5.类的成员方法
在类中定义的函数被称为成员方法。
函数实现的是某个独立的功能;
成员方法实现的是类中的一个行为,是类的一部分。
可以在类中声明多个成员方法,成员方法的声明和函数声明完全一样,只不过在声明成员方法时可以在function关键字前加一些访问权限修饰符,如public、protected、private(可以省略,默认为public
<?php
class Stundents{var $name;public $age;private $sex;protected $school;protected static function Read(){}function Listen(){}
}
?>