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

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

  1. <?php
  2.  
  3. class MyClass {
  4. final function show(){
  5. echo "hello world" . PHP_EOL;
  6. }
  7. }
  8.  
  9. class MyTest extends MyClass {
  10. function show(){
  11. echo __CLASS__ . PHP_EOL;
  12. }
  13. }
  14.  
  15. ?>

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

  1. <?php
  2.  
  3. final class MyClass {
  4. function show(){
  5. echo "hello world" . PHP_EOL;
  6. }
  7. }
  8.  
  9. class MyTest extends MyClass {
  10. }
  11.  
  12. ?>

3,__toString方法

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

  1. class Person {
  2. private $name;
  3. function __construct( $name ){
  4. $this->name = $name;
  5. }
  6. function __toString(){
  7. return $this->name;
  8. }
  9. }
  10.  
  11. $p = new Person( "ghostwu" );
  12. var_dump( $p );
  13. echo PHP_EOL;
  14. print $p . PHP_EOL;

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

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

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

Exception类摘要:

  1. Exception {
  2. /* 属性 */
  3. protected string $message ;
  4. protected int $code ;
  5. protected string $file ;
  6. protected int $line ;
  7. /* 方法 */
  8. public __construct ([ string $message = "" [, int $code = 0 [, Throwable $previous = NULL ]]] )
  9. final public string getMessage ( void )
  10. final public Throwable getPrevious ( void )
  11. final public int getCode ( void )
  12. final public string getFile ( void )
  13. final public int getLine ( void )
  14. final public array getTrace ( void )
  15. final public string getTraceAsString ( void )
  16. public string __toString ( void )
  17. final private void __clone ( void )
  18. }
  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;

输出结果:

  1. ghostwu@ubuntu:~/php_study/php5/03$ php -f exception_usage.php
  2. ghostwu
  3. printObj接收到一个null对象
  4. in file:/home/ghostwu/php_study/php5/03/exception_usage.php
  5. in line:10
  6. 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

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

3,main.php

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

php面向对象精要(3)的更多相关文章

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

    <javascript面向对象精要> 买这本书的原因主要是因为作者,Nicholas C. Zakas 牛X闪闪的js专家,读过js高程的应该都知道他,而这本书是他的最新力作,感觉也是js ...

  2. 03.JavaScript 面向对象精要--理解对象

    JavaScript 面向对象精要--理解对象 尽管JavaScript里有大量内建引用类型,很可能你还是会频繁的创建自己的对象.JavaScript中的对象是动态的. 一.定义属性 当一个属性第1次 ...

  3. javascript面向对象精要第三章对象整理精要

    什么是对象的数据属性?什么是对象的访问器属性?[put]方法是默认创建数据属性的,访 问器属性不包含值而是定义了一个单属性被读取时调用的函数(getter)和当一个属性被写入时 调用的函数(sette ...

  4. 02.JavaScript 面向对象精要--函数

    在JavaScript中,函数其实也是对象.是函数不同于其他对象的特点是:函数存在一个被称为[[Call]]的内部属性.[[Call]]属性是函数独有的,表明该对象可以被执行.ECMAScript 定 ...

  5. 01.JavaScript 面向对象精要--原始类型和引用类型

    一.什么是类型 JavaScript 虽然没有类的概念.但依然存在两种类型:原始类型和应用类型. 原始类型保存为简单的数据值,引用类型则保存为对象,其本质是指向内存位置 的引用.也就是说:原始值被直接 ...

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

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

  7. JavaScript面向对象精要

    来自:淡忘~浅思. 链接:http://www.ido321.com/1585.html 和 http://www.ido321.com/1586.html 数据类型   在JavaScript中,数 ...

  8. javascript面向对象精要第六章对象模式整理精要

    混入是一种给对象添加功能同时避免继承的强有力的方式,混入时将一个属性从一个对象 复制到另一个,从而使得接收者在不需要继承的情况下获得其功能.和继承不同,混入之后 对象无法检查属性来源.因此混入最适宜用 ...

  9. javascript面向对象精要第五章继承整理精要

    javascript中使用原型链支持继承,当一个对象的[prototype]设置为另一个对象时, 就在这两个对象之间创建了一条原型对象链.如果要创建一个继承自其它对象的对象, 使用Object.cre ...

  10. javascript面向对象精要第四章构造函数和原型对象整理精要

随机推荐

  1. 简单题(K-D Tree)

    简单题不简单-- 我们把单点加操作改成插入一个权值为增加量的点,将问题转化成询问一个矩阵中所有点的和,用 \(K-D\ Tree\) 维护,时间复杂度 \(O(n\sqrt{n})\) \(Code\ ...

  2. safe close tcp connection

    https://blog.netherlabs.nl/articles/2009/01/18/the-ultimate-so_linger-page-or-why-is-my-tcp-not-reli ...

  3. [LeetCode] 两数相加

    给定两个非空链表来表示两个非负整数.位数按照逆序方式存储,它们的每个节点只存储单个数字.将两数相加返回一个新的链表. 你可以假设除了数字 0 之外,这两个数字都不会以零开头. 示例: 输入:(2 -& ...

  4. MyBatis框架介绍及其实操

    一.基本概念和介绍 数据持久化的概念 数据持久化是将内存中的数据模型转换为存储模型,以及将存储模型转换为内存中的数据模型的统称.例如,文件的存储.数据的读取等都是数据持久化操作.数据模型可以是任何数据 ...

  5. typescript-koa-postgresql 实现一个简单的rest风格服务器 —— typescript 开发环境配置

    最近需要用 nodeJS 写一个后台程序,为了能够获得 IDE 的更多代码提示,决定用 typescript 来编写,随便也学习下 ts,在这记录下实现过程. 1.新建文件夹 typescript-k ...

  6. 多条记录的同一字段组合成一个字符串 FOR XML PATH

    stuff(select ',' + fieldname from tablename for xml path('')),1,1,'') 这一整句的作用是将多行fieldname字段的内容串联起来, ...

  7. vue教程2-01 vue生命周期、钩子函数

    vue教程2-01 vue生命周期.钩子函数 <!DOCTYPE html> <html lang="en"> <head> <meta ...

  8. 这两周服务器被攻击,封锁了600多个IP地址段后今天服务器安静多了

    这两周服务器被攻击,封锁了600多个IP地址段后今天服务器安静多了 建议大家在自己的服务器上也封杀这些瘪三的地址 iptables -I INPUT -s 123.44.55.0/24 -j DROP ...

  9. 微信小程序交流群,欢迎加入,其中微信小程序开发群、Jenkins开发群是有问必答群

    微信小程序开发,请加群511389428,511389428 有问必答群:React开发,请加群523838207:523838207Jenkins开发,请加群155799363,155799363  ...

  10. Java类加载顺序

    很长时间没看这方面的内容了,写篇文章让自己牢记一下,顺便分享一下. 首先,写代码以便检验结果.测试代码: public class Test { public static void main(Str ...