php -- 魔术方法 之 设置属性:__set()
属性重载:当访问一个不存在或者权限不够的属性的时候,能够触发一系列的魔术方法,就叫做属性重载
__set():当用户在设置不存在或者权限不够的属性的时候会自动触发
没有设置__set($name,$value)的时候,可以给$person对象增加任意多个属性,这样可能会导致被恶意攻击
<?php //属性重载
class Person{
} //实例化
$person = new Person(); //给对象增加属性
$person->name = '梅西';
$person->age = 27;
添加魔术方法:__set($name,$value)
<?php //属性重载
class Person{ //魔术方法__set
//两个参数:属性名,属性值
public function __set($name,$value){
//增加一个允许列表
$allow = array('name','age','tail'); //判断用户的操作是否合法
if(in_array($name,$allow)){
//增加属性
$this->$name = $value;
}
}
} //实例化
$person = new Person(); var_dump($person); //给对象增加属性
$person->name = '梅西';
$person->age = 27; //增加一个不允许的属性
$person->drag = '大麻'; var_dump($person);
php -- 魔术方法 之 设置属性:__set()的更多相关文章
- Python基础之魔术方法(控制属性的访问和设置)
# 魔术方法--常规方法# 1. __int__ 构造函数# 2. __new__ 在类实例之前就创建了# 3. __iter__ 迭代器# 4. __del__ 析构方法,用来清除释放的对象内存# ...
- PHP面向对象魔术方法之__get 和 __set函数
l 基本的介绍 (1) 当我们去使用不可以访问的属性时,系统就会调用__get方法. (2) 不可以访问的属性指的是(1 . 该属性不存在 2. 直接访问了protected或者private属性) ...
- php -- 魔术方法 之 删除属性:__unset()
属性重载:当访问一个不存在或者权限不够的属性的时候,能够触发一系列的魔术方法,就叫做属性重载 __unset():当删除一个不存在或者权限不够的属性的时候会自动触发 <?php //属性重载 c ...
- php -- 魔术方法 之 判断属性是否存在或为空:__isset()
属性重载:当访问一个不存在或者权限不够的属性的时候,能够触发一系列的魔术方法,就叫做属性重载 __isset($name):当使用 isset()函数或者empty()函数 判断属性是否存在或者是否为 ...
- php -- 魔术方法 之 获取属性:__get()
属性重载:当访问一个不存在或者权限不够的属性的时候,能够触发一系列的魔术方法,就叫做属性重载 __get():获取不存在或者权限不够的属性的时候会自动触发 <?php header('Conte ...
- __unset()魔术方法 删除类内私有属性
__unset()魔术方法 删除私有属性 unset()对共有属性进行删除 可通过__unset()魔术方法对私有属性进行操作 当在类外部执行unset()函数时,自动执行类内__unset()魔术方 ...
- PHP 设计模式 笔记与总结(5)PHP 魔术方法的使用
PHP 魔术方法的使用 ① __get/__set:将对象的属性进行接管 当访问一个不存在的对象属性时: index.php <?php define('BASEDIR',__DIR__); / ...
- PHP中的常见魔术方法功能作用及用法实例
概述 在面向对象编程中,PHP提供了一系列的魔术方法,这些魔术方法为编程提供了很多便利.PHP中的魔术方法通常以__(两个下划线)开始,并且不需要显示的调用而是由某种特定的条件出发. 开始之前 在总结 ...
- PHP的那些魔术方法(一)
在PHP中,有一堆魔术方法,服务于类和对象.PHP虽然也是纯种的面向对象语言,但是之前的PHP还真不是,所以有一些面向对象的标准实现并不完善,比如重载.但是,我们可以通过一些魔术方法来弥补,例如__c ...
随机推荐
- Unity Editor Toolbar 编辑器扩展
http://www.cnblogs.com/zhaoqingqing/p/3812368.html 1.Apply to Prefab [把改动应用到Prefab] if (GUILayout.Bu ...
- taro 填坑之路(三)taro 缓存
1.taro 缓存 /** * 缓存数据 H5 小程序 * {food.id:{菜品信息 Num}, } */ import Taro from '@tarojs/taro'; // 取值 let s ...
- error: command 'gcc' failed with exit status 1 while installing eventlet
Ubuntu安装Python包出错解决办法 : sudo apt-get install python-dev sudo apt-get install libevent-dev
- 〖C语言〗C语言一个函数传递无限制多参数(不确定参数函数)的方法
/* * ===================================================================================== * * Filen ...
- java线程--volatile实现可见性
volatile关键字: 1)能够保证volatile变量的可见性 2)不能保证volatile变量复杂操作的原子性. volatile如何实现内存可见性: 深入来说:通过加入内存屏障和禁止重排序优化 ...
- Android开发之短信
短信主要界面:会话列表,会话详情,新建短信. 联系人主要界面:联系人列表,编辑联系人. 创建首页.首页由TabActivity表现. 在Android4.1中,TabActivity处于保护状态. T ...
- nginx配置用户认证
location ~ .*admin\.php$ { auth_basic "weifenglinux auth"; auth_ba ...
- XHTML学习书籍
http://baike.baidu.com/view/15906.htm XHTML学习书籍 可扩展超文本置标语言(eXtensible HyperText Markup Language,XH ...
- spring 3.0系统集成webservice
spring 3.0系统集成webservice,踩了很多坑以后总算成功了,故写下这篇博客以记录. 1.准备jar包 由于项目是spring3.0,所以应该要使用cxf 2.7版本才可以成功配置,高版 ...
- 嵌入式Linux下ALSA音频架构ALSA-lib移植与编译心得
**************************************************************************************************** ...