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新手语法小结
Jun 15 Javascript
jQuery asp.net 用json格式返回自定义对象
Apr 07 Javascript
深入理解JavaScript高级之词法作用域和作用域链
Dec 10 Javascript
JavaScript中的console.profile()函数详细介绍
Dec 29 Javascript
javascript中Math.random()使用详解
Apr 15 Javascript
jQuery实现下拉菜单(内容为时间)的实时更新及图表的随动更新的方法
Jul 07 Javascript
轻松掌握JavaScript代理模式
Aug 26 Javascript
JS实现json对象数组按对象属性排序操作示例
May 18 Javascript
vue-cli项目修改文件热重载失效的解决方法
Sep 19 Javascript
详解Node.js中path模块的resolve()和join()方法的区别
Oct 29 Javascript
vue.js购物车添加商品组件的方法
Sep 17 Javascript
在Uni中使用Vue的EventBus总线机制操作
Jul 31 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浮点比较大小的方法
2016/02/14 PHP
PHP框架自动加载类文件原理详解
2017/06/06 PHP
tp5(thinkPHP5框架)captcha验证码配置及验证操作示例
2019/05/28 PHP
PHP中strtr与str_replace函数运行性能简单测试示例
2019/06/22 PHP
js函数使用技巧之 setTimeout(function(){},0)
2009/02/09 Javascript
jQuery 使用手册(七)
2009/09/23 Javascript
JavaScript 利用Cookie记录用户登录信息
2009/12/08 Javascript
JQuery模板插件 jquery.tmpl 动态ajax扩展
2011/11/10 Javascript
用js+iframe形成页面的一种遮罩效果的具体实现
2013/12/31 Javascript
常用的jquery模板插件——jQuery Boilerplate介绍
2014/09/23 Javascript
jQuery 实现自动填充邮箱功能(带下拉提示)
2014/10/14 Javascript
jquery使用animate方法实现控制元素移动
2015/03/27 Javascript
基于JavaScript实现手机短信按钮倒计时(超简单)
2015/12/30 Javascript
使用getBoundingClientRect方法实现简洁的sticky组件的方法
2016/03/22 Javascript
jQuery加密密码到cookie的实现代码
2017/04/18 jQuery
Javascript中toFixed计算错误(依赖银行家舍入法的缺陷)解决方法
2017/08/22 Javascript
浅谈angular.copy() 深拷贝
2017/09/14 Javascript
移动前端图片压缩上传的实例
2017/12/06 Javascript
解决webpack+Vue引入iView找不到字体文件的问题
2018/09/28 Javascript
解决vue移动端适配问题
2018/12/12 Javascript
Webpack按需加载打包chunk命名的方法
2019/09/22 Javascript
解决Vue-Router升级导致的Uncaught (in promise)问题
2020/08/07 Javascript
50行代码实现贪吃蛇(具体思路及代码)
2013/04/27 Python
对python实现合并两个排序链表的方法详解
2019/01/23 Python
python动态视频下载器的实现方法
2019/09/16 Python
python 成功引入包但无法正常调用的解决
2020/03/09 Python
服装促销活动方案
2014/02/23 职场文书
2014年十一国庆向国旗敬礼寄语
2014/04/11 职场文书
会计人员演讲稿
2014/09/11 职场文书
体育运动会广播稿
2014/10/05 职场文书
体育教师个人总结
2015/02/09 职场文书
2019初中学生入团申请书
2019/06/27 职场文书
redis 查看所有的key方式
2021/05/07 Redis
python程序的组织结构详解
2021/12/06 Python
关于Mybatis中SQL节点的深入解析
2022/03/19 Java/Android
SQL Server的存储过程与触发器以及系统函数和自定义函数
2022/04/10 SQL Server