如果要创建一个模型,这个模型将由一些紧密相关的对象采用,就可以使用抽象类。

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 "我被克隆了","
";

}

}

$classA = new ClassA();

$classA->setName("NameA");

$classA->setTitle("TitleA");

$classB = clone $classA;

$classB->setName("NameB");

echo $classA->getName(),"
",$classA->getTitle(),"
";

echo $classB->getName(),"
",$classB->getTitle(),"
";

/* 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可以继承多个接口,但不能扩展多个抽象类。

如果知道所有类都会共享一个公共的行为实现,就使用抽象类,并在其中实现该行为。在接口中无法实现行为。

php面向对象代码_PHP 面向对象实现代码相关推荐

  1. php面向对象代码_PHP面向对象之抽象类详解(代码实例)

    [摘要] PHP即"超文本预处理器",是一种通用开源脚本语言.PHP是在服务器端执行的脚本语言,与C语言类似,是常用的网站编程语言.PHP独特的语法混合了C.Java.Perl以及 ...

  2. mysql面向对象例子_PHP 面向对象实例:获取数据库用户数据

    先写一个数据库配置文件如下: db_config.php // 数据库配置文件, db_config.php $db_server = "localhost"; $db_user ...

  3. php中平方代码_php 做出平方代码,用类来实现的接口,初学者请大侠们出手啊。...

    interfaceInterator{functionrewind();functioncurrent();functionkey();functionnext();functionvalid();} ...

  4. php http面向对象编程实例,PHP面向对象编程——PHP对象引用实例代码

    /* ?* WEB开发笔记 www.chhua.com 每日练习 PHP面向对象编程--PHP对象引用实例代码 ?*/ /*代码演示 ?* */ class HelloWorld {//被引用对象 ? ...

  5. python面向对象大段代码_python面向对象部分简单整理

    面向对象 VS 面向过程 面向过程 面向过程的程序设计的核心是过程(流水线式思维) 优点: 极大的降低了写程序的复杂度 缺点: 一整个过程(流水线)只能解决一个问题,若问题更改,代码几乎要全部重写. ...

  6. 线性拟合和梯度下降python代码实现—面向对象(二)

    最近看到了一个系列博客,写的不错,就拿来学习了下.一来加深理解,二来锻炼自己编写代码的能力. 关于基础的理论知识就不重述了,网上资源很多,这里推荐:https://www.zybuluo.com/ha ...

  7. HALCON:如何结合面向对象和面向过程的代码

    HALCON:如何结合面向对象和面向过程的代码

  8. 笔记37 笨办法学python练习43面向对象OOP的游戏代码(二)代码的反复理解

    笔记37 笨办法学python练习43面向对象OOP的游戏代码(二)代码的反复理解 连续贴着这个练习43的代码折腾了整整两天,把那些英文文本翻译为中文文本,重新装进这个代码之中.本想一段一段的运行,发 ...

  9. Java码农进阶之路~代码块面向对象特征之继承

    一 代码块 1.局部代码块(方法) 书写位置:方法中 作用:限制作用域 2.构造代码块 书写位置:类中 方法外 代码的执行顺序: ①系统调用 ②只要创建对象 就会调用 ③构造代码块 在 构造方法 之前 ...

  10. 一文带你深入理解【Java基础】· 面向对象编程(下)②代码块、final和abstract

    写在前面 Hello大家好, 我是[麟-小白],一位软件工程专业的学生,喜好计算机知识.希望大家能够一起学习进步呀!本人是一名在读大学生,专业水平有限,如发现错误或不足之处,请多多指正!谢谢大家!!! ...

最新文章

  1. GitHub开源:100美元自制激光雷达
  2. 量子计算机个人化时间,科学家发现量子算法可以停止时间
  3. 基于水色图像的水质评价
  4. Java 开源企业信息化建设平台 O2OA 入选码云 GVP 项目
  5. [Selenium] CSS3 选择器
  6. 慢日志定位到备份锁表Waiting for global read lock原因
  7. 为什么现在的很多酒店都不收押金,只收房费了?
  8. python编程入门-Python编程入门电子书教程,看这几个就够了
  9. 秦时明月2服务器端代码修改,《秦时明月2》为什么修改不了?
  10. 批量网刻操作系统(使用GHOST工具)
  11. Java8所有的包介绍(由英文文档翻译而来)
  12. Eclipse主题插件之Darkest Dark Theme with DevStyle
  13. mysql如何自定义分组_mysql 使用自定义规则分组
  14. OGG基本框架、安装、运维、报错处理、监控命令
  15. containerd 拉取k8s.gcr.io/pause镜像i/o timeout
  16. 解密区块链最强心脏 迅雷链共识算法详解
  17. java实现俄罗斯方块项目
  18. 企业微信 android2.3,企业微信2.3版本发布
  19. 【Unity3D 教程系列第 16 篇】Scene视图很清楚,但是Game视图却很模糊的解决方案
  20. 重磅 | 推荐一款技术人必备的写作神器 (支持多平台自动同步)

热门文章

  1. 如何避免_如何避免钢板弹簧受损
  2. C#利用反射,遍历获得一个类的所有属性名,以及该类的实例的所有属性的值
  3. ASP.NET的Session会导致的性能问题
  4. 观点对立,无关虚拟现实技术
  5. 【深度学习笔记】(一)Octave
  6. Python 的OOP 面向对象编程基础
  7. 使用Python解析JSON详解
  8. centos5.5安装csvn,以及问题处理
  9. MCSE 2012 R2之工作文件夹Word Folders(2)
  10. 怎样用DNSPod做负载均衡?