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继承的实现代码
Aug 05 Javascript
javascript获取网页中指定节点的父节点、子节点的方法小结
Apr 24 Javascript
网页前端优化之滚动延时加载图片示例
Jul 13 Javascript
Js日期选择自动填充到输入框(界面漂亮兼容火狐)
Aug 02 Javascript
JS实现全屏的四种写法
Dec 30 Javascript
详解vue-cli快速构建项目以及引入bootstrap、jq
May 26 Javascript
node.js中fs文件系统目录操作与文件信息操作
Feb 24 Javascript
angularJs中$http获取后台数据的实例讲解
Aug 08 Javascript
AngularJS修改model值时,显示内容不变的实例
Sep 13 Javascript
vue 本地服务不能被外部IP访问的完美解决方法
Oct 29 Javascript
微信小程序实现留言板(Storage)
Nov 02 Javascript
微信小程序实现canvas分享朋友圈海报
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
PHP新手用的Insert和Update语句构造类
2012/03/31 PHP
PHP中使用imagick生成PSD文件缩略图教程
2015/01/26 PHP
php实现上传图片保存到数据库的方法
2015/02/11 PHP
yii的入口文件index.php中为什么会有这两句
2016/08/04 PHP
PHP十六进制颜色随机生成器功能示例
2017/07/24 PHP
BOOM vs RR BO3 第二场2.13
2021/03/10 DOTA
总结一些js自定义的函数
2006/08/05 Javascript
div移动 输入框不能输入的问题
2009/11/19 Javascript
基于JQuery制作的产品广告效果
2010/12/08 Javascript
使用jQuery操作Cookies的实现代码
2011/10/09 Javascript
情人节之礼 js项链效果
2012/02/13 Javascript
深入学习JavaScript的AngularJS框架中指令的使用方法
2016/03/05 Javascript
利用jQuery.Validate异步验证用户名是否存在(推荐)
2016/12/09 Javascript
vue复合组件实现注册表单功能
2017/11/06 Javascript
vue项目打包之后背景样式丢失的解决方案
2019/01/17 Javascript
简单实现vue中的依赖收集与响应的方法
2019/02/18 Javascript
微信小程序点击滚动到指定位置的实现
2020/05/22 Javascript
小程序组件传值和引入sass的方法(使用vant Weapp组件库)
2020/11/24 Javascript
Python的UTC时间转换讲解
2019/02/26 Python
利用Django模版生成树状结构实例代码
2019/05/19 Python
树莓派极简安装OpenCv的方法步骤
2019/10/10 Python
解决Pytorch 加载训练好的模型 遇到的error问题
2020/01/10 Python
python十进制转二进制的详解
2020/02/07 Python
探秘TensorFlow 和 NumPy 的 Broadcasting 机制
2020/03/13 Python
JustFab加拿大:女鞋、靴子、手袋和服装在线
2018/05/18 全球购物
信息管理员岗位职责
2013/12/01 职场文书
仓库组长岗位职责
2014/01/29 职场文书
致跳远运动员广播稿
2014/02/11 职场文书
毕业生工作求职信
2014/06/30 职场文书
自愿离婚协议书范本
2014/09/13 职场文书
学生上课看漫画的检讨书
2014/09/26 职场文书
2014年人事专员工作总结
2014/11/19 职场文书
2015教师个人师德工作总结
2015/10/23 职场文书
来探秘“德国中小企业”的成功之道
2019/07/26 职场文书
CSS 制作波浪效果的思路
2021/05/18 HTML / CSS
Java后端 Dubbo retries 超时重试机制的解决方案
2022/04/14 Java/Android