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面向对象精要第四章构造函数和原型对象整理精要
随机推荐
- web安全之XSS注入
之前在做项目的时候有遇到一些安全问题,XSS注入就是其中之一 那么,什么是XSS注入呢? XSS又叫CSS (Cross Site Script) ,跨站脚本攻击.它指的是恶意攻击者往Web页面里插入 ...
- js获取当前页面相关信息
1. 获取整个url: console.log(window.location.href) http://localhost:8082/Index.html?name=tom 2. 获取域名加端口号 ...
- 一步步Cobol 400 上手自学入门教程03 - 数据部
数据部的作用 程序中涉及到的全部数据(输入.输出.中间)都要在此定义,对它们的属性进行说明.主要描述以下属性: 数据类型(数值/字符)和存储形式(长度) 数据项之间的关系(层次和层号) 文件与记录的关 ...
- python 数据库连接及操作
Python DB-API使用流程: 引入API模块. 获取与数据库的连接. 执行SQL语句和存储过程. 关闭数据库连接. def mysql_dbtest(): config = { 'host': ...
- One-hot数据处理
机器学习 数据预处理之独热编码(One-Hot Encoding)(转) 问题由来 在很多机器学习任务中,特征并不总是连续值,而有可能是分类值. 例如,考虑一下的三个特征: ["male&q ...
- (转)request模拟知乎登录(无验证码机制
原文:http://www.itnose.net/detail/6755805.html import request try: import cookielib #python2版本 except: ...
- 趣谈unicode,ansi,utf-8,unicode big endian这些编码有什么区别
从头讲讲编码的故事.那么就让我们找个草堆坐下,先抽口烟,看看夜晚天空上的银河,然后想一想要从哪里开始讲起.嗯,也许这样开始比较好…… 很久很久以前,有一群人,他们决定用8个可以开合的晶体管来组合成不同 ...
- Java之装饰模式
1.装饰模式的理解 在不必改变原类文件和使用继承的情况下,动态地扩展一个对象的功能.它是通过创建一个包装对象,也就是装饰来包裹真实的对象. 2.装饰模式由4种角色组成 (1)抽象构件(Componen ...
- Java类加载顺序
很长时间没看这方面的内容了,写篇文章让自己牢记一下,顺便分享一下. 首先,写代码以便检验结果.测试代码: public class Test { public static void main(Str ...
- jquery获得下拉框值的代码
jquery获得下拉框值的代码 获取Select : 获取select 选中的 text : $("#ddlRegType").find("option:sele ...