博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
PHP __call()方法
阅读量:4043 次
发布时间:2019-05-24

本文共 1913 字,大约阅读时间需要 6 分钟。

从网上找的。
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 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();
?>

转载地址:http://daqdi.baihongyu.com/

你可能感兴趣的文章
搜索引擎核心技术入门
查看>>
Cloud Foundry中Service Gateway功能以及通信机制
查看>>
浅谈计算机系统结构的性能与可靠性
查看>>
TCP/IP协议中的安全问题
查看>>
Winnowing:一种文档指纹的通用算法
查看>>
浏览器中的安全窗口通信
查看>>
基于网络爬虫的XSS漏洞检测技术
查看>>
JasperReports Server on Cloud Foundry
查看>>
Cloud Foundry中基于Master/Slave机制的Service Gateway——解决Service Gateway单点故障问题
查看>>
iReport+JasperReports Server开发过程的Troubleshooting
查看>>
Cloud Foundry中通用service的集成
查看>>
Cloud Foundry中 JasperReports service集成
查看>>
Cloud Foundry中vmc tunnel与caldecott原理
查看>>
ConcurrentHashMap面试详解
查看>>
深拷贝和浅拷贝
查看>>
java集合框架
查看>>
CMS垃圾回收器和G1垃圾回收器区别
查看>>
菜鸟学习Python之数据类型
查看>>
菜鸟学Python之面向对象
查看>>
MFC中combobox中的addstring 报错问题
查看>>