澳门新浦京娱乐游戏第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);?可以看到,在变量前指定一个类名,让PHP5知道这个变量将是一个类的实例静态成员
静态成员和静态方法在OOP中一般称为”类变量”和”类方法”。一个”类方法”可以在对象没有被实例化的时候调用一个”类变量”可以在对象没有被实例化的时候访问Example
11: 类变量和类方法?phpclass 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: 异常处理?phpclass 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 “/nbr
//n”;// Some catastrophic measure
here}?可以看出,”try”表示的是执行代码的地方,当有错误的时候执行”catch”区域的代码。在”catch”区域你应当指明执行异常的对象,这样可以使我们的结构更清晰自定义异常处理
你可以在程序中定义自己习惯的捕获异常错误的代码。非常简单,你仅仅需要继承一个异常类,在这个类中需要一个构造器和一个叫getMessage的方法而已:Example
13: 自定义异常类?phpclass 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: 名称空间
?phpnamespace Math {class Complex {//…code…function __construct()
{print(“hey”);}}}$m = new
Math::Complex();?注:在实际应用中,你可以在不同的名称空间里定义同名的类来完成不同的任务翻译完毕终天蹩手蹩脚地翻译完了,有些翻译不正确的地方,如术语、对原文的理解,敬请一一指出,共同完善,共同开始PHP5的学习、探讨。。。

抽象类 抽象类不能被实例化。 抽象类与其它类一样,允许定义变量及方法。
抽象类同样可以定义一个抽象的方法,抽象类的方法不会被执行,不过将有可能会在其派生类中执行。
例六:抽象类 ?php abstract class foo { protected $x; abstract function
display(); function setX($x) { $this-x = $x; } } class foo2 extends foo
{ function display() { // Code } } ? __call PHP5
的对象新增了一个专用方法
__call(),这个方法用来监视一个对象中的其它方法。如果你试着调用一个对象中不存在的方法,__call
方法将会被自动调用。 例七:__call ?php class foo { function
__call($name,$arguments) { print(“Did you call me? I’m $name!”); } }
$x = new foo(); $x-doStuff(); $x-fancy_stuff(); ?
这个特殊的方法可以被用来实现“过载(overloading)”的动作,这样你就可以检查你的参数并且通过调用一个私有的方法来传递参数。
例八:使用 __call 实现“过载”动作 ?php class Magic { function
__call($name,$arguments) { if($name==’foo’) {
if(is_int($arguments[0])) $this-foo_for_int($arguments[0]);
if(is_string($arguments[0])) $this-foo_for_string($arguments[0]);
} } private function foo_for_int($x) { print(“oh an int!”); } private
function foo_for_string($x) { print(“oh a string!”); } } $x = new
Magic(); $x-foo(3); $x-foo(“3”); ? __set 和 __get
这是一个很棒的方法,__set 和 __get
方法可以用来捕获一个对象中不存在的变量和方法。 例九: __set 和 __get
?php class foo { function __set($name,$val) { print(“Hello, you tried
to put $val in $name”); } function __get($name) { print(“Hey you asked
for $name”); } } $x = new foo(); $x-bar = 3; print($x-winky_winky); ?
类型指示 在 PHP5
中,你可以在对象的方法中指明其参数必须为另一个对象的实例。
例十:类型指示 ?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
会识别出这个参数将会要是一个对象实例。 静态成员
静态成员和静态方法在面象对象编程的术语中被称作 “对象方法(class methods)”
和 “对象变量(class variables)”。 “对象方法”
在一个对象没有实例化前允许被调用。同样,“对象变量”
在一个对象没有实例化前可以被独立操作控制(不需要用一个对象的方法来控制)。
例十一:对象方法和对象变量 ?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”
来控制程序的错误。 例十二:异常处理 ?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 “nbr /n”; // Some
catastrophic measure here } ? 上例中,我们使用了 “try”
来执行花括号中的语句,当有错误发生的时候,代码会把错误交给 “catch”
子句来处理,在 “catch”
子句中,你需要指明要把错误交给某个对象处理,这样做可以使代码结构看起来更清晰,因为现在我们可以把所有的错误信息交给一个对象来处理。
自定义错误处理
你可以很方便的用自定义的处理错误的代码来控制你的程序中的意外。你仅仅需要从异常类中派生出一个自己的错误控制类,在你自己的错误控制类中,你需要有一个构造函数和一个
getMessage 方法,以下是一个例子。 例十三:自定义错误处理 ?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” 部分来处理。 名称空间
名称空间对类的分组或函数分组很有用。它可以把一些相关的类或函数给组合到一起,方便以后调用。
例十四:名称空间 ?php namespace Math { class Complex { //…code…
function __construct() { print(“hey”); } } } $m = new Math::Complex();
?
注意你需要在何种情况下使用名称空间,在实际运用中,你可能会需要声明两个或多个名称一样的对象来做不同的事情,那么你就可以把他们分别放到不同的名称空间中去。

You can leave a response, or trackback from your own site.

Leave a Reply

网站地图xml地图