1,final关键字定义的方法,不能被重写

由于final修饰了show方法,子类中重写show方法会报错

<?phpclass MyClass {final function show(){echo "hello world" . PHP_EOL;}}class MyTest extends MyClass {function show(){echo __CLASS__ . PHP_EOL;}}?>

2,final定义的class不能被继承

<?phpfinal class MyClass {function show(){echo "hello world" . PHP_EOL;}}class MyTest extends MyClass {}?>

3,__toString方法

如果定义了__toString方法,打印一个对象时,将调用__toString

class Person {private $name;function __construct( $name ){$this->name = $name;}function __toString(){return $this->name;}
}$p = new Person( "ghostwu" );
var_dump( $p );
echo PHP_EOL;
print $p . PHP_EOL;

4, 异常处理( try, catch, throw )

>异常处理类都应该继承自系统自带的Exception

>异常抛出时( throw 异常对象 ),会一个个查找catch后面的异常处理,如果匹配到,就执行,后面的catch就算能匹配,也不会执行

Exception类摘要:

Exception {
/* 属性 */
protected string $message ;
protected int $code ;
protected string $file ;
protected int $line ;
/* 方法 */
public __construct ([ string $message = "" [, int $code = 0 [, Throwable $previous = NULL ]]] )
final public string getMessage ( void )
final public Throwable getPrevious ( void )
final public int getCode ( void )
final public string getFile ( void )
final public int getLine ( void )
final public array getTrace ( void )
final public string getTraceAsString ( void )
public string __toString ( void )
final private void __clone ( void )
}

 1 class NullHandleException extends Exception {
 2     function __construct( $message ){
 3         parent::__construct( $message );
 4     }
 5 }
 6
 7 function printObj( $obj ){
 8     if( $obj == NULL ) {
 9         throw new NullHandleException( "printObj接收到一个null对象" );
10     }
11     print $obj . PHP_EOL;
12 }
13
14 class Person {
15     private $name;
16     function __construct( $name ) {
17         $this->name = $name;
18     }
19     function __toString() {
20         return $this->name;
21     }
22 }
23
24 try {
25     printObj( new Person( "ghostwu" ) );
26     printObj( null );
27     printObj( new Person( "zhangsan" ) );
28 }catch( NullHandleException $exception ){
29     print $exception->getMessage() . PHP_EOL;
30     print "in file:" . $exception->getFile() . PHP_EOL;
31     print "in line:" . $exception->getLine() . PHP_EOL;
32 }catch( Exception $exception ){
33     echo "这个异常分支不会被执行" . PHP_EOL;
34     print $exception->getMessage() . PHP_EOL;
35 }
36
37 echo "try...catch处理完毕" . PHP_EOL;

输出结果:

ghostwu@ubuntu:~/php_study/php5/03$ php -f exception_usage.php
ghostwu
printObj接收到一个null对象
in file:/home/ghostwu/php_study/php5/03/exception_usage.php
in line:10
try...catch处理完毕

没有输出"zhangsan", 因为printObj( null );抛出了异常,因此"zhangsan"被忽略

5,__autoload自动加载文件

在项目开发中,经常需要在一个文件中包含多个通用的库文件,这个时候会产生一大堆的require或者include,而使用__autoload函数可以简化函数的加载过程

1,MyClass.php

1 class MyClass {
2     function printHelloWorld(){
3         echo "Hello World" . PHP_EOL;
4     }
5 }

2,common.inc

function __autoload( $className ) {require_once( "./{$className}.php" );}

3,main.php

require_once "common.inc";$obj = new MyClass();    $obj->printHelloWorld();

转载于:https://www.cnblogs.com/ghostwu/p/8458812.html

php面向对象精要(3)相关推荐

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

    JavaScript(ES5)的面向对象精要 标签: JavaScript 面向对象 读书笔记 2016年1月16日-17日两天看完了<JavaScript面向对象精要>(参加异步社区的活 ...

  2. 《JavaScript面向对象精要》——1.8 原始封装类型

    本节书摘来自异步社区<JavaScript面向对象精要>一书中的第1章,第1.8节,作者:[美]Nicholas C. Zakas 译者: 胡世杰 更多章节内容可以访问云栖社区" ...

  3. 《JavaScript面向对象精要》——第1章 原始类型和引用类型1.1 什么是类型

    本节书摘来自异步社区<JavaScript面向对象精要>一书中的第1章,第1.1节,作者:[美]Nicholas C. Zakas 译者: 胡世杰 更多章节内容可以访问云栖社区" ...

  4. 《JavaScript面向对象精要》——1.9 总结

    本节书摘来自异步社区<JavaScript面向对象精要>一书中的第1章,第1.9节,作者:[美]Nicholas C. Zakas 译者: 胡世杰 更多章节内容可以访问云栖社区" ...

  5. 《JavaScript面向对象精要》——第1章 原始类型和引用类型 1.1 什么是类型

    本节书摘来自异步社区<JavaScript面向对象精要>一书中的第1章,第1.1节,作者:[美]Nicholas C. Zakas著,更多章节内容可以访问云栖社区"异步社区&qu ...

  6. 《JavaScript面向对象精要》——1.2 原始类型

    本节书摘来自异步社区<JavaScript面向对象精要>一书中的第1章,第1.2节,作者:[美]Nicholas C. Zakas 译者: 胡世杰 更多章节内容可以访问云栖社区" ...

  7. 《JavaScript 面向对象精要》 读书笔记

    <JavaScript 面向对象精要> 读书笔记 高程面向对象这块内容介绍的比较浅显,个人觉得这本小书是高程的补充,看完之后觉得收获匪浅,所以做了个笔记,以备后询 1. 原始类型和引用类型 ...

  8. JavaScript面向对象精要(二)

    四.构造函数和原型对象 1. 构造函数 构造函数就是用new创建对象时调用的函数.使用构造函数的好处在于所有用同一个构造函数创建的对象都具有同样的属性和方法. function Person(){} ...

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

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

  10. 面向对象精要-理解对象

    1.创建对象 创建对象的两种方法: 使用Object构造函数 var person2 = new Object(); person2.name="Qian"; 使用对象的字面形式 ...

最新文章

  1. js get请求_URL解析、HTTP请求以及浏览器和爬虫得到响应的区别
  2. android 宏替换_android 模拟宏定义,实现Debug amp; Release 模式-一团网
  3. Win7中多账户设置自动登录的图文方法
  4. binwalk 提取bootimg_boot.img的解包与打包
  5. Linux 命令(96)—— ln 命令
  6. 给开发说:今天上线!
  7. Tensorflow:常见错误
  8. freemaker使用三目表达式
  9. C++调用libVLC播放视频
  10. Cocos Create 3.3 打包安卓apk
  11. android studio报错Error occurred during initialization of VM Could not reserve enough space
  12. 如何为豆瓣FM写一个chrome的歌词插件
  13. Android集成腾讯X5浏览器内核库
  14. 计算机大赛a类有哪些,A类 B类学科竞赛项目清单
  15. 台式电脑:点击开启虚拟机报错:此主机支持intel vy-x, 但intel vy-x处于禁用状态
  16. 使用高德地图加在kml文件
  17. linux和android比较大小写,不区分大小写的串比较---Windows下的stricmp和Linux下的strcasecmp, 遇到了, 所以记录一下!...
  18. IT行业是否存在性别歧视?其实大家都误会了!
  19. BZOJ3781小B的询问
  20. 【全球数据】世界轮廓矢量数据

热门文章

  1. 文字处理技术:形状绕排的难点
  2. FreeSwitch会议Banner功能调用流程
  3. LINUX编译时缺少头文件,查找依赖库的终极解决办法
  4. java.lang.ClassNotFoundException: com.google.wireless.android.sdk.stats.IntellijIndexingStats$Index
  5. libtool: Version mismatch error
  6. trump可音译为“专普”
  7. 诺基亚再做手机,没有机会
  8. 一个CPU核可以设计为两个以上的线程
  9. 火车套餐惊现2013年豆浆
  10. ubuntu退出mysql sql语句_Ubuntu 16.04安装、卸载mysql及怎么使用SQL常用操作语句