PHP 面向对象实现代码

所属分类: 网络编程 / PHP编程 阅读数: 499
收藏 0 赞 0 分享
1,简单的对象创建
复制代码 代码如下:

//类的作用域final:将阻止子类重写这个字段
//方法的作用域abstract: 在父类中声明,在子类中实现
//定义类:
class Employee{
//定义字段
private $name;
protected $title;
public $wage;
//常量
const PI = 3.1415926;
//静态成员变量
private static $visitors = 0;
//定义构造函数
function __construct(){
//使用静态成员变量
self::$visitors++;
echo "constructor";
}
//定义析构函数
function __destruct(){
echo "destruct";
}
//声明方法
public function clockIn(){
//使用字段
echo "Member $this->name";
}
//在访问一个对象并不拥有的属性时(比如私有字段),如果该对象用户__get和__set方法,则会自动调用__get方法或__set方法
function __set($property,$value){
$this->$property = $value;
}
function __get($property){
return $this->$property;
}
}
//类的继承 Manager继承Employee
class Manager extends Employee {
function __construct(){
//调用父类的构造函数或方法
parent::__construct();
parent::clockIn();
echo "Manager constructor";
}
}
//创建对象
$employee = new Employee();
$employee->wage = 10000;
//使用常量
echo Employee::PI;
//调用方法
$employee->clockIn();
$manager = new Employee();
//instanceof判断一个对象是类的实例、类的子类,还是实现了某个特定接口
if($manager instanceof Employee ) echo "Yes";

2,高级OO特性
(1)对象克隆
复制代码 代码如下:

//对象克隆
class ClassA{
private $name;
private $title;
public function setName($name){
$this->name = $name;
}
function getName(){
return $this->name;
}
public function setTitle($title){
$this->title = $title;
}
public function getTitle(){
return $this->title;
}
function __clone(){
echo "我被克隆了","<br>";
}
}
$classA = new ClassA();
$classA->setName("NameA");
$classA->setTitle("TitleA");
$classB = clone $classA;
$classB->setName("NameB");
echo $classA->getName(),"<br>",$classA->getTitle(),"<br>";
echo $classB->getName(),"<br>",$classB->getTitle(),"<br>";
/* output
我被克隆了
NameA
TitleA
NameB
TitleA
*/

(2)接口
复制代码 代码如下:

//接口
interface IPillage{
function method();
}
class ClassC extends ClassA implements IPillage {
function method(){
echo "inteface method";
}
}
$classC = new ClassC();
$classC->method();
//inteface method

(3)抽象类
复制代码 代码如下:

//抽象类,是不能实例化的类,只能作为其它类继承的基类
abstract class BaseClass{
protected $name;
abstract function method();
}
class ChileClass extends BaseClass {
function method(){
echo "method";
}
}
$child = new ChileClass();
$child->method();
//output method

注:
如果要创建一个模型,这个模型将由一些紧密相关的对象采用,就可以使用抽象类。如果要创建由一些不相关对象采用的功能,就使用接口。
如果必须从多个来源继承行为,就使用接口。php可以继承多个接口,但不能扩展多个抽象类。
如果知道所有类都会共享一个公共的行为实现,就使用抽象类,并在其中实现该行为。在接口中无法实现行为。
更多精彩内容其他人还在看

解决laravel中日志权限莫名变成了root的问题

今天小编就为大家分享一篇解决laravel中日志权限莫名变成了root的问题,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
收藏 0 赞 0 分享

Laravel框架中集成MongoDB和使用详解

今天小编就为大家分享一篇Laravel框架中集成MongoDB和使用详解,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
收藏 0 赞 0 分享

浅谈laravel框架sql中groupBy之后排序的问题

今天小编就为大家分享一篇浅谈laravel框架sql中groupBy之后排序的问题,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
收藏 0 赞 0 分享

mac pecl 安装php7.1扩展教程

今天小编就为大家分享一篇mac pecl 安装php7.1扩展教程,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
收藏 0 赞 0 分享

Mac下关于PHP环境和扩展的安装详解

今天小编就为大家分享一篇Mac下关于PHP环境和扩展的安装详解,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
收藏 0 赞 0 分享

laravel 解决groupBy时出现的错误 isn't in Group By问题

今天小编就为大家分享一篇laravel 解决groupBy时出现的错误 isn't in Group By问题,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
收藏 0 赞 0 分享

Laravel 框架返回状态拦截代码

今天小编就为大家分享一篇Laravel 框架返回状态拦截代码,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
收藏 0 赞 0 分享

在laravel框架中实现封装公共方法全局调用

今天小编就为大家分享一篇在laravel框架中实现封装公共方法全局调用,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
收藏 0 赞 0 分享

在Laravel 的 Blade 模版中实现定义变量

今天小编就为大家分享一篇在Laravel 的 Blade 模版中实现定义变量,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
收藏 0 赞 0 分享

Laravel基础_关于view共享数据的示例讲解

今天小编就为大家分享一篇Laravel基础_关于view共享数据的示例讲解,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
收藏 0 赞 0 分享
查看更多