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实现的页内搜索代码
May 23 Javascript
JavaScript DOM学习第四章 getElementByTagNames
Feb 19 Javascript
IE中的File域无法清空使用jQuery重设File域
Apr 24 Javascript
JS实现仿QQ面板的手风琴效果折叠菜单代码
Sep 11 Javascript
轻松掌握JavaScript装饰者模式
Aug 27 Javascript
jQuery Ajax File Upload实例源码
Dec 12 Javascript
Node.js设置CORS跨域请求中多域名白名单的方法
Mar 28 Javascript
关于vue中的ajax请求和axios包问题
Apr 19 Javascript
Vue 事件处理操作实例详解
Mar 05 Javascript
vue 实现小程序或商品秒杀倒计时
Apr 14 Javascript
JS实现利用闭包判断Dom元素和滚动条的方向示例
Aug 26 Javascript
Js视频播放器插件Video.js使用方法详解
Feb 04 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程序员的13个好习惯小结
2012/02/20 PHP
PHP永久登录、记住我功能实现方法和安全做法
2015/04/27 PHP
JavaScript 事件查询综合
2009/07/13 Javascript
获取客户端网卡MAC地址和IP地址实现JS代码
2013/03/17 Javascript
jquery索引在使用中的一些困惑
2013/10/24 Javascript
jquery中的过滤操作详细解析
2013/12/02 Javascript
javascript记住用户名和登录密码(两种方式)
2015/08/04 Javascript
js传值后台中文出现乱码的解决方法
2016/06/30 Javascript
在 React、Vue项目中使用SVG的方法
2018/02/09 Javascript
js实现秒表计时器
2019/12/16 Javascript
在vue项目实现一个ctrl+f的搜索功能
2020/02/28 Javascript
JavaScript实现简单进度条效果
2020/03/25 Javascript
javascript 易错知识点实例小结
2020/04/25 Javascript
在VUE中使用lodash的debounce和throttle操作
2020/11/09 Javascript
ant design pro中可控的筛选和排序实例
2020/11/17 Javascript
[00:38]TI珍贵瞬间系列(二):笑
2020/08/26 DOTA
Python应用03 使用PyQT制作视频播放器实例
2016/12/07 Python
python中文分词教程之前向最大正向匹配算法详解
2017/11/02 Python
分析python切片原理和方法
2017/12/19 Python
浅谈Python大神都是这样处理XML文件的
2019/05/31 Python
seek引发的python文件读写的问题及解决
2019/07/26 Python
Python-Flask:动态创建表的示例详解
2019/11/22 Python
关于Tensorflow分布式并行策略
2020/02/03 Python
python匿名函数lambda原理及实例解析
2020/02/07 Python
python GUI库图形界面开发之PyQt5信号与槽基础使用方法与实例
2020/03/06 Python
python实现密码验证合格程序的思路详解
2020/06/01 Python
python支持多继承吗
2020/06/19 Python
HTML5 拖放(Drag 和 Drop)详解与实例代码
2017/09/14 HTML / CSS
美国珠宝店:Helzberg Diamonds
2018/10/24 全球购物
沙特阿拉伯排名第一的在线时尚购物应用程序:1Zillion
2020/08/08 全球购物
Java面试笔试题大全
2016/11/23 面试题
小学毕业感言300字
2014/02/19 职场文书
电子专业求职信
2014/06/19 职场文书
电子专业自荐信
2014/07/01 职场文书
利用Python判断你的密码难度等级
2021/06/02 Python
php 文件上传至OSS及删除远程阿里云OSS文件
2021/07/04 PHP