PHP使用方法重载实现动态创建属性的get和set方法
作者:bea
在PHP中,我们不能够直接通过方法名相同,签名不同的方法来实现方法重载,因为PHP是弱数据类型,不能很好的区分签名。但是,可以在PHP的类中运用__call()方法来实现方法重载。当调用一个类中并不存在的方法时,会自动调用__call()方法,其形式为__call($name,$arguments) 其中$name是方法的名称,$arguments是一个数组类型的参数。 下面的例子是使用PHP的方法重载来动态创建get和set方法。(在面向对象编程中,一个类中的属性会使用ge
在PHP中,我们不能够直接通过方法名相同,签名不同的方法来实现方法重载,因为PHP是弱数据类型,不能很好的区分签名。但是,可以在PHP的类中运用__call()方法来实现方法重载。当调用一个类中并不存在的方法时,会自动调用__call()方法,其形式为__call($name,$arguments) 其中$name是方法的名称,$arguments是一个数组类型的参数。
下面的例子是使用PHP的方法重载来动态创建get和set方法。(在面向对象编程中,一个类中的属性会使用get和set来赋值,但是如果一个类中有太多的属性,比如30个,那么如果不用方法重载的话,我们就需要写30个set方法,30个get方法,自已一边慢慢写去吧。。。)
代码如下:
<?php
class person
{
private $name;
private $age;
private $address;
private $school;
private $phonenum;
public function __call($method,$args)
{
$perfix=strtolower(substr($method,0,3));
$property=strtolower(substr($method,3));
if(empty($perfix)||empty($property))
{
return;
}
if($perfix=="get"&&isset($this->$property))
{
return $this->$property;
}
if($perfix=="set")
{
$this->$property=$args[0];
}
}
}
$p=new person();
$p->setname('lvcy');
$p->setage(23);
$p->setAddress(chengdu);
$p->setschool('uestc');
$p->setphonenum('123456');
echo $p->getname().'\n';
echo $p->getage().'\n';
echo $p->getaddress().'\n';
echo $p->getschool().'\n';
?>
通过__Call()方法很容易的解决了这个问题,而不是编写每个属性的get set方法。
有用 | 无用
下面的例子是使用PHP的方法重载来动态创建get和set方法。(在面向对象编程中,一个类中的属性会使用get和set来赋值,但是如果一个类中有太多的属性,比如30个,那么如果不用方法重载的话,我们就需要写30个set方法,30个get方法,自已一边慢慢写去吧。。。)
代码如下:
<?php
class person
{
private $name;
private $age;
private $address;
private $school;
private $phonenum;
public function __call($method,$args)
{
$perfix=strtolower(substr($method,0,3));
$property=strtolower(substr($method,3));
if(empty($perfix)||empty($property))
{
return;
}
if($perfix=="get"&&isset($this->$property))
{
return $this->$property;
}
if($perfix=="set")
{
$this->$property=$args[0];
}
}
}
$p=new person();
$p->setname('lvcy');
$p->setage(23);
$p->setAddress(chengdu);
$p->setschool('uestc');
$p->setphonenum('123456');
echo $p->getname().'\n';
echo $p->getage().'\n';
echo $p->getaddress().'\n';
echo $p->getschool().'\n';
?>
通过__Call()方法很容易的解决了这个问题,而不是编写每个属性的get set方法。
有用 | 无用
猜你喜欢
您可能感兴趣的文章:
- IE6浏览器中window.location.href无效的解决方法
- js判断滚动条是否已到页面最底部或顶部实例
- js中数组排序sort方法的原理分析
- javascript继承机制实例详解
- jQuery验证插件 Validate详解
- PHP中使用微秒计算脚本执行时间例子
- jQuery中$.get、$.post、$.getJSON和$.ajax的用法详解
- 实现图片预加载的三大方法及优缺点分析
- jQuery Ajax()方法使用指南
- javascript匿名函数实例分析
- Linux下使用jq友好的打印JSON技巧分享
- 删除Javascript Object中间的key
- 如何在MVC应用程序中使用Jquery
- Jquery实现仿腾讯微博发表广播
- JavaScript数组常用操作技巧汇总
- jquery 实现返回顶部功能
- 超棒的响应式布局jQuery插件Freetile.js
- jQuery Masonry瀑布流插件使用详解
- javascript将url中的参数加密解密代码