html5中文学习网

您的位置: 首页 > 网站及特效实例 > javascript特效 » 正文

PHP使用方法重载实现动态创建属性的get和set方法_javascript技巧_

[ ] 已经帮助:人解决问题

在PHP中,我们不能够直接通过方法名相同,签名不同的方法来实现方法重载,因为PHP是弱数据类型,不能很好的区分签名。但是,可以在PHP的类中运用__call()方法来实现方法重载。当调用一个类中并不存在的方法时,会自动调用__call()方法,其形式为__call($name,$arguments) 其中$name是方法的名称,$arguments是一个数组类型的参数。3D5HTML5中文学习网 - HTML5先行者学习网

下面的例子是使用PHP的方法重载来动态创建get和set方法。(在面向对象编程中,一个类中的属性会使用get和set来赋值,但是如果一个类中有太多的属性,比如30个,那么如果不用方法重载的话,我们就需要写30个set方法,30个get方法,自已一边慢慢写去吧。。。)3D5HTML5中文学习网 - HTML5先行者学习网

复制代码 代码如下:
3D5HTML5中文学习网 - HTML5先行者学习网
<?php3D5HTML5中文学习网 - HTML5先行者学习网
class person3D5HTML5中文学习网 - HTML5先行者学习网
{3D5HTML5中文学习网 - HTML5先行者学习网
 private $name;3D5HTML5中文学习网 - HTML5先行者学习网
 private $age;3D5HTML5中文学习网 - HTML5先行者学习网
 private $address;3D5HTML5中文学习网 - HTML5先行者学习网
 private $school;3D5HTML5中文学习网 - HTML5先行者学习网
 private $phonenum;3D5HTML5中文学习网 - HTML5先行者学习网
 public function __call($method,$args)3D5HTML5中文学习网 - HTML5先行者学习网
 {3D5HTML5中文学习网 - HTML5先行者学习网
  $perfix=strtolower(substr($method,0,3));3D5HTML5中文学习网 - HTML5先行者学习网
  $property=strtolower(substr($method,3));3D5HTML5中文学习网 - HTML5先行者学习网
  if(empty($perfix)||empty($property))3D5HTML5中文学习网 - HTML5先行者学习网
  {3D5HTML5中文学习网 - HTML5先行者学习网
   return;3D5HTML5中文学习网 - HTML5先行者学习网
  }3D5HTML5中文学习网 - HTML5先行者学习网
  if($perfix=="get"&&isset($this->$property))3D5HTML5中文学习网 - HTML5先行者学习网
  {3D5HTML5中文学习网 - HTML5先行者学习网
   return $this->$property;3D5HTML5中文学习网 - HTML5先行者学习网
  }3D5HTML5中文学习网 - HTML5先行者学习网
  if($perfix=="set")3D5HTML5中文学习网 - HTML5先行者学习网
  {3D5HTML5中文学习网 - HTML5先行者学习网
   $this->$property=$args[0];3D5HTML5中文学习网 - HTML5先行者学习网
  }3D5HTML5中文学习网 - HTML5先行者学习网
 }3D5HTML5中文学习网 - HTML5先行者学习网
}3D5HTML5中文学习网 - HTML5先行者学习网
$p=new person();3D5HTML5中文学习网 - HTML5先行者学习网
$p->setname('lvcy');3D5HTML5中文学习网 - HTML5先行者学习网
$p->setage(23);3D5HTML5中文学习网 - HTML5先行者学习网
$p->setAddress(chengdu);3D5HTML5中文学习网 - HTML5先行者学习网
$p->setschool('uestc');3D5HTML5中文学习网 - HTML5先行者学习网
$p->setphonenum('123456');3D5HTML5中文学习网 - HTML5先行者学习网
echo $p->getname().'//n';3D5HTML5中文学习网 - HTML5先行者学习网
echo $p->getage().'//n';3D5HTML5中文学习网 - HTML5先行者学习网
echo $p->getaddress().'//n';3D5HTML5中文学习网 - HTML5先行者学习网
echo $p->getschool().'//n';3D5HTML5中文学习网 - HTML5先行者学习网
?>3D5HTML5中文学习网 - HTML5先行者学习网
3D5HTML5中文学习网 - HTML5先行者学习网

通过__Call()方法很容易的解决了这个问题,而不是编写每个属性的get set方法。3D5HTML5中文学习网 - HTML5先行者学习网

(责任编辑:)
推荐书籍
推荐资讯
关于HTML5先行者 - 联系我们 - 广告服务 - 友情链接 - 网站地图 - 版权声明 - 人才招聘 - 帮助