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代码,用以防止图片撑破页面
Mar 12 Javascript
JS的反射问题
Apr 07 Javascript
基于jquery的图片懒加载js
Jun 30 Javascript
xss文件页面内容读取(解决)
Nov 28 Javascript
基于JQuery及AJAX实现名人名言随机生成器
Feb 10 Javascript
jQuery插件HighCharts绘制2D半圆环图效果示例【附demo源码下载】
Mar 09 Javascript
angular指令笔记ng-options的使用方法
Sep 18 Javascript
element ui table 增加筛选的方法示例
Nov 02 Javascript
vue路由前进后退动画效果的实现代码
Dec 10 Javascript
vue-router 起步步骤详解
Mar 26 Javascript
浅谈vue 组件中的setInterval方法和window的不同
Jul 30 Javascript
JS+CSS实现炫酷光感效果
Sep 05 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中判断一个请求是ajax请求还是普通请求的方法
2011/06/28 PHP
php实现微信公众号主动推送消息
2015/12/31 PHP
基于jquery的回到页面顶部按钮
2011/06/27 Javascript
JS Date函数整理方便使用
2013/10/23 Javascript
js监听鼠标事件控制textarea输入字符串的个数
2014/09/29 Javascript
jquery.mobile 共同布局遇到的问题小结
2015/02/10 Javascript
javascript实现图像循环明暗变化的方法
2015/02/25 Javascript
JS实现简单路由器功能的方法
2015/05/27 Javascript
jquery实现华丽的可折角广告代码
2015/09/02 Javascript
Angularjs中UI Router全攻略
2016/01/29 Javascript
jQuery实现图片轮播效果代码
2016/09/27 Javascript
Bootstrap模态框禁用空白处点击关闭
2016/10/20 Javascript
JS实现全屏的四种写法
2016/12/30 Javascript
JavaScript中附件预览功能实现详解(推荐)
2017/08/15 Javascript
vuex实现的简单购物车功能示例
2019/02/13 Javascript
JavaScript中ES6规范中let和const的用法和区别
2020/08/06 Javascript
node.js基础知识汇总
2020/08/25 Javascript
[01:01:52]完美世界DOTA2联赛PWL S2 GXR vs Magma 第二场 11.25
2020/11/26 DOTA
python数据结构之二叉树的遍历实例
2014/04/29 Python
Python切换pip安装源的方法详解
2016/11/18 Python
在Django同1个页面中的多表单处理详解
2017/01/25 Python
Windows下安装Django框架的方法简明教程
2018/03/28 Python
python入门:这篇文章带你直接学会python
2018/09/14 Python
浅谈pyqt5在QMainWindow中布局的问题
2019/06/21 Python
python 邮件检测工具mmpi的使用
2021/01/04 Python
基于HTML5+CSS3实现简单的时钟效果
2017/09/11 HTML / CSS
汽车技术服务与营销专业推荐信
2013/11/29 职场文书
给医务人员表扬信
2014/01/12 职场文书
2015年超市收银员工作总结
2015/04/25 职场文书
交通处罚决定书
2015/06/24 职场文书
教你怎么用Python监控愉客行车程
2021/04/29 Python
sql中mod()函数取余数的用法
2021/05/29 SQL Server
MySQL完整性约束的定义与实例教程
2021/05/30 MySQL
pyqt5蒙版遮罩mask,setmask的使用
2021/06/11 Python
vue中的可拖拽宽度div的实现示例
2022/04/08 Vue.js
MySQL事务的隔离级别详情
2022/07/15 MySQL