第1次亲密接触PHP5(2)

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

类型指示

在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的学习、探讨。。。

(0)

相关推荐

  • 第1次亲密接触PHP5(2)

    接上篇,继续硬着头皮往下翻....:) 类型指示 在PHP5,你可以在一个类的方法中指明其参数必须为一个类的实例: Example 10: 类型实例 <?phpclass foo {  // code ...} class bar {  public function process_a_foo(foo $foo) {   // Some code  }} $b = new bar();$f = new foo();$b->process_a_foo($f);?> 可以看到,在变量前指定

  • 第1次亲密接触PHP5(1)

    文章来源:PHPBuilder.com原作者:Luis Argerich翻译:erquanerquan注:本人现还未来得及体验PHP5,只是翻译一篇老外的文章.以下均由erquan翻译,第1次作这些的事情希望没有误导大家.有些不准的地方请谅解.大家看这样的行不行,如果行的话,偶就翻译完,不行就翻译了,免得误导了大家,也累哦....:)转贴时请注明文章来源,谢谢:) PHP5的正式版还没发布,但我们可以学习.体验下开发版给我们带来的PHP新特性.本文将集中介绍以下3大PHP5新功能:* 新对象模式

  • 亲密接触PHP之PHP语法学习笔记1

    一,PHP脚本代码标记 PHP的脚本是文件中一对特殊标记所包括的内容,如ASP是"<%....%>",PHP可看成是"<?...?>". 然而为了适应XML标准以将PHP嵌入到XML或XHTML中,PHP不建议使用短格式的"<?...?>",而建议使用长格式标记"<?php...?>" 此外PHP代码块还支持 <script language="php"

  • 《CSS3实战》笔记--渐变设计(二)

    Gecko引擎的CSS渐变设计直线渐变基本语法 -moz-linear-gradient([<point> || <angle>,]?<stop>,<stop>[,<stop>]*) 参数说明: <point>:定义渐变起始点,取值包含数值,百分比,也可以使用关键字,其中left,center 和 right 关键字定义 x 轴坐标,top,center 和 bottom 关键字定义 y 轴坐标.当指定一个值时,另一个值默认为 cen

  • 简单谈谈lua和c的交互

    介绍 lua和c的亲密接触,靠的是一个虚拟栈.lua通过这个虚拟栈来实现和c之间值的互传.栈上的每一个元素是一个lua值(nil,number,string...). 当lua调用c函数的时候,这个函数会得到一个新的栈,这个栈独立于c函数本身的栈,也独立于lua自己的栈.它里面包含了lua要传给c的所有参数,然后c函数会把返回的结果放入这个栈中返回给调用者. 对于栈的查询操作,如果按照栈的规则,只能拿到栈顶的元素.但这里和常规的栈有一些差异.就是可以用一个索引来指向栈上的任何元素.正数的索引(1

  • ASP.Net前台调用后台变量的方法

    Net前台调用后台变量 1.Asp.Net中几种相似的标记符号: < %=...%>< %#... %>< % %>< %@ %>解释及用法 答: < %#... %>: 是在绑定控件DataBind()方法执行时被执行,用于数据绑定 如: < %# Container.DataItem("tit") %> < %= %>: 在程序执行时被调用,可以显示后台变量值 如: *.aspx中: < %=

  • asp,asp.net学习教程下载

    XML与ASP网站实作大全 ASP经典百例 ASP.NET 1.1专业开发 ASP.NET完全手册 ASP.NET 技术参考 ASP.netdatabase开发圣经 ASP数据库系统开发实例导航 怎样用ASP和COM进行Web编程 Asp.Net技术文档 ASP Net密技集錦(C#) 即时应用ASP脚本第二版 简单易学的ASP教程 ASP开发中的错误信息中文说明大全 10天学会ASP ASP中文使用手册 ASP.NET服务器控件高程 ASP.NET 实用全书 ASP 3.0高级编程 ASP.N

  • JavaScript基本对象

    作者:excelence转贴 整理日期:2004年6月15日 本文不只是关于JavaScript的,它是关于Notes/Domino中的JavaScript的! 虽然如是说,不过还是值得一看! 希望你有所收获! 亲密接触单选按钮.复选框和JavaScript的一些有趣的事情 我将以对象模型和一些常用对象开始,因为JavaScript里的一切都是从对象展开的.记住,本文不只是关于JavaScript的,它是关于Notes/Domino中的JavaScript的. 窗口 窗口是对象模型的顶端对象.通

  • 跟我学习javascript的异步脚本加载

    先来看这行代码: <script src = "allMyClientSideCode.js"></script> 这有点儿--不怎么样."这该放在哪儿?"开发人员会奇怪,"靠上点,放到<head>标签里?还是靠下点,放到<body>标签里?"这两种做法都会让富脚本站点的下场很凄惨.<head>标签里的大脚本会滞压所有页面渲染工作,使得用户在脚本加载完毕之前一直处于"白屏死机&

  • jquery checkbox无法用attr()二次勾选问题的解决方法

    今晨,漂亮的测试妹妹提了个奇怪的bug,说我一功能checkbox时隐时现,比如第一次打开有勾选,第n次打开可能就不选了. 想到与美女有亲密接触机会,马上鸡动起来. 经过偶层层抽次剥茧(da da jiang you),终于知道了原因:attr()在二次选中勾选框时,失效. 比如,如下HTML页面,一点[选中].二点[取消选中].三点[选中],瞧,不行了呗. 1.html <!doctype html> <html lang="en"> <head>

随机推荐