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 相关文章推荐
解放web程序员的输入验证
Oct 06 Javascript
理解 JavaScript 预解析
Oct 25 Javascript
js调试工具Console命令详解
Oct 21 Javascript
jQuery使用$.ajax进行异步刷新的方法(附demo下载)
Dec 04 Javascript
快速掌握WordPress中加载JavaScript脚本的方法
Dec 17 Javascript
AngularJS中的Directive实现延迟加载
Jan 25 Javascript
原生JS实现简单放大镜效果
Feb 08 Javascript
JavaScript中闭包的详解
Apr 01 Javascript
详解vue的diff算法原理
May 20 Javascript
layui中使用jquery控制radio选中事件的示例代码
Aug 15 jQuery
使用vue开发移动端管理后台的注意事项
Mar 07 Javascript
JS原型和原型链原理与用法实例详解
Feb 05 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
Views rows style模板重写代码
2011/05/16 PHP
使用Git实现Laravel项目的自动化部署
2019/11/24 PHP
PHP 枚举类型的管理与设计知识点总结
2020/02/13 PHP
JS之小练习代码
2008/10/12 Javascript
基于jQuery的动态表格插件
2011/03/28 Javascript
jquery插件jTimer(jquery定时器)使用方法
2013/12/23 Javascript
中止javascript执行的方法
2014/02/14 Javascript
js操作iframe父子窗体示例
2014/05/22 Javascript
推荐25个超炫的jQuery网格插件
2014/11/28 Javascript
jquery单选框radio绑定click事件实现方法
2015/01/14 Javascript
js与jQuery实现checkbox复选框全选/全不选的方法
2016/01/05 Javascript
基于BootStrap Metronic开发框架经验小结【八】框架功能总体界面介绍
2016/05/12 Javascript
浅谈vue的props,data,computed变化对组件更新的影响
2018/01/16 Javascript
layerUI下的绑定事件实例代码
2018/08/17 Javascript
vue动态绑定class选中当前列表变色的方法示例
2018/12/19 Javascript
js表达式与运算符简单操作示例
2020/02/15 Javascript
vue tab滚动到一定高度,固定在顶部,点击tab切换不同的内容操作
2020/07/22 Javascript
[01:15:18]2014 DOTA2国际邀请赛中国区预选赛 LGD VS Speed Gaming.cn
2014/05/22 DOTA
[47:02]2018DOTA2亚洲邀请赛3月29日 小组赛B组 VP VS paiN
2018/03/30 DOTA
[46:32]Fnatic vs OG 2018国际邀请赛小组赛BO2 第一场 8.18
2018/08/19 DOTA
python基础教程之字典操作详解
2014/03/25 Python
浅谈python迭代器
2017/11/08 Python
用Python PIL实现几个简单的图片特效
2019/01/18 Python
在Pycharm中使用GitHub的方法步骤
2019/06/13 Python
利用python实现PSO算法优化二元函数
2019/11/13 Python
Python logging模块原理解析及应用
2020/08/13 Python
python3获取控制台输入的数据的具体实例
2020/08/16 Python
新西兰最大的在线设计师眼镜店:SmartBuyGlasses新西兰
2017/10/20 全球购物
爸爸的花儿落了教学反思
2014/02/20 职场文书
国际贸易毕业生求职信范文
2014/02/21 职场文书
决心书范文
2014/03/11 职场文书
纪律教育月活动总结
2014/08/26 职场文书
酒店管理专业毕业生自我鉴定
2014/09/29 职场文书
五好家庭申报材料
2014/12/20 职场文书
泰山导游词
2015/02/02 职场文书
分享python函数常见关键字
2022/04/26 Python