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创建一个欢迎cookie弹出窗实现代码
Mar 15 Javascript
jquery 添加节点的几种方法介绍
Sep 04 Javascript
网站基于flash实现的Banner图切换效果代码
Oct 14 Javascript
JS组件Bootstrap Table表格多行拖拽效果实现代码
Dec 08 Javascript
分享一个插件实现水珠自动下落效果
Jun 01 Javascript
Servlet实现文件上传,可多文件上传示例
Dec 05 Javascript
实例解析Array和String方法
Dec 14 Javascript
Vue 2.x教程之基础API
Mar 06 Javascript
Vue的轮播图组件实现方法
Mar 03 Javascript
three.js利用卷积法如何实现物体描边效果
Nov 27 Javascript
JavaScript array常用方法代码实例详解
Sep 02 Javascript
Vue通过懒加载提升页面响应速度
May 10 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
在WINDOWS中设置计划任务执行PHP文件的方法
2011/12/19 PHP
PHP基于单例模式实现的mysql类
2016/01/09 PHP
php文件操作之文件写入字符串、数组的方法分析
2019/04/15 PHP
extjs表格文本启用选择复制功能具体实现
2013/10/11 Javascript
深入理解javascript中return的作用
2013/12/30 Javascript
鼠标左键单击冲突的问题解决方法(防止冒泡)
2014/05/14 Javascript
jquery delay()介绍及使用指南
2014/09/02 Javascript
JavaScript移除数组内重复元素的方法
2015/03/18 Javascript
基于javascript代码实现通过点击图片显示原图片
2015/11/29 Javascript
JavaScript中有关一个数组中最大值和最小值及它们的下表的输出的解决办法
2016/07/01 Javascript
深入理解Angularjs向指令传递数据双向绑定机制
2016/12/31 Javascript
BootStrap CSS全局样式和表格样式源码解析
2017/01/20 Javascript
JavaSctit 利用FileReader和滤镜上传图片预览功能
2017/09/05 Javascript
浅谈vuejs实现数据驱动视图原理
2018/02/23 Javascript
使用Angular CLI进行单元测试和E2E测试的方法
2018/03/24 Javascript
详解如何修改 node_modules 里的文件
2020/05/22 Javascript
[01:03:03]VP vs Mineski 2018国际邀请赛淘汰赛BO3 第一场 8.22
2018/08/23 DOTA
详解Python的Django框架中的templates设置
2015/05/11 Python
机器学习python实战之手写数字识别
2017/11/01 Python
python八大排序算法速度实例对比
2017/12/06 Python
python如何为被装饰的函数保留元数据
2018/03/21 Python
Windows下Anaconda2安装NLTK教程
2018/09/19 Python
python网络编程之多线程同时接受和发送
2019/09/03 Python
浅析python,PyCharm,Anaconda三者之间的关系
2019/11/27 Python
Python 装饰器原理、定义与用法详解
2019/12/07 Python
TFRecord格式存储数据与队列读取实例
2020/01/21 Python
python 如何调用 dubbo 接口
2020/09/24 Python
CSS3系列之3D制作方法案例
2017/08/14 HTML / CSS
js实现移动端H5页面手指滑动刻度尺功能
2017/11/16 HTML / CSS
罗德与泰勒百货官网:Lord & Taylor
2016/08/12 全球购物
英国女性运动服品牌:Sweaty Betty
2018/11/08 全球购物
广州品高软件.net笔面试题目
2012/04/18 面试题
北大研究生linux应用求职信
2013/10/29 职场文书
开业主持词
2014/03/21 职场文书
竞聘报告优秀范文
2014/11/06 职场文书
gateway网关接口请求的校验方式
2021/07/15 Java/Android