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 无提示关闭浏览器页面的代码
Mar 09 Javascript
判断文档离浏览器顶部的距离的方法
Jan 08 Javascript
jQuery实现的网页右下角tab样式在线客服效果代码
Oct 23 Javascript
Bootstrap编写一个在当前网页弹出可关闭的对话框 非弹窗
Jun 30 Javascript
javascript轮播图算法
Oct 21 Javascript
JAVA Web实时消息后台服务器推送技术---GoEasy
Nov 04 Javascript
微信小程序之数据缓存的实例详解
Sep 29 Javascript
Javascript中JSON数据分组优化实践及JS操作JSON总结
Dec 22 Javascript
vue组件编写之todolist组件实例详解
Jan 22 Javascript
vue watch监听对象及对应值的变化详解
Feb 24 Javascript
详解小程序中h5页面onShow实现及跨页面通信方案
May 30 Javascript
vue如何清除浏览器历史栈
May 25 Vue.js
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
ecshop 订单确认中显示省市地址信息的方法
2010/03/15 PHP
php数组函数序列之array_intersect() 返回两个或多个数组的交集数组
2011/11/10 PHP
php连接函数implode与分割explode的深入解析
2013/06/26 PHP
教你如何快捷的使用cmd访问mysql小技巧
2014/05/26 PHP
Laravel最佳分割路由文件(routes.php)的方式
2016/08/04 PHP
php四种定界符详解
2017/02/16 PHP
浅析PHP数据导出知识点
2018/02/17 PHP
jQuery 阴影插件代码分享
2012/01/09 Javascript
jquery选择器排除某个DOM元素的方法(实例演示)
2014/04/25 Javascript
jquery移除了live()、die(),新版事件绑定on()、off()的方法
2016/10/26 Javascript
JavaScript中关于for循环删除数组元素内容时出现的问题
2016/11/21 Javascript
vue 打包后的文件部署到express服务器上的方法
2017/08/09 Javascript
Angular2实现组件交互的方法分析
2017/12/19 Javascript
使用vue-router设置每个页面的title方法
2018/02/11 Javascript
浅谈webpack+react多页面开发终极架构
2018/11/11 Javascript
Antd的Table组件嵌套Table以及选择框联动操作
2020/10/24 Javascript
[03:21]【TI9纪实】Old Boys
2019/08/23 DOTA
用Python制作简单的朴素基数估计器的教程
2015/04/01 Python
Python正则表达式使用范例分享
2016/12/04 Python
python模拟事件触发机制详解
2018/01/19 Python
使用python实现http及ftp服务进行数据传输的方法
2018/10/26 Python
python查看文件大小和文件夹内容的方法
2019/07/08 Python
python如何求100以内的素数
2020/05/27 Python
python软件都是免费的吗
2020/06/18 Python
python 制作网站小说下载器
2021/02/20 Python
HTML5学习心得总结(推荐)
2016/07/08 HTML / CSS
印尼在线精品店:Berrybenka.com
2016/10/22 全球购物
现金会计岗位职责
2013/12/05 职场文书
《纸船和风筝》教学反思
2014/02/15 职场文书
《望洞庭》教学反思
2014/02/16 职场文书
软件项目开发计划书
2014/05/01 职场文书
敬老院志愿者活动总结
2015/05/06 职场文书
go:垃圾回收GC触发条件详解
2021/04/24 Golang
用 Python 元类的特性实现 ORM 框架
2021/05/19 Python
利用python进行数据加载
2021/06/20 Python
Java后台生成图片的完整步骤
2021/08/04 Java/Android