php面向对象精要(3)
1,final关键字定义的方法,不能被重写
由于final修饰了show方法,子类中重写show方法会报错
- <?php
- class MyClass {
- final function show(){
- echo "hello world" . PHP_EOL;
- }
- }
- class MyTest extends MyClass {
- function show(){
- echo __CLASS__ . PHP_EOL;
- }
- }
- ?>
2,final定义的class不能被继承
- <?php
- final 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 )
- }
- class NullHandleException extends Exception {
- function __construct( $message ){
- parent::__construct( $message );
- }
- }
- function printObj( $obj ){
- if( $obj == NULL ) {
- throw new NullHandleException( "printObj接收到一个null对象" );
- }
- print $obj . PHP_EOL;
- }
- class Person {
- private $name;
- function __construct( $name ) {
- $this->name = $name;
- }
- function __toString() {
- return $this->name;
- }
- }
- try {
- printObj( new Person( "ghostwu" ) );
- printObj( null );
- printObj( new Person( "zhangsan" ) );
- }catch( NullHandleException $exception ){
- print $exception->getMessage() . PHP_EOL;
- print "in file:" . $exception->getFile() . PHP_EOL;
- print "in line:" . $exception->getLine() . PHP_EOL;
- }catch( Exception $exception ){
- echo "这个异常分支不会被执行" . PHP_EOL;
- print $exception->getMessage() . PHP_EOL;
- }
- 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
- class MyClass {
- function printHelloWorld(){
- echo "Hello World" . PHP_EOL;
- }
- }
2,common.inc
- function __autoload( $className ) {
- require_once( "./{$className}.php" );
- }
3,main.php
- require_once "common.inc";
- $obj = new MyClass();
- $obj->printHelloWorld();
php面向对象精要(3)的更多相关文章
- 《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面向对象精要第四章构造函数和原型对象整理精要
随机推荐
- 简单题(K-D Tree)
简单题不简单-- 我们把单点加操作改成插入一个权值为增加量的点,将问题转化成询问一个矩阵中所有点的和,用 \(K-D\ Tree\) 维护,时间复杂度 \(O(n\sqrt{n})\) \(Code\ ...
- safe close tcp connection
https://blog.netherlabs.nl/articles/2009/01/18/the-ultimate-so_linger-page-or-why-is-my-tcp-not-reli ...
- [LeetCode] 两数相加
给定两个非空链表来表示两个非负整数.位数按照逆序方式存储,它们的每个节点只存储单个数字.将两数相加返回一个新的链表. 你可以假设除了数字 0 之外,这两个数字都不会以零开头. 示例: 输入:(2 -& ...
- MyBatis框架介绍及其实操
一.基本概念和介绍 数据持久化的概念 数据持久化是将内存中的数据模型转换为存储模型,以及将存储模型转换为内存中的数据模型的统称.例如,文件的存储.数据的读取等都是数据持久化操作.数据模型可以是任何数据 ...
- typescript-koa-postgresql 实现一个简单的rest风格服务器 —— typescript 开发环境配置
最近需要用 nodeJS 写一个后台程序,为了能够获得 IDE 的更多代码提示,决定用 typescript 来编写,随便也学习下 ts,在这记录下实现过程. 1.新建文件夹 typescript-k ...
- 多条记录的同一字段组合成一个字符串 FOR XML PATH
stuff(select ',' + fieldname from tablename for xml path('')),1,1,'') 这一整句的作用是将多行fieldname字段的内容串联起来, ...
- vue教程2-01 vue生命周期、钩子函数
vue教程2-01 vue生命周期.钩子函数 <!DOCTYPE html> <html lang="en"> <head> <meta ...
- 这两周服务器被攻击,封锁了600多个IP地址段后今天服务器安静多了
这两周服务器被攻击,封锁了600多个IP地址段后今天服务器安静多了 建议大家在自己的服务器上也封杀这些瘪三的地址 iptables -I INPUT -s 123.44.55.0/24 -j DROP ...
- 微信小程序交流群,欢迎加入,其中微信小程序开发群、Jenkins开发群是有问必答群
微信小程序开发,请加群511389428,511389428 有问必答群:React开发,请加群523838207:523838207Jenkins开发,请加群155799363,155799363 ...
- Java类加载顺序
很长时间没看这方面的内容了,写篇文章让自己牢记一下,顺便分享一下. 首先,写代码以便检验结果.测试代码: public class Test { public static void main(Str ...