初探 PHP5 (二)

2016-01-29 13:18 4 1 收藏

初探 PHP5 (二),初探 PHP5 (二)

【 tulaoshi.com - PHP 】

抽象类

抽象类不能被实例化。
抽象类与其它类一样,允许定义变量及方法。
抽象类同样可以定义一个抽象的方法,抽象类的方法不会被执行,不过将有可能会在其派生类中执行。

例六:抽象类

<?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();
?

(本文来源于图老师网站,更多请访问https://www.tulaoshi.com/php/)

这个特殊的方法可以被用来实现过载(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 会识别出这个参数将会要是一个对象实例。


静态成员

(本文来源于图老师网站,更多请访问https://www.tulaoshi.com/php/)

静态成员和静态方法在面象对象编程的术语中被称作 对象方法(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 "n<br /n";
// Some catastrophic measure here
}
?

上例中,我们使用了 try 来执行花括号中的语句,当有错误发生的时候,代码会把错误交给 catch 子句来处理,在 catch 子句中,你需要指明要把错误交给某个对象处理,这样做可以

来源:https://www.tulaoshi.com/n/20160129/1489670.html

延伸阅读
标签: Web开发
* 本文是对《Classes and Objects in PHP5》系列文章的补充和修正,介绍了PHP5对象体系的总体框架,但有些特性没有具体介绍。强烈建议在读过《Classes and Objects in PHP5》后阅读本文。 PHP5推出的对象体系相信是大家最为期待的。PHP5借鉴了Java2的对象模型,提供了较为强大的面向对象编程支持,使用PHP来实现OO将变得轻松和自然。 ...
标签: PHP
RT,原来可以用于访问2000的语句用在2003上出错了 以下是原来用于访问ACCESS 2000的语句 <?php $db="xxx.mdb"; $conn=new COM('ADODB.Connection') or die('can not start Active X Data Objects'); $conn->Open("DRIVER={Microsoft Access Driver (*.mdb)}; DBQ=$db"); ? [ 本帖最后由 dragon005 于 2006-10-6 09:04...
标签: Web开发
新的对象模型 PHP中的对象处理部分已完全重写,具有更佳的性能和更多的功能。在先前的PHP版本中,对象被当做原始的简单类型 (如integer和string)来处理,这种方法的缺点是当变量被赋值或作为参数传递时,得到的是对象拷贝。而在新版本中, 对象是通过句柄来引用的,而不是通过对象的值(句柄想象为对象的标识符)。 很多PHP程序员可能...
标签: Web开发
一.介绍 现在在开发WEB应用的时候,比较流行的一种做法就是使用“MVC”结构,使用如此方式去开发WEB应用程序,逻辑性强、简浩明了,使程序设计起来更加方便,快捷。何为“MVC”呢?简单的来说,它就是“模型(Model)”、“视图(View)”及“控制器(Controller)”的结合体,也就是所有的“三层”抽象结构,当然这里所说的“MVC”是针对W...

经验教程

19

收藏

42
微博分享 QQ分享 QQ空间 手机页面 收藏网站 回到头部