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扩展分享
Mar 10 Javascript
JS中三目运算符和if else的区别分析与示例
Nov 21 Javascript
详解AngularJs中$resource和restfu服务端数据交互
Sep 21 Javascript
详解Node.js中的事件机制
Sep 22 Javascript
老生常谈JavaScript中的this关键字
Oct 01 Javascript
BootStrap 实现各种样式的进度条效果
Dec 07 Javascript
概述BootStrap中role=&quot;form&quot;及role作用角色
Dec 08 Javascript
ES6新特性八:async函数用法实例详解
Apr 21 Javascript
vue学习之mintui picker选择器实现省市二级联动示例
Oct 12 Javascript
vue插件开发之使用pdf.js实现手机端在线预览pdf文档的方法
Jul 12 Javascript
JS中的一些常用的函数式编程术语
Jun 15 Javascript
js前端设计模式优化50%表单校验代码示例
Jun 21 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
建立动态的WML站点(二)
2006/10/09 PHP
php 网页播放器用来播放在线视频的代码(自动判断并选择视频文件类型)
2010/06/03 PHP
PHP5 的对象赋值机制介绍
2011/08/02 PHP
谨慎使用PHP的引用原因分析
2012/09/06 PHP
解析:使用php mongodb扩展时 需要注意的事项
2013/06/18 PHP
CentOS 7.2 下编译安装PHP7.0.10+MySQL5.7.14+Nginx1.10.1的方法详解(mini版本)
2016/09/01 PHP
Thinkphp5.0框架视图view的模板布局用法分析
2019/10/12 PHP
用javascript来实现动画导航效果的代码
2007/12/16 Javascript
JS 获取浏览器和屏幕宽高等信息的实现思路及代码
2013/07/31 Javascript
javascripit实现密码强度检测代码分享
2013/12/12 Javascript
node.js中的console用法总结
2014/12/15 Javascript
jquery实现向下滑出的二级导航下滑菜单效果
2015/08/25 Javascript
jQuery实现div拖拽效果实例分析
2016/02/20 Javascript
Bootstrap表单Form全面解析
2016/06/13 Javascript
AngularJS ng-change 指令的详解及简单实例
2016/07/30 Javascript
完美解决jQuery的hover事件在IE中不停闪动的问题
2017/02/10 Javascript
Bootstrap 模态框(Modal)带参数传值实例
2017/08/20 Javascript
浅析Proxy可以优化vue的数据监听机制问题及实现思路
2018/11/29 Javascript
微信小程序bindtap事件与冒泡阻止详解
2019/08/08 Javascript
vue实现带过渡效果的下拉菜单功能
2020/02/19 Javascript
ant design vue datepicker日期选择器中文化操作
2020/10/28 Javascript
[01:05:40]VG vs Newbee 2018国际邀请赛小组赛BO2 第二场 8.17
2018/08/20 DOTA
使用python解析xml成对应的html示例分享
2014/04/02 Python
python中requests爬去网页内容出现乱码问题解决方法介绍
2017/10/25 Python
在Pycharm中使用GitHub的方法步骤
2019/06/13 Python
html5 canvas合成海报所遇问题及解决方案总结
2017/08/03 HTML / CSS
美国精品地毯网站:Boutique Rugs
2020/03/04 全球购物
英国领先的高级美容和在线皮肤诊所:Face the Future
2020/06/17 全球购物
描述一下JVM加载class文件的原理机制
2013/12/08 面试题
linux面试题参考答案(7)
2012/10/29 面试题
党建示范点实施方案
2014/03/12 职场文书
初三开学计划书
2014/04/27 职场文书
我的中国梦演讲稿初中篇
2014/08/19 职场文书
新员工入职欢迎词
2015/01/23 职场文书
上课迟到检讨书
2015/05/06 职场文书
2015年中秋晚会主持稿
2015/07/30 职场文书