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面向对象精要第四章构造函数和原型对象整理精要
随机推荐
- form表单组件
1.sweetalert 组件地址 form组件 form表单完成的事情,: 提供input可以提交数据, 对提交的数据进行校验,提供错误提示 定义form组件 from django impor ...
- 杀掉所有 skynet 进程
ps aux | grep skynet | awk '/config/{print $2}' | xargs kill
- 01-Python的基础知识3
- 数字 - 数字常量: - 整型: - 概念: - 指代平常数学上的整数常量.Python中整型指代int类型. - 基本运算: - 可以执行平常的+,-,*,/ ,%以及其他操作 假设a=15,b ...
- Javascript如何避免连续调用中取到不存在的属性而导致报TypeError错?
背景: 在最近的 NODEJS 项目中,涉及到数据库的查询,回调函数里返回了查询结果,我这样做处理然后返回给前端: return results.collect_coupon[0].count 但是这 ...
- Windows平台下搭建自己的Git服务器
该文章转自:http://www.codeceo.com/article/windows-git-server.html Gitblit 是一个纯 Java 库用来管理.查看和处理 Git 资料库,相 ...
- 【sping揭秘】10、SpringIOC容器扩展
关于component-scan操作(去除,失效) 这个spring中的配置项,可以扫描我们对应的包下面的类,自动把带上@component,@service,@controller, @reposi ...
- Webstorm使用教程详解
Webstorm使用教程详解 Webstorm垂直分栏.左右分栏 Webstorm 主题.背景.颜色等设置的导入导出 使用WebStorm开发web前端 网页中文乱码问题的解决方案 Webstor ...
- mvc大对象json传输报错
public ActionResult GetLargeJsonResult() { return new ContentResult { Content = new JavaScriptSerial ...
- PEP_2007相关问题记录
1.在C++中,int main(int argc, char** argv)中的参数是什么意思? 其中,第一个argc是输入的参数的个数,第二个argv可以理解为一个数组,我们可以通过argv来打印 ...
- mysql基础知识(3)
十六.组合查询 使用 union 来组合查询,如果第一个查询返回M行,第二个查询返回N行,那么组合查询的结果一般为 M+N 行. 注意:每个查询必须包含相同的行.表达式的聚集函数:默认会去除相同行.表 ...