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 相关文章推荐
Javascript remove 自定义数组删除方法
Oct 20 Javascript
一个JQuery写的点击上下滚动的小例子
Aug 27 Javascript
DWZ刷新dialog解决方法
Mar 03 Javascript
js onload处理html页面加载之后的事件
Oct 30 Javascript
jQuery插件Zclip实现完美兼容个浏览器点击复制内容到剪贴板
Apr 30 Javascript
JS更改select内option属性的方法
Oct 14 Javascript
ClearTimeout消除闪动实例代码
Feb 29 Javascript
微信js-sdk界面操作接口用法示例
Oct 12 Javascript
使用BootStrap实现标签切换原理解析
Mar 14 Javascript
Angular学习教程之RouterLink花式跳转
May 03 Javascript
解决Vue @submit 提交后不刷新页面问题
Jul 18 Javascript
使用refresh_token实现无感刷新页面
Apr 26 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生成SessionID和图片校验码的思路和实现代码
2009/03/10 PHP
php日历制作代码分享
2014/01/20 PHP
php中动态变量用法实例
2015/06/10 PHP
Laravel实现构造函数自动依赖注入的方法
2016/03/16 PHP
Yii视图CGridView列表用法实例分析
2016/07/12 PHP
微信小程序 消息推送php服务器验证实例详解
2017/03/30 PHP
php实现的后台表格分页功能示例
2017/10/23 PHP
PHP写API输出的时用echo的原因详解
2019/04/28 PHP
php使用yield对性能提升的测试实例分析
2019/09/19 PHP
JS array 数组详解
2009/03/22 Javascript
prototype 学习笔记整理
2009/07/17 Javascript
用cssText批量修改样式
2009/08/29 Javascript
jQuery创建自己的插件(自定义插件)的方法
2010/06/10 Javascript
js onload处理html页面加载之后的事件
2013/10/30 Javascript
用JS实现轮播图效果(二)
2016/06/26 Javascript
jQuery树控件zTree使用方法详解(一)
2017/02/28 Javascript
Vue导出json数据到Excel电子表格的示例
2017/12/04 Javascript
vue中添加mp3音频文件的方法
2018/03/02 Javascript
JS实现换肤功能的方法实例详解
2019/01/30 Javascript
JavaScript中工厂函数与构造函数示例详解
2019/05/06 Javascript
Vue发布项目实例讲解
2019/07/17 Javascript
js设置默认时间跨度过程详解
2019/07/17 Javascript
JavaScript实现轮播图特效
2020/04/10 Javascript
[05:09]2016国际邀请赛中国区预选赛淘汰赛首日精彩回顾
2016/06/29 DOTA
一篇文章快速了解Python的GIL
2018/01/12 Python
将Dataframe数据转化为ndarry数据的方法
2018/06/28 Python
通过代码实例了解Python3编程技巧
2020/10/13 Python
如何快速一次性卸载所有python包(第三方库)呢
2020/10/20 Python
html5的新玩法——语音搜索
2013/01/03 HTML / CSS
域名注册、建站工具、网页主机、SSL证书:Dynadot
2017/01/06 全球购物
哈利波特商店:Harry Potter Shop
2018/11/30 全球购物
美国在线购买空气净化器、除湿器、加湿器网站:AllergyBuyersClub
2021/03/16 全球购物
营销计划书范文
2015/01/17 职场文书
小学教学工作总结2015
2015/05/13 职场文书
2015年税务稽查工作总结
2015/05/26 职场文书
送给教师们,到底该如何写好教学反思?
2019/07/02 职场文书