php面向对象精要(2)
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)的更多相关文章
- 《javascript面向对象精要》读书笔记
		<javascript面向对象精要> 买这本书的原因主要是因为作者,Nicholas C. Zakas 牛X闪闪的js专家,读过js高程的应该都知道他,而这本书是他的最新力作,感觉也是js ... 
- 03.JavaScript 面向对象精要--理解对象
		JavaScript 面向对象精要--理解对象 尽管JavaScript里有大量内建引用类型,很可能你还是会频繁的创建自己的对象.JavaScript中的对象是动态的. 一.定义属性 当一个属性第1次 ... 
- javascript面向对象精要第三章对象整理精要
		什么是对象的数据属性?什么是对象的访问器属性?[put]方法是默认创建数据属性的,访 问器属性不包含值而是定义了一个单属性被读取时调用的函数(getter)和当一个属性被写入时 调用的函数(sette ... 
- 02.JavaScript 面向对象精要--函数
		在JavaScript中,函数其实也是对象.是函数不同于其他对象的特点是:函数存在一个被称为[[Call]]的内部属性.[[Call]]属性是函数独有的,表明该对象可以被执行.ECMAScript 定 ... 
- 01.JavaScript 面向对象精要--原始类型和引用类型
		一.什么是类型 JavaScript 虽然没有类的概念.但依然存在两种类型:原始类型和应用类型. 原始类型保存为简单的数据值,引用类型则保存为对象,其本质是指向内存位置 的引用.也就是说:原始值被直接 ... 
- JavaScript面向对象精要(一)
		数据类型 在JavaScript中,数据类型分为两类: 原始类型:保存一些简单数据,如true.5等.JavaScript共同拥有5中原始类型: boolean:布尔.值为true或false num ... 
- JavaScript面向对象精要
		来自:淡忘~浅思. 链接:http://www.ido321.com/1585.html 和 http://www.ido321.com/1586.html 数据类型 在JavaScript中,数 ... 
- javascript面向对象精要第六章对象模式整理精要
		混入是一种给对象添加功能同时避免继承的强有力的方式,混入时将一个属性从一个对象 复制到另一个,从而使得接收者在不需要继承的情况下获得其功能.和继承不同,混入之后 对象无法检查属性来源.因此混入最适宜用 ... 
- javascript面向对象精要第五章继承整理精要
		javascript中使用原型链支持继承,当一个对象的[prototype]设置为另一个对象时, 就在这两个对象之间创建了一条原型对象链.如果要创建一个继承自其它对象的对象, 使用Object.cre ... 
- javascript面向对象精要第四章构造函数和原型对象整理精要
随机推荐
- phpMyadmin提权那些事
			i春秋作家:anyedt phpMyadmin提权那些事 引言:在渗透测试过程中获知到phpMyadmin的账号密码,如何进行提权呢?往下看,我今天和你说说phpMyadmin提权那些事. 0×00 ... 
- 将页面中表格数据导出excel格式的文件(vue)
			近期由于项目需要,需要将页面中的表格数据导出excel格式的文件,折腾了许久,在网上各种百度,虽然资料不少,但是大都不全,踩了许多坑,总算是皇天不负有心人,最后圆满解决了. 1.安装相关依赖(npm安 ... 
- mongodb 初学 意外 连接服务器异常(Connection refused)
			啦啦啦 这种情况 root@localhost:/# mongo MongoDB shell version: connecting to: test --31T07:: W NETWORK [thr ... 
- redis缓存存在的隐患及其解决方案
			redis缓存1.缓存穿透 1>.什么是缓存穿透? 业务系统需要查训的数据根本不存在,当业务系统查询时, 首先会在缓存中查训,由于缓存中不存在,然后在往数据 库中查,由于该数据在数据库中也不存在 ... 
- IntelliJ IDEA中Debug的使用技巧
			当运行结果跟我们设想的不一致时,我们就可以用debug进行代码调试,下面是我在日常开发中对debug的一些小结 (一)基本介绍 本篇文章是基于IntelliJ IDEA2018.3.2版本,Debug ... 
- ASM路径问题导致数据库不能正常启动 -- 报:ORA-03113: end-of-file on communication channel
			环境描述: 操作系统版本:Red Hat Enterprise Linux Server release 6.5 (Santiago) 数据库版本:Oracle 11.2.0.4 RAC 场景描述: ... 
- 集合框架_DAY17
			1:五种数据结构: 数组:长度固定,有序,查找方便 链表:添加删除方便 栈:先进后出 队列:先进先出 树结构:完成排序动作 2:泛型(了解) (1)是一种把明确数据类型的工作推迟到创 ... 
- Nutch抓取流程
			nutch抓取流程注入起始url(inject).生成爬取列表(generate).爬取(fetch).解析网页内容(parse).更新url数据库(updatedb)1:注入起始url(inject ... 
- / | \ # $ ^ & *这些符号怎么读
			供参考: /: slash或forward slash 英 [slæʃ] |: vertical bar或pipe #: number sign或pound sign \: backslash 英 [ ... 
- SQL语句:Mac 下 处理myql 不能远程登录和本地登录问题
			mac下,mysql5.7.18连接出错,错误信息为:Access denied for user 'root'@'localhost' (using password: YES) ()里面的为she ... 
