1,self与parent关键字

>self指向当前的类,常用来访问静态成员,方法和常量

>parent指向父类,常用来调用父类的构造函数和方法和成员,也可以用来访问常量

 <?php
class Ancestor {
const NAME = "Ancestor";
function __construct(){
echo self::NAME . PHP_EOL;
}
} class Child extends Ancestor {
const NAME = "Child";
function __construct () {
parent::__construct();
echo self::NAME . PHP_EOL;
}
} $obj = new Child();
?>

2,instanceof

>判断一个对象是否是某个类的实例

>判断一个对象是否实现了某个接口

 <?php

     class Rectangle {
public $name = __CLASS__;
} class Square extends Rectangle {
public $name = __CLASS__;
} class Circle {
public $name = __CLASS__;
} function checkIfRectangle( $shape ) {
if( $shape instanceof Rectangle ) {
echo $shape->name . PHP_EOL;
}
} checkIfRectangle( new Square() );
checkIfRectangle( new Rectangle() );
checkIfRectangle( new Circle() );
?>

3,abstract类和方法

>抽象类不能被实例化

>抽象方法必须被重写

>只要有一个方法声明为abstract,这个类必须声明为abstract的,当然可以直接把这个类声明为抽象类

<?php
abstract class Shape {
protected $x;
protected $y;
function setCenter( $x, $y ) {
$this->x = $x;
$this->y = $y;
} abstract function draw();
abstract function show();
} class Square extends Shape {
function draw() {
}
function show(){
}
} class Circle extends Shape {
function draw(){
}
function show(){
}
} ?>

4,interface

>接口类似c++的多重继承,  class A implements B, C ... {}

>实现了该接口的类,都将与该接口形成是一关系 (instanceof )

>多重接口之前不能互相冲突( 指的是定义相同的常量和方法 )

interface Loggable {
function logString();
} class Person implements Loggable {
private $name;
private $age;
function __construct( $name, $age ){
$this->name = $name;
$this->age = $age;
}
function logString() {
return "Class Person: name = {$this->name}, age = {$this->age}" . PHP_EOL;
}
} class Product implements Loggable {
private $name;
private $price;
function __construct( $name, $price ){
$this->name = $name;
$this->price = $price;
} function logString() {
return "Class Product: name = {$this->name}, price = {$this->price}" . PHP_EOL;
}
} function MyLog( $obj ) {
if ( $obj instanceof Loggable ) {
echo $obj->logString();
}else {
echo $obj . "没有实现Loggable接口";
}
} $p = new Person( "ghostwu", 20 );
echo $p->logString();
$goods = new Product( "book", 19.99 );
echo $goods->logString();
MyLog( $p );
MyLog( $goods );

php面向对象精要(2)的更多相关文章

  1. 《javascript面向对象精要》读书笔记

    <javascript面向对象精要> 买这本书的原因主要是因为作者,Nicholas C. Zakas 牛X闪闪的js专家,读过js高程的应该都知道他,而这本书是他的最新力作,感觉也是js ...

  2. 03.JavaScript 面向对象精要--理解对象

    JavaScript 面向对象精要--理解对象 尽管JavaScript里有大量内建引用类型,很可能你还是会频繁的创建自己的对象.JavaScript中的对象是动态的. 一.定义属性 当一个属性第1次 ...

  3. javascript面向对象精要第三章对象整理精要

    什么是对象的数据属性?什么是对象的访问器属性?[put]方法是默认创建数据属性的,访 问器属性不包含值而是定义了一个单属性被读取时调用的函数(getter)和当一个属性被写入时 调用的函数(sette ...

  4. 02.JavaScript 面向对象精要--函数

    在JavaScript中,函数其实也是对象.是函数不同于其他对象的特点是:函数存在一个被称为[[Call]]的内部属性.[[Call]]属性是函数独有的,表明该对象可以被执行.ECMAScript 定 ...

  5. 01.JavaScript 面向对象精要--原始类型和引用类型

    一.什么是类型 JavaScript 虽然没有类的概念.但依然存在两种类型:原始类型和应用类型. 原始类型保存为简单的数据值,引用类型则保存为对象,其本质是指向内存位置 的引用.也就是说:原始值被直接 ...

  6. JavaScript面向对象精要(一)

    数据类型 在JavaScript中,数据类型分为两类: 原始类型:保存一些简单数据,如true.5等.JavaScript共同拥有5中原始类型: boolean:布尔.值为true或false num ...

  7. JavaScript面向对象精要

    来自:淡忘~浅思. 链接:http://www.ido321.com/1585.html 和 http://www.ido321.com/1586.html 数据类型   在JavaScript中,数 ...

  8. javascript面向对象精要第六章对象模式整理精要

    混入是一种给对象添加功能同时避免继承的强有力的方式,混入时将一个属性从一个对象 复制到另一个,从而使得接收者在不需要继承的情况下获得其功能.和继承不同,混入之后 对象无法检查属性来源.因此混入最适宜用 ...

  9. javascript面向对象精要第五章继承整理精要

    javascript中使用原型链支持继承,当一个对象的[prototype]设置为另一个对象时, 就在这两个对象之间创建了一条原型对象链.如果要创建一个继承自其它对象的对象, 使用Object.cre ...

  10. javascript面向对象精要第四章构造函数和原型对象整理精要

随机推荐

  1. DZY Loves Math(莫比乌斯反演)

    \(x=p_1^{\alpha_1}p_2^{\alpha_2}...p_c^{\alpha_c}\) \(f(x)=\max(\alpha_1,\alpha_2,...,\alpha_c)\) \( ...

  2. kls与flag(map)

    题目传送门 这道题还挺搞笑的,\(map\)常数贼大还是把它水过了. 可以发现这道题求的是 \((j>i)j-i=h_i+h_j,j-i=|h_i-h_j|\)的对数. 那么显然,因为高度大于\ ...

  3. 关于 IPv6

    http://test-ipv6.com/ http://bbs.chinaunix.net/thread-1799798-1-1.html

  4. 代码审计| HDWiki 漏洞(一)

    i春秋核心白帽:yanzm 0×00 背景 最近拿到一个源码素材于是对这个源码进行分析发现了不少漏洞本篇先将一些漏洞进行分析下一篇再进行GetShell方法的分析期待和师傅们的交流. 0×01 漏洞分 ...

  5. PHP 调试工具Xdebug安装配置

    ## PHP 调试工具Xdebug安装配置 一.Xdebug 介绍 Xdebug是一个开源的PHP程序调试工具,可以使用它来调试.跟踪及分析程序运行状态.当然,Xdebug需要结合PHP的编辑工具来打 ...

  6. npm 包 升降版本

    今天用vue-awesome-swiper最新版本遇到些问题,需要调整到2.6.7版本.记录以下. 查看vue-awesome-swiper版本 npm list vue-awesome-swiper ...

  7. js缓存问题,修改js后代码不生效

    问题描述 最近在上线新版本项目的时候,发现有的用户的操作还是调用的老版本JS里面的内容,这样就造成原来新的JS里面加上的限制不能限制用户的操作,从而导致用户可以重复操作. 问题产生原因 如果在用户之前 ...

  8. python3 调用 salt-api

    使用python3调用 salt-api 在项目中我们不能使用命令行的模式去调用salt-api,所以我们可以写一个基于salt-api的类,方便项目代码的调用.在这里特别附上两种方式实现的pytho ...

  9. 二维数组与类的定义_DAY06

    1:二维数组(理解): (1)格式:   1:int[][] arr = new int[3][2];  2:int[][] arr = new int[3][];   3:int[][] arr = ...

  10. vue2.0+Element-ui实战案例

    前言 我们将会选择使用一些 vue 周边的库vue-cli, vue-router,axios,moment,Element-ui搭建一个前端项目案例,后端数据接口,会使用json-server快速搭 ...