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 相关文章推荐
js禁止页面使用右键(简单示例代码)
Nov 13 Javascript
javascript unicode与GBK2312(中文)编码转换方法
Nov 14 Javascript
浅谈JS闭包中的循环绑定处理程序
Nov 09 Javascript
jQuery点缩略图弹出层显示大图片
Feb 13 Javascript
动态JavaScript所造成一些你不知道的危害
Sep 25 Javascript
使用Javascript监控前端相关数据的代码
Oct 27 Javascript
JavaScript中return用法示例
Nov 29 Javascript
VueJs与ReactJS和AngularJS的异同点
Dec 12 Javascript
js推箱子小游戏步骤代码解析
Jan 10 Javascript
JavaScript设计模式之代理模式实例分析
Jan 16 Javascript
vue中过滤器filter的讲解
Jan 21 Javascript
详解JavaScript之ES5的继承
Jul 08 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实现的sqlite数据库连接类
2014/12/12 PHP
typecho插件编写教程(四):插件挂载
2015/05/28 PHP
PHP连接MySQL进行增、删、改、查操作
2017/02/19 PHP
一个很酷的拖动层的js类,兼容IE及Firefox
2009/06/23 Javascript
jQuery 选择器、DOM操作、事件、动画
2010/11/25 Javascript
javascript学习笔记(十) js对象 继承
2012/06/19 Javascript
使用POST方式弹出窗口的两种方法示例介绍
2014/01/29 Javascript
用javascript对一个json数组深度赋值示例
2014/07/27 Javascript
jQuery中after()方法用法实例
2014/12/25 Javascript
JavaScript给input的value赋值引发的关于基本类型值和引用类型值问题
2015/12/07 Javascript
原生JS和jQuery版实现文件上传功能
2016/04/18 Javascript
手机端点击图片放大特效PhotoSwipe.js插件实现
2016/08/24 Javascript
利用Vue.js实现求职在线之职位查询功能
2017/07/03 Javascript
详解.vue文件中监听input输入事件(oninput)
2017/09/19 Javascript
微信小程序实现带参数的分享功能(两种方法)
2019/05/17 Javascript
Vue触发隐藏input file的方法实例详解
2019/08/14 Javascript
[27:28]Ti4 冒泡赛第二天 iG vs NEWBEE 1
2014/07/15 DOTA
Python的垃圾回收机制深入分析
2014/07/16 Python
在Python中使用PIL模块对图片进行高斯模糊处理的教程
2015/05/05 Python
Python+Wordpress制作小说站
2017/04/14 Python
python在ubuntu中的几种安装方法(小结)
2017/12/08 Python
Python实现调用另一个路径下py文件中的函数方法总结
2018/06/07 Python
numpy 计算两个数组重复程度的方法
2018/11/07 Python
python+selenium+chromedriver实现爬虫示例代码
2020/04/10 Python
Molton Brown美国官网:奢华美容、香水、沐浴和身体护理
2020/09/02 全球购物
意大利奢侈品牌在线精品店:Jole.it
2020/11/23 全球购物
中科创达面试题
2016/12/28 面试题
致长跑运动员广播稿
2014/01/31 职场文书
合作协议书范本
2014/04/17 职场文书
学校安全生产月活动总结
2014/07/05 职场文书
诉讼授权委托书
2014/10/15 职场文书
2014年小学班主任工作总结
2014/11/08 职场文书
共青团优秀团员申请书(范文)
2019/08/15 职场文书
css display table 自适应高度、宽度问题的解决
2021/05/07 HTML / CSS
浅谈Redis的几个过期策略
2021/05/27 Redis
Spring Data JPA框架Repository自定义实现
2022/04/28 Java/Android