php面向对象精要(3)
2018-06-22 05:35:53来源:未知 阅读 ()
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 ) }
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();
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
- PHP写UltraEdit插件脚本实现方法 2020-03-29
- php 带逗号千位符数字的处理方法 2020-03-28
- PHP三元运算符的结合性介绍 2020-03-28
- PHP静态延迟绑定和普通静态效率的对比 2020-03-28
- 基于php流程控制语句和循环控制语句 2020-03-28
IDC资讯: 主机资讯 注册资讯 托管资讯 vps资讯 网站建设
网站运营: 建站经验 策划盈利 搜索优化 网站推广 免费资源
网络编程: Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术: Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧: 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷
网页制作: FrontPages Dreamweaver Javascript css photoshop fireworks Flash