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 new fun的执行过程
Aug 05 Javascript
Draggable Elements 元素拖拽功能实现代码
Mar 30 Javascript
Js 去掉字符串中的空格(实现代码)
Nov 19 Javascript
js网页右下角提示框实例
Oct 14 Javascript
从零学习node.js之利用express搭建简易论坛(七)
Feb 25 Javascript
简单实现js上传文件功能
Aug 21 Javascript
JavaScript如何获取到导航条中HTTP信息
Oct 10 Javascript
浅析vue.js数组的变异方法
Jun 30 Javascript
小程序转发探索示例
Feb 19 Javascript
js全屏事件fullscreenchange 实现全屏、退出全屏操作
Sep 17 Javascript
JS常用排序方法实例代码解析
Mar 03 Javascript
Vue.extend 登录注册模态框的实现
Dec 29 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
PHP+Tidy-完美的XHTML纠错+过滤
2007/04/10 PHP
php SQL Injection with MySQL
2011/02/27 PHP
Codeigniter中禁止A Database Error Occurred错误提示的方法
2014/06/12 PHP
PHP连接MSSQL时nvarchar字段长度被截断为255的解决方法
2014/12/25 PHP
PHP实现的权重算法示例【可用于游戏根据权限来随机物品】
2019/02/15 PHP
基于laravel-admin 后台 列表标签背景的使用方法
2019/10/03 PHP
QQ登录简单实现代码
2021/03/09 Javascript
JS判断是否为数字,是否为整数,是否为浮点数的代码
2010/04/24 Javascript
让你的CSS像Jquery一样做筛选的实现方法
2011/07/10 Javascript
jQuery Ajax异步处理Json数据详解
2013/11/05 Javascript
javascript字母大小写转换的4个函数详解
2014/05/09 Javascript
批量修改标签css样式以input标签为例
2014/07/31 Javascript
基于jQuey实现鼠标滑过变色(整行变色)
2015/12/07 Javascript
JavaScript实现经典排序算法之插入排序
2016/12/28 Javascript
js 单引号替换成双引号,双引号替换成单引号的实现方法
2017/02/16 Javascript
详解如何用babel转换es6的class语法
2018/04/03 Javascript
微信小程序利用canvas 绘制幸运大转盘功能
2018/07/06 Javascript
解决select2在bootstrap modal中不能正常使用的问题
2018/08/09 Javascript
简单了解JavaScript中常见的反模式
2019/06/21 Javascript
使用element-ui +Vue 解决 table 里包含表单验证的问题
2020/07/17 Javascript
解决vue打包报错Unexpected token: punc的问题
2020/10/24 Javascript
python网络编程实例简析
2014/09/26 Python
Windows上使用virtualenv搭建Python+Flask开发环境
2016/06/07 Python
python3+PyQt5实现使用剪贴板做复制与粘帖示例
2017/01/24 Python
Puppeteer使用示例详解
2019/06/20 Python
django表单的Widgets使用详解
2019/07/22 Python
Python之time模块的时间戳,时间字符串格式化与转换方法(13位时间戳)
2019/08/12 Python
解决Python logging模块无法正常输出日志的问题
2020/02/21 Python
django的autoreload机制实现
2020/06/03 Python
Python轻量级web框架bottle使用方法解析
2020/06/13 Python
canvas学习笔记之绘制简单路径
2019/01/28 HTML / CSS
放飞中国梦演讲稿
2014/04/23 职场文书
七年级之开学家长寄语35句
2019/09/05 职场文书
Java实现给Word文件添加文字水印
2022/02/15 Java/Android
Python保存并浏览用户的历史记录
2022/04/29 Python
TypeScript 内置高级类型编程示例
2022/09/23 Javascript