PHP中的__set & __get使用

官方说明

public void __set ( string $name , mixed $value )
public mixed __get ( string $name )
public bool __isset ( string $name )
public void __unset ( string $name )

在给未定义的变量赋值时,__set() 会被调用。

读取未定义的变量的值时,__get() 会被调用。

当对未定义的变量调用 isset() 或 empty()时,__isset() 会被调用。

当对未定义的变量调用 unset()时,__unset() 会被调用。

参数$name是指要操作的变量名称。__set() 方法的$value 参数指定了$name变量的值。

属性重载只能在对象中进行。在静态方法中,这些魔术方法将不会被调用。所以这些方法都不能被 声明为static。 从PHP 5.3.0起, 将这些魔术方法定义为static会产生一个警告。

Demo1

<?php
class Person {function __get( $property ) {$method = "get{$property}";if ( method_exists( $this, $method ) ) {return $this->$method();}}function __isset( $property ) {$method = "get{$property}";return ( method_exists( $this, $method ) );}  function getName() {return "Bob";}function getAge() {return 44;}
}
print "<pre>";
$p = new Person();
if ( isset( $p->name ) ) {print $p->name;
} else {print "nope\n";
}
print "</pre>";
// output:
// Bob
?>

Demo2

<?php
class Person {private $_name;private $_age;function __set( $property, $value ) {$method = "set{$property}";if ( method_exists( $this, $method ) ) {return $this->$method( $value );}}function __unset( $property ) {$method = "set{$property}";if ( method_exists( $this, $method ) ) {$this->$method( null );}}function setName( $name ) {$this->_name = $name;if ( ! is_null( $name ) ) {$this->_name = strtoupper($this->_name);}}function setAge( $age ) {$this->_age = $age;}
}
print "<pre>";
$p = new Person();
$p->name = "bob";
$p->age  = 44;
print_r( $p );
unset($p->name);
print_r( $p );
print "</pre>";
?>

Output:
Person Object
([_name:Person:private] => BOB[_age:Person:private] => 44
)
Person Object
([_name:Person:private] => [_age:Person:private] => 44
)

[资料]PHP中的__set __get使用相关推荐

  1. 【独立版】智慧城市同城V4_2.1.4全开源全插件VUE版,修复房产信息组件后台资料编辑中会显示其他平台小区的问题

    源码介绍 [独立版]智慧城市同城V4_2.1.4全开源全插件VUE版,修复房产信息组件后台资料编辑中会显示其他平台小区的问题!智慧城市同城是一套专注于多城市生活服务同城技术解决方案,全面覆盖同堿信息. ...

  2. 隔年增长的题_如何从资料分析中的隔年增长率?

    展开全部 行测资料分析中,在解决有间隔时间段的增长问题636f707962616964757a686964616f31333433623133时,使用隔年增长来计算,经常能够让列式更精简,从而提高做题 ...

  3. 增长量计算n+1原则_国家公务员考试:资料分析中增长量的计算

    国家公务员考试之资料分析中增长量的计算 湖北华图 化蒙 2015 年湖北省公务员笔试已经落下帷幕,紧接着 2016 年国家公务员考试即将到来!各 位小伙伴们再也不要重复临时抱佛脚,考试一团糟,差零点几 ...

  4. 增长量计算n+1原则_国家公务员考试:资料分析中增长量的计算 (1)

    - 让每个人平等地提升自我! 1 国家公务员考试之资料分析中增长量的计算 湖北华图 化蒙 2015 年湖北省公务员笔试已经落下帷幕,紧接着 2016 年国家公务员考试即将到来!各 位小伙伴们再也不要重 ...

  5. php魔术方法__SET __GET

    __SET  设置一个不可访问的属性的时候 调用_set方法 __GET 获取一个不可访问的属性的时候  调用_get 方法 <?phpclass stu{private $a;private ...

  6. PHP 魔术方法__set() __get() 方法详解

    __set() is run when writing data to inaccessible properties. __get() is utilized for reading data fr ...

  7. __set __get

    当我们试图获取一个不可达属性时(比如private),类会自动调用__get函数. 当试图设置一个不可达属性时(比如private),类会自动调用__set函数,我们一起来看个例子: <?php ...

  8. 系统分析师-资料总结-中

    4 嵌入式系统 4.1 嵌入式系统概论 4.1.1 嵌入式系统的特点 1.系统专用性强 2.软硬件依赖性强 3.系统实时性强 4.处理器专用 5.多种技术紧密结合 6.系统透明性 7.系统资源受限 R ...

  9. 12x12怎么速算_备考 | 资料分析中的乘法速算怎么做?

    资料分析是考生们在学习职测必须要作为重点的一个部分.难度不是特别大,但是技巧性比较强.资料分析其中一个重难点就是计算,而在计算中比较复杂的列式一定包含乘除运算. 对于其中的乘法,考生们往往束手无策,只 ...

最新文章

  1. python的沙盒环境virtualenv(二)--简单使用
  2. 根据时间点截取wav文件
  3. vs2013缺少Mvc 怎么办?
  4. 大剑无锋之简单说一下聚簇索引和非聚簇索引?【面试推荐】
  5. 小白的算法初识课堂(part2)--选择排序
  6. YbOJ-网格序列【拉格朗日插值】
  7. groovy 2.5.4_Java 7 vs Groovy 2.1性能比较
  8. spring ldap_Spring 3,Spring Web Services 2和LDAP安全
  9. CSS3 线性渐变背景的过渡效果
  10. android计算汇率代码,android studio 开发实例 连接网络获取汇率
  11. git clone 多个_软件测试知识点 | 测试过程常用的Git命令
  12. Thread 线程基础之-线程池ThreadPool一
  13. 台式计算机英特尔时间同步,我电脑时间没法与Inter同步,?
  14. 误把电脑desktop文件删了怎么处理
  15. 计算机组装方案及分析,计算机组装与维护
  16. 哈萨克斯坦大型“零元购”抓捕现场
  17. ubuntu下搭建pptp服务器
  18. Android图片加载框架 Glide 4 的用法
  19. EFR32--如何在EFR32BG22透传中添加AT指令控制
  20. JavaApplet编程技巧

热门文章

  1. 某些微型计算机使用Pentium,2010四川省计算机等级考试二级理论考试试题及答案...
  2. 你怎么理解程序设计和c语言,【答题】C语言程序设计问题与解释实验
  3. java字符串拼接_Java 8中字符串拼接新姿势:StringJoiner
  4. ubuntu display
  5. Top 10 Digital Transformation Trends For 2020
  6. 《天天数学》连载07:一月七日
  7. Java Web学习笔记03:JSP元素
  8. 正确使用招呼语、称呼语_5
  9. XP计算机调整对比度,Win7系统调节显示器屏幕对比度的两种方法【图文】
  10. 2017.3.29 越狱 思考记录