这一节课是php面向对象的最后一节课,主要讲的是匿名类与匿名对象, Trait类的声明与工作原理,类的自动加载,接口声明和实现,对象的克隆技术,对象的克隆技术,对象的序列化与反序列化
代码
实例
<?php class Person { private $name='杨过'; public function postion($name){ return $this->name.'是:'.$name; } } //匿名对象 echo (new Person())->postion('神雕大侠').'<br>'; //匿名类 echo (new class {private $name='杨过'; public function postion($name){ return $this->name.'是:'.$name;}})->postion('独臂大侠');
运行实例 »
点击 "运行实例" 按钮查看在线实例
预览图
代码
实例
<?php class Person { protected $name; public function __construct($name='小明') { $this->name=$name; } public function study($course='php') { return $this->name.'在学习:'.$course; } } trait Course { public $frient='小华'; public function study($name='踢足球') { return $this->name.'在学习'.$name; } } trait Recreation { public $friend='小军'; public function study($name='打篮球') { return $this->name.'和'.$this->friend.$name; } } class Student extends Person { use Course,Recreation{ Course::study insteadof Recreation; Recreation::study as Mysport; } } $student=new Student(); echo $student->study().'<hr>'; echo $student->Mysport();
运行实例 »
点击 "运行实例" 按钮查看在线实例
预览图
代码
实例
<?php spl_autoload_register(function ($classname){ require './class/'.$classname.'.php'; }); echo Demo1::CLASS_NAME.'<br>'; echo Demo2::CLASS_NAME.'<br>';
运行实例 »
点击 "运行实例" 按钮查看在线实例
预览图
代码
实例
<?php class Db { public $db=null; public $host; public $user; public $pass; public function __construct($host='127.0.0.1',$user='root',$pass='5201314') { $this->host=$host; $this->user=$user; $this->pass=$pass; $this->connect(); } //数据库连接 private function connect() { $this->db=mysqli_connect($this->host,$this->user,$this->pass); } //对象序列化的时候自动调用 public function __sleep(){ return ['host','user','pass']; } //反序列化 public function __wakeup() { $this->connect(); } } $obj=new Db(); echo serialize($obj); $tmp=serialize($obj); var_dump(unserialize($tmp));
运行实例 »
点击 "运行实例" 按钮查看在线实例
预览图
谈谈对面向对象编程的基本理解
在面向对象的程序设计中,对象是一个由信息及对信息进行处理的描述所组成的整体,是对现实世界的抽象。
面向对象的内容:
类 − 定义了一件事物的抽象特点。类的定义包含了数据的形式以及对数据的操作。
对象 − 是类的实例。
成员变量 − 定义在类内部的变量。该变量的值对外是不可见的,但是可以通过成员函数访问,在类被实例化为对象后,该变量即可称为对象的属性。
成员函数 − 定义在类的内部,可用于访问对象的数据。
继承 − 继承性是子类自动共享父类数据结构和方法的机制,这是类之间的一种关系。在定义和实现一个类的时候,可以在一个已经存在的类的基础之上来进行,把这个已经存在的类所定义的内容作为自己的内容,并加入若干新的内容。
父类 − 一个类被其他类继承,可将该类称为父类,或基类,或超类。
子类 − 一个类继承其他类称为子类,也可称为派生类。
多态 − 多态性是指相同的函数或方法可作用于多种类型的对象上并获得不同的结果。不同的对象,收到同一消息可以产生不同的结果,这种现象称为多态性。
重载 − 简单说,就是函数或者方法有同样的名称,但是参数列表不相同的情形,这样的同名不同参数的函数或者方法之间,互相称之为重载函数或者方法。
抽象性 − 抽象性是指将具有一致的数据结构(属性)和行为(操作)的对象抽象成类。一个类就是这样一种抽象,它反映了与应用有关的重要性质,而忽略其他一些无关内容。任何类的划分都是主观的,但必须与具体的应用有关。
封装 − 封装是指将现实世界中存在的某个客体的属性与行为绑定在一起,并放置在一个逻辑单元内。
构造函数 − 主要用来在创建对象时初始化对象, 即为对象成员变量赋初始值,总与new运算符一起使用在创建对象的语句中。
总结
1、匿名类:php 7.0+ 才支持, 类似于匿名函数,就是没有名称的类,匿名类适合于一次性的创建与引用,匿名类总是与: new 配套使用
2、 trait 是代码复用机制(函数, 类的继承),trait 使的类的语法,但不是类,所以不能实例化, 相当于方法集
3、抽象类,是类又不是类,不能被实例化, 抽象类必须被继承才可以使用
4、接口中的方法只声明不实现,与抽象类的抽象方法是一样的,接口中可以声明常量,而且必须初始化(字面量)
5、对象序列化的特点:只保存对象中的属性,不保存方法,只保存类名,不保存对象名