php面向对象精要(3)

2018-02-22 20:08:53来源:cnblogs.com作者:ghostwu人点击

分享

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;

输出结果:

[email protected]:~/php_study/php5/03$ php -f exception_usage.php ghostwuprintObj接收到一个null对象in file:/home/ghostwu/php_study/php5/03/exception_usage.phpin line:10try...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();

最新文章

123

最新摄影

微信扫一扫

第七城市微信公众平台