PHP __call()方法
来源:互联网 发布:windows 安装linux 编辑:程序博客网 时间:2024/04/29 05:52
从网上找的。
引自:http://bbs.17php.com/show_title.php?id=1443
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");
?>
引自:
实例:
<?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();
?>
引自:http://bbs.17php.com/show_title.php?id=1443
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");
?>
引自:
_call和___callStatic这两个函数是php类 的默认函数,
__call()在一个对象的上下文中,如果调用的方法不能访问,它将被触发
__callStatic()在一个静态的上下文中,如果调用的方法不能访问,它将被触发实例:
<?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();
?>
- PHP __call()方法
- PHP __call()方法
- php 魔术方法 __call
- php __call()方法
- PHP __call()方法
- php 魔术方法 __call
- PHP 重载方法 __call()
- PHP __call()方法
- php __call()魔术方法介绍
- php中__call()方法使用
- PHP魔术方法之__call重载方法
- php的魔法方法__call使用
- 关于PHP的魔术方法__call()
- PHP 魔术方法之 __call 与 __callStatic
- php的__call 与__callStatic 方法
- PHP面向对象:魔术方法__call()
- PHP 魔法方法之__call和__callStatic
- php 使用__call实现钩子方法
- HTML5游戏开发-Box2dWeb应用(一)-创建各种各样的刚体
- 初学VC++的体会
- 【项目分析】家居中的那一点点事——宠物之家
- Selenium API
- Word2003取消首字母大写方法
- PHP __call()方法
- spring 配置文件初始执行方法
- 深入理解注解(Annotation)
- Jsp Model1和Jsp Model2
- S3C2440流水灯(汇编语言+RealView-MDK4.12)
- 一个简单背景建模
- 一个简单的五子棋程序
- EBS中取profile值的用法
- 深入理解PHP内存管理之谁动了我的内存