您的位置:首页 > 编程语言 > PHP开发

PHP中的 抽象类(abstract class)和 接口(interface)

2014-03-12 09:23 603 查看
PHP5 的对象新增了一个专用方法 __call(),这个方法用来监视一个对象中的其它方法。如果你试着调用一个对象中不存在或被权限控制中的方法,__call 方法将会被自动调用。

例七:__call

[html] view
plaincopy

<?php

class foo {

function __call($name,$arguments) {

print("Did you call me? I'm $name!");

}

} $x = new foo();

$x->doStuff();

$x->fancy_stuff();

?>

这个特殊的方法可以被用来实现JAVA中的“过载(overloading)”的动作,这样你就可以检查你的参数并且通过调用一个私有的方法来传递参数。

例八:使用 __call 实现“过载”动作

[html] view
plaincopy

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

?>

引自:

_call和___callStatic这两个函数是php类
的默认函数,

__call() 在一个对象的上下文中,如果调用的方法不能访问,它将被触发
__callStatic() 在一个静态的上下文中,如果调用的方法不能访问,它将被触发

实例:

[html] view
plaincopy

<?php

abstract class Obj

{

protected $property = array();

abstract protected function show();

public function __call($name,$value)

{

if(preg_match("/^set([a-z][a-z0-9]+)$/i",$name,$array))

{

$this->property[$array[1]] = $value[0];

return;

}

elseif(preg_match("/^get([a-z][a-z0-9]+)$/i",$name,$array))

{

return $this->property[$array[1]];

}

else

{

exit("<br>;Bad function name '$name' ");

}

}

}

class User extends Obj

{

public function show()

{

print ("Username: ".$this->property['Username']."<br>;");

//print ("Username: ".$this->getUsername()."<br>;");

print ("Sex: ".$this->property['Sex']."<br>;");

print ("Age: ".$this->property['Age']."<br>;");

}

}

class Car extends Obj

{

public function show()

{

print ("Model: ".$this->property['Model']."<br>;");

print ("Sum: ".$this->property['Number'] * $this ->property['Price']."<br>;");

}

}

$user = new User;

$user ->setUsername("Anny");

$user ->setSex("girl");

$user ->setAge(20);

$user ->show();

print("<br>;<br>;");

$car = new Car;

$car ->setModel("BW600");

$car ->setNumber(5);

$car ->setPrice(40000);

$car ->show();

?>
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: