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面向对象精要第四章构造函数和原型对象整理精要
随机推荐
- jQuery基础(4)- 位置信息、事件流、事件对象、事件代理、jquery事件
一.jQuery的位置信息 jQuery的位置信是JS的client系列.offset系列.scroll系列封装好的一些简便api. 1.宽度和高度 a.获取宽度和高度,例如: .width() // ...
- Akka(0):聊聊对Akka的初步了解和想法
前一段时间一直沉浸在函数式编程模式里,主要目的之一是掌握一套安全可靠的并发程序编程方法(concurrent programming),最终通过开源项目FunDA实现了单机多核CPU上程序的并行运算. ...
- JS获取浏览器URL中查询字符串的参数
首先要知道Location这个对象以及这个对象中的一些属性: href:设置或返回完整的url.如本博客首页返回http://www.cnblogs.com/wymninja/ host:设置或返回主 ...
- 移动一根火柴使等式成立js版本(递归)
修改成递归版本 思路: 1.设定规则数组,比如:1加一根火柴只可以变成7. 2.设定方法数组,比如:一个数增加了一根火柴,其他的数必然减少一根火柴. 3.增加Array方法,由元素名和方法,得到规则对 ...
- 设计模式《JAVA与模式》之命令模式
在阎宏博士的<JAVA与模式>一书中开头是这样描述命令(Command)模式的: 命令模式属于对象的行为模式.命令模式又称为行动(Action)模式或交易(Transaction)模式. ...
- Linux - route & traceroute & ip
route route - show / manipulate the IP routing table route 命令常用命令示例 #显示路由 route route -n # 不解析名字,快速显 ...
- mongodb 初学 意外 连接服务器异常(Connection refused)
啦啦啦 这种情况 root@localhost:/# mongo MongoDB shell version: connecting to: test --31T07:: W NETWORK [thr ...
- POJ 2771
#include <iostream> #include <string> #define MAXN 505 using namespace std; int _m[MAXN] ...
- Consul使用
- JavaSE-序列化和反序列化
什么是序列化,什么时候要进行序列化? 序列化就是一种用来处理对象流的机制,所谓对象流也就是将对象的内容进行流化,将数据分解成字节流,以便存储在文件中或在网络上传输. 我们在对java对象进行IO流操作 ...