概念:
php类定义'class'开头{}
包裹类的实现
类(实例化)
生成对象需要使用关键字'new',对象在销毁之后会系统自动回收内存
类当中的属性:
php的属性必须
表明访问控制权限(public,private,protected)
,属性名跟变量的命名规则一样
eg :public $name = '汽车';
引用对象属性对象->属性名称(不需要$)
类当中的方法:
php类中的方法分为对象方法和静态方法,而且php的类存在构造方法(创建对象时必然执行该方法)__construct
和析构方法(对象销毁必然执行该方法)__destruct
;默认的方法是对象方法,如果要声明为静态方法只需要在function
关键字前添加关键字static
;构造方法和析构方法属于静态方法,通常不需要手动执行;调用对象方法使用指向符->
,调用静态方法使用类名加::
来调用eg :Response::json();
方法同样可以表明访问控制权限
特殊关键字:
parent
,self
,$this
这三个关键字都用于类的实现内部。parent
和self
都代表类parent
代表父类,self
代表类本身;$this
代表实例化的对象;
继承
php继承关键字extends
class Response{
//属性
public $name = '汽车';
private $name1 = '汽车';
protected $name2 = '汽车';
public static function json($code,$message = "",$data)
{
if(!is_numeric($code))
{
return null;
}
$result = array(
"code" => $code,
"message" => $message,
"body" => $data
);
echo json_encode($result);
}
//构造方法
function __construct()
{
parent::__construct();
}
//析构方法
function __destruct()
{
}
//静态方法
static function testStatic1()
{
return "静态方法测试";
}
static function testStatic2()
{
return self::testStatic1();
}
//对象方法
function testInstance1()
{
return "实例方法测试";
}
function testInstance2()
{
$this->testInstance1();
}
}
//继承
class Car
{
}
class Truck extends Car
{
}
PHP对象重载
PHP中的重载与其他语言的重载不同,PHP中的重载指的是动态的创建属性与方法
,是通过魔术方法来实现的。
重载属性
:
属性的重载通过__set
,__get
,__isset
,__unse
t来分别实现对不存在属性的赋值、读取、判断属性是否设置、销毁属性。
方法重载
:
使用__call
实现方法的重载。
//name属性动态创建并赋值
class Car {
private $ary = array();
public function __set($key, $val) {
$this->ary[$key] = $val;
}
public function __get($key) {
if (isset($this->ary[$key])) {
return $this->ary[$key];
}
return null;
}
public function __isset($key) {
if (isset($this->ary[$key])) {
return true;
}
return false;
}
public function __unset($key) {
unset($this->ary[$key]);
}
}
$car = new Car();
$car->name = '汽车'; //name属性动态创建并赋值
echo $car->name;
//动态添加方法
class Car {
public $speed = 10;
public function __call($name, $args) {
if ($name == 'speedDown') {
$this->speed -= 10;
}
}
}
$car = new Car();
$car->speedDown(); //调用不存在的speedDown方法
echo $car->speed;
PHP对象高级特性
对象比较
:当同一个类的两个实例的所有属性都相等时,可以使用比较运算符==进行判断,当需要判断两个变量是否为同一个对象的引用时,可以使用全等运算符===进行判断。
对象复制
:可以通过关键字clone来复制一个对象,这时__clone方法会被调用(需要自己实现),通过这个魔术方法来设置属性的值。
对象序列化
:可以通过serialize方法将对象序列化为字符串,用于存储或者传递数据,然后在需要的时候通过unserialize将字符串反序列化成对象进行使用。
//对象比较
class Car {
}
$a = new Car();
$b = new Car();
if ($a == $b) echo '=='; //true
if ($a === $b) echo '==='; //false
//对象复制
class Car {
public $name = 'car';
public function __clone() {
$obj = new Car();
$obj->name = $this->name;
}
}
$a = new Car();
$a->name = 'new car';
$b = clone $a;
var_dump($b);
//对象序列化
class Car {
public $name = 'car';
}
$a = new Car();
$str = serialize($a); //对象序列化成字符串
echo $str.'<br>';
$b = unserialize($str); //反序列化为对象
var_dump($b);