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


Posted in Javascript onNovember 17, 2014

在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方法。

Javascript 相关文章推荐
jQuery入门问答 整理的几个常见的初学者问题
Feb 22 Javascript
javascript中encodeURI和decodeURI方法使用介绍
May 06 Javascript
Flexigrid在IE下不显示数据的处理的解决方法
Oct 24 Javascript
JQuery性能优化的几点建议
May 14 Javascript
JavaScript设计模式之代理模式介绍
Dec 28 Javascript
使用mouse事件实现简单的鼠标经过特效
Jan 30 Javascript
浅谈javascript的url参数parse和build函数
Mar 04 Javascript
vue.js+Echarts开发图表放大缩小功能实例
Jun 09 Javascript
JavaScript中的回调函数实例讲解
Jan 27 Javascript
vue组件之间的数据传递方法详解
Apr 19 Javascript
JavaScript动态检测密码强度原理及实现方法详解
Jun 11 Javascript
js前端如何写一个精确的倒计时代码
Oct 25 Javascript
PHP PDO操作总结
Nov 17 #Javascript
JavaScript函数详解
Nov 17 #Javascript
提升PHP安全:8个必须修改的PHP默认配置
Nov 17 #Javascript
详解Javascript 装载和执行
Nov 17 #Javascript
jQuery带箭头提示框tooltips插件集锦
Nov 17 #Javascript
JavaScript实现的内存数据库LokiJS介绍和入门实例
Nov 17 #Javascript
浅谈jQuery异步对象(XMLHttpRequest)
Nov 17 #Javascript
You might like
php使用文本统计访问量的方法
2016/05/12 PHP
thinkphp分页实现效果
2016/10/13 PHP
PHP创建XML接口示例
2019/07/04 PHP
PHP pthreads v3下worker和pool的使用方法示例
2020/02/21 PHP
学习YUI.Ext 第七天--关于View&amp;JSONView
2007/03/10 Javascript
Firefox div高度自适应
2009/04/28 Javascript
JavaScript 组件之旅(三):用 Ant 构建组件
2009/10/28 Javascript
jquery禁用右键单击功能屏蔽F5刷新
2014/03/17 Javascript
jQuery控制的不同方向的滑动(向左、向右滑动等)
2014/07/18 Javascript
javascript中2个感叹号的用法实例详解
2014/09/04 Javascript
Node.js中使用mongoskin操作mongoDB实例
2014/09/28 Javascript
jQuery中first()方法用法实例
2015/01/06 Javascript
js实现将选中内容分享到新浪或腾讯微博
2015/12/16 Javascript
jQuery中的AjaxSubmit使用讲解
2016/09/25 Javascript
bootstrap中使用google prettify让代码高亮的方法
2016/10/21 Javascript
老生常谈jquery id选择器和class选择器的区别
2017/02/12 Javascript
JavaScript手风琴页面制作
2017/05/17 Javascript
iframe高度自适应及隐藏滚动条的实例详解
2017/09/29 Javascript
v-slot和slot、slot-scope之间相互替换实例
2020/09/04 Javascript
Python中的map、reduce和filter浅析
2014/04/26 Python
Python使用chardet判断字符编码
2015/05/09 Python
Python二分法搜索算法实例分析
2015/05/11 Python
python 计算两个日期相差多少个月实例代码
2017/05/24 Python
python爬虫 正则表达式使用技巧及爬取个人博客的实例讲解
2017/10/20 Python
Django添加sitemap的方法示例
2018/08/06 Python
pandas ix &amp;iloc &amp;loc的区别
2019/01/10 Python
python从子线程中获得返回值的方法
2019/01/30 Python
python利用proxybroker构建爬虫免费IP代理池的实现
2021/02/21 Python
H5 canvas中width、height和style的宽高区别详解
2018/11/02 HTML / CSS
PREMIUM-MALL法国:行李、箱包及配件在线
2019/05/30 全球购物
工商管理专业实习大学生自我鉴定
2013/09/19 职场文书
学习雷锋标语
2014/06/25 职场文书
2016学校先进集体事迹材料
2016/02/29 职场文书
Python数据分析之绘图和可视化详解
2021/06/02 Python
Python实现打乒乓小游戏
2021/09/25 Python
NoSQL优缺点与MongoDB数据库简介
2022/06/05 MongoDB