第1次亲密接触PHP5(2)


Posted in PHP onOctober 09, 2006

接上篇,继续硬着头皮往下翻。。。。:)
类型指示

在PHP5,你可以在一个类的方法中指明其参数必须为一个类的实例:

Example 10: 类型实例

<?php
class foo {
  // code ...
}

class bar {
  public function process_a_foo(foo $foo) {
   // Some code
  }
}

$b = new bar();
$f = new foo();
$b->process_a_foo($f);
?>

可以看到,在变量前指定一个类名,让PHP5知道这个变量将是一个类的实例

静态成员

静态成员和静态方法在OOP中一般称为"类变量"和"类方法"。

一个"类方法"可以在对象没有被实例化的时候调用
一个"类变量"可以在对象没有被实例化的时候访问(也不需要对象的方法来调用)

Example 11: 类变量和类方法

<?php
class calculator {
  static public $pi = 3.14151692;

  static public function add($x,$y) {
    return $x + $y;
  }
}

$s = calculator::$pi;
$result = calculator::add(3,7);
print("$result");
?>

* 异常处理

异常处理是开发语言中公认的处理异常错误的方法,如在JAVA和C++中。
PHP5用"try"和"catch"关键字来捕获异常。

Example 12: 异常处理

<?php
class foo {

  function divide($x,$y) {
    if($y==0) throw new Exception("cannot divide by zero");
    return $x/$y;
  }
}

$x = new foo();

try {
  $x->divide(3,0);   
} catch (Exception $e) {
    echo $e->getMessage();
    echo "\n<br />\n";
    // Some catastrophic measure here
}
?>

可以看出,"try"表示的是执行代码的地方,当有错误的时候执行"catch"区域的代码。
在"catch"区域你应当指明执行异常的对象,这样可以使我们的结构更清晰

自定义异常处理

你可以在程序中定义自己习惯的捕获异常错误的代码。
非常简单,你仅仅需要继承一个异常类,在这个类中需要一个构造器和一个叫getMessage的方法而已:

Example 13: 自定义异常类

<?php
class WeirdProblem extends Exception {

   private $data;

   function WeirdProblem($data) {
        parent::exception();
        $this->data = $data;
    }

    function getMessage() {
        return $this->data . " caused a weird exception!";
    }
}
?>

现在就可以用"throw new WeirdProblem($foo) "来抛出异常。如果在try{}这样的区域中出现异常,PHP5就会跳入
catch区域来抛出异常。

名称空间

"名称空间"可以让你方便地调用一组类或方法:

Example 14: 名称空间

<?php
namespace Math {

  class Complex {
    //...code...
    function __construct() {
      print("hey");
    }
  }
}

$m = new Math::Complex();
?>

注:在实际应用中,你可以在不同的名称空间里定义同名的类来完成不同的任务(但接口要相同)
<翻译完毕>

终天蹩手蹩脚地翻译完了,有些翻译不正确的地方,如术语、对原文的理解,敬请一一指出,共同完善,共同开始PHP5的学习、探讨。。。

PHP 相关文章推荐
用Apache反向代理设置对外的WWW和文件服务器
Oct 09 PHP
php 函数使用方法与函数定义方法
May 09 PHP
php在多维数组中根据键名快速查询其父键以及父键值的代码
May 07 PHP
深入探讨:PHP使用数据库永久连接方式操作MySQL的是与非
Jun 05 PHP
解析coreseek for sphinx的使用
Jun 21 PHP
Drupal7 form表单二次开发要点与实例
Mar 02 PHP
php通过修改header强制图片下载的方法
Mar 24 PHP
PHP中模糊查询并关联三个select框
Jun 19 PHP
laravel ORM 只开启created_at的几种方法总结
Jan 29 PHP
php实现表单提交上传文件功能
May 28 PHP
解决php extension 加载顺序问题
Aug 16 PHP
PHP7 安装event扩展的实现方法
Oct 08 PHP
PHP的FTP学习(一)[转自奥索]
Oct 09 #PHP
一个多文件上传的例子(原创)
Oct 09 #PHP
[FAQ]PHP中的一些常识:类篇
Oct 09 #PHP
Oracle Faq(Oracle的版本)
Oct 09 #PHP
PHP 和 HTML
Oct 09 #PHP
数据库相关问题
Oct 09 #PHP
编译问题
Oct 09 #PHP
You might like
typecho插件编写教程(五):核心代码
2015/05/28 PHP
JavaScript(js)设置默认输入焦点(focus)
2012/12/28 Javascript
解决jQuery动态获取手机屏幕高和宽的问题
2014/05/07 Javascript
jQuery自带的一些常用方法总结
2014/09/03 Javascript
JavaScript中数组添加值和访问值常见问题
2016/02/06 Javascript
jquery通过name属性取值的简单实现方法
2016/06/20 Javascript
js实现无缝滚动图
2017/02/22 Javascript
JS获取子、父、兄节点方法小结
2017/08/14 Javascript
jquery 输入框查找关键字并提亮颜色的实例代码
2018/01/23 jQuery
Vue2.x中利用@font-size引入字体图标报错的解决方法
2018/09/28 Javascript
vue+iview分页组件的封装
2020/11/17 Vue.js
keep-alive保持组件状态的方法
2020/12/02 Javascript
[47:21]Liquid vs TNC Supermajor 胜者组 BO3 第一场 6.4
2018/06/05 DOTA
[01:12:40]DOTA2-DPC中国联赛 正赛 DLG vs XG BO3 第三场 1月25日
2021/03/11 DOTA
python实现巡检系统(solaris)示例
2014/04/02 Python
Python中处理字符串之islower()方法的使用简介
2015/05/19 Python
python自动zip压缩目录的方法
2015/06/28 Python
python使用fcntl模块实现程序加锁功能示例
2017/06/23 Python
Python切片操作深入详解
2018/07/27 Python
Python获取时间范围内日期列表和周列表的函数
2019/08/05 Python
opencv调整图像亮度对比度的示例代码
2019/09/27 Python
Django1.11自带分页器paginator的使用方法
2019/10/31 Python
基于Keras的格式化输出Loss实现方式
2020/06/17 Python
Python把图片转化为pdf代码实例
2020/07/28 Python
Sentry错误日志监控使用方法解析
2020/11/12 Python
怀俄明州飞钓:Platte River Fly Shop
2017/12/28 全球购物
卡骆驰德国官方网站:Crocs德国
2019/03/29 全球购物
单位个人查摆问题及整改措施
2014/10/28 职场文书
护士自荐信怎么写
2015/03/06 职场文书
2015年挂职干部工作总结
2015/05/14 职场文书
会议简讯范文
2015/07/20 职场文书
2019年暑期安全广播稿!
2019/07/03 职场文书
假如给我三天光明:舟逆水而行,人遇挫而达 
2019/10/29 职场文书
使用jpa之动态插入与修改(重写save)
2021/11/23 Java/Android
Python Pandas 删除列操作
2022/03/16 Python
SQL Server中的逻辑函数介绍
2022/05/25 SQL Server