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 );

最新文章

  1. 复习(2)【postman,charles,filezilla server】
  2. Installscript如何给自定义路径的变量赋值
  3. 团队spring会议1
  4. AutoMapper映射ExpressionTree
  5. WCF入门(11)
  6. Ubuntu 安装hadoop 伪分布式
  7. 软件测试技术(六)——白盒测试之控制流覆盖准则+Visual Studio 2013单元测试
  8. Android开发框架之xUtils学习
  9. python项目
  10. (hdu)1950 Bridging signals(最长上升子序列)
  11. Android 开源库
  12. catalan 数——卡特兰数(转)
  13. 阿里云服务器Tomcat无法从外部访问
  14. QOpenGLTexture 两个纹理叠加
  15. javaweb复习(一)
  16. PS提亮户外儿童照
  17. HTML元素 绑定href属性
  18. pygame系列_font游戏字体_源码下载
  19. 在Visual Studio中使用组件图描述项目组件依赖关系
  20. C后端设计开发 - 第2章-内功-数据结构上卷

热门文章

  1. 【文文殿下】 [USACO08MAR]土地征用 题解
  2. 重拾 BFC、IFC、GFC、FFC
  3. WebForm - cookie赋值乱码问题
  4. 08-03 java 继承
  5. 利用Warensoft Stock Service编写高频交易软件--DEMO
  6. opencv实现正交匹配追踪算法OMP
  7. MySQL笔记(4)---表
  8. Spring Boot 配置 IDEA&amp;DevTools 自编译重启
  9. Android分组子级的不同视图布局之BUG奇遇记
  10. 磁盘分区(20G升50G)