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直接编辑当前cookie的脚本
Sep 14 Javascript
Jquery 模板数据绑定插件的使用方法详解
Jul 08 Javascript
JS小功能(offsetLeft实现图片滚动效果)实例代码
Nov 28 Javascript
Node.js操作Firebird数据库教程
Mar 04 Javascript
jQuery实现级联下拉框实战(5)
Feb 08 Javascript
Extjs表单输入框异步校验的插件实现方法
Mar 20 Javascript
页面内锚点定位及跳转方法总结(推荐)
Apr 24 Javascript
8 个有用的JS技巧(推荐)
Jul 03 Javascript
解决layui动态加载复选框无法选中的问题
Sep 20 Javascript
40行代码把Vue3的响应式集成进React做状态管理
May 20 Javascript
vue接通后端api以及部署到服务器操作
Aug 13 Javascript
Echarts在Taro微信小程序开发中的踩坑记录
Nov 09 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 和 MySQL 基础教程(三)
2006/10/09 PHP
PHP程序员面试 切忌急功近利(更需要注重以后的发展)
2010/09/01 PHP
PHP学习之正则表达式
2011/04/17 PHP
PHP常用的三种设计模式
2017/02/17 PHP
php readfile()修改文件上传大小设置
2017/08/11 PHP
PHP 爬取网页的主要方法
2018/07/13 PHP
一页面多XMLHttpRequest对象
2007/01/22 Javascript
js数值和和字符串进行转换时可以对不同进制进行操作
2014/03/05 Javascript
javascript使用for循环批量注册的事件不能正确获取索引值的解决方法
2014/12/20 Javascript
分析了一下JQuery中的extend方法实现原理
2015/02/27 Javascript
jQuery控制cookie过期时间的方法
2015/04/07 Javascript
7个有用的jQuery代码片段分享
2015/05/19 Javascript
使用JavaScript的AngularJS库编写hello world的方法
2015/06/23 Javascript
谈一谈jQuery核心架构设计
2016/03/28 Javascript
javascript深拷贝(deepClone)详解
2016/08/24 Javascript
AngularJS实现动态添加Option的方法
2017/05/17 Javascript
解决webpack -p压缩打包react报语法错误的方法
2017/07/03 Javascript
JavaScript学习笔记之函数记忆
2017/09/06 Javascript
JS实现点击循环切换显示内容的方法
2017/10/19 Javascript
详解vue-cli 脚手架 安装
2019/04/16 Javascript
JS大坑之19位数的Number型精度丢失问题详解
2019/04/22 Javascript
vue+springboot+element+vue-resource实现文件上传教程
2020/10/21 Javascript
Python 字符串操作实现代码(截取/替换/查找/分割)
2013/06/08 Python
举例讲解Python程序与系统shell交互的方式
2015/04/09 Python
Python3计算三角形的面积代码
2017/12/18 Python
使用python实现ANN
2017/12/20 Python
pandas中的series数据类型详解
2019/07/06 Python
Django 接收Post请求数据,并保存到数据库的实现方法
2019/07/12 Python
keras实现theano和tensorflow训练的模型相互转换
2020/06/19 Python
python redis存入字典序列化存储教程
2020/07/16 Python
详解CSS3:overflow属性
2020/11/17 HTML / CSS
德国网上花店:Valentins
2018/08/15 全球购物
澳大利亚二手奢侈品网站:Modsie
2019/09/23 全球购物
演讲稿开场白
2014/01/13 职场文书
乡领导班子四风问题对照检查材料
2014/09/25 职场文书
2014年银行柜员工作总结
2014/11/12 职场文书