第1次亲密接触PHP5(2)

  作者:bea

接上篇,继续硬着头皮往下翻。。。。:) 类型指示 在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);?>可以看到,在变量前

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

类型指示



在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 "
<br />
";

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






有用  |  无用

猜你喜欢