前言:
学习php反序列化这不得不提到php的面向对象开发,不多废话,进入正题:
什么是对象:
对象是存储数据和有关如何处理数据的信息的数据类型。是系统中用来描述客观事物的一个实体,它是构成系统的一个基本单位。一个对象由一组属性和对这组属性进行操作的一组服务组成。
php对象的基本结构:
<?php
class Nothing{ //定义类
public $name = 'Tom'; //定义成员属性
public $age = 100;
private $money = 10000;
public function __construct(){ //定义成员方法
echo __CLASS__; //输出类名
}
}
$a = new Nothing(); //实体化类
var_dump($a); // 打印出类
?>
成员属性、方法:
上述代码中name、age、money可以被称作为类中的成员属性。__construct可以被称为是此类中的成员方法。成员变量可以赋值,亦可以再初始化的时候赋值,还可以通过调用构造函数的时候,让构造函数传参赋值。需要注意的是:在进行对象实体化的时候(使用new关键字给对象实体化 ),将自动的调用构造函数方法。
<?php
class haha
{
public $name = 'Tome';
private $sex;
protected $age = 30;
function __construct()
{
echo __CLASS__;
$this->sex='man'; //使用construct初始化对象属性值;
$this->name='Jerry'
;
}
}
$a =new haha();
echo "\n";
echo $a->name;
?>
<?php
class haha
{
public $name = 'Tom';
private $sex;
protected $age = 30;
function __construct($sex1,$name1)
{
echo __CLASS__;
$this->sex=$sex1;
$this->name=$name1;
}
}
$a =new haha('man','Tome');
echo "\n";
echo $a->name;
var_dump($a);
?>
//输出:
haha
Tomeobject(haha)#1 (3)
{
["name"]=>
string(4) "Tome"
["sex":"haha":private]=>
string(3) "man"
["age":protected]=>
int(30)
}
类中的成员常量定义:
在php中的常量定义的方法一般有两个:一是使用define函数定义,二是使用const关键字定义;但是php类中只能使用cosnt进行常量的定义:
析构函数:
对象被销毁的时候自动调用,在php中,程序在运行结束后,会自动的销毁对象!
<?php
class haha
{
public $name = 'Tom';
private $sex;
protected $age = 30;
function __construct($sex1,$name1,$age1)
{
echo __CLASS__;
$this->sex=$sex1;
$this->name=$name1;
$this->age=$age1;
}
public function __destruct(){
echo __FUNCTION__;
}
}
$a =new haha('man','Tome',100);
echo "\n";
echo $a->name;
$a->__construct('male','zhangsenxi',1000);
var_dump($a);
#调用析构方法:
$a->__destruct(); //调用方法--不会销毁对象
echo "\n";
unset($a); //删除对象,释放资源
?>
//输出结果:
haha
Tomehahaobject(haha)#1 (3)
{
["name"]=>
string(10) "zhangsenxi"
["sex":"haha":private]=>
string(4) "male"
["age":protected]=>
int(1000)
}
__destruct //手动调用一次析构函数
__destruct //程序结束后会自动调用一次析构函数