先来看一段代码:

class Article{

//私有成员属性

private $title = '标题';

//受保护的成员属性

protected $author = '作者';

//公有成员属性

public $introduce = '简介';

}

$article = new Article();

var_dump($article -> title);

var_dump($article -> author);

var_dump($article -> introduce);

对象直接访问类中的private和protected成员属性时,会报一个Fatal error的错误,提示“Cannot access private property”或者“Cannot access protected property”。

1、魔术方法__get()

如果对象要直接访问类中的private和protected成员属性呢?

PHP给我们提供了一个魔术方法“__get()”,用于获取private和protected成员属性。

class Article{

//私有成员属性

private $title = '标题';

//受保护的成员属性

protected $author = '作者';

//公有成员属性

public $introduce = '简介';

//获取private和protected成员属性

public function __get($name){·

if(isset($this -> $name)) {

return $this->$name;

}

return false;

}

}

$article = new Article();

var_dump($article -> title);

var_dump($article -> author);

var_dump($article -> introduce);

执行结果如下:

string(6) "标题" string(6) "作者" string(6) "简介"

可以看出,__get()魔术方法并不需要我们显示的去调用;类本身会隐式的去调用此方法。而且,private和protected成员属性都可以通过此魔术方法获取相应的数据。

2、魔术方法__set()

如果对象要直接对类中的private和protected成员属性赋值呢?

PHP给我们提供了一个魔术方法“__set()”,用于对private和protected成员属性进行赋值操作。

class Article{

//私有成员属性

private $title = '标题';

//受保护的成员属性

protected $author = '作者';

//公有成员属性

public $introduce = '简介';

//获取private和protected成员属性

public function __get($name){

if(isset($this -> $name)) {

return $this->$name;

}

return false;

}

//设置private和protected成员属性

public function __set($name, $value){

if(isset($this -> $name)){

$this -> $name = $value;

}

}

}

$article = new Article();

$article -> title = '文章标题';

$article -> author = '文章作者';

$article -> introduce = '文章简介';

var_dump($article -> title);

var_dump($article -> author);

var_dump($article -> introduce);

执行结果如下:

string(12) "文章标题" string(12) "文章作者" string(12) "文章简介"

__set()魔术方法也不需要显示的调用;类本身也会隐式的去调用此方法。而且,private和protected成员属性都可以通过此魔术方法去设置相应的值。特别注意一点,所有的魔术方法都必须声明为public,各位可以去实现一遍代码,测试便知。

其实get()和set()这两个魔术方法都是PHP“重载(overload)”特性的体现。PHP中的"重载"与其它绝大多数面向对象语言不同。传统的"重载"是用于提供多个同名的类方法,但各方法的参数类型和个数不同。而PHP中的“重载”是指动态地“创建”类属性和方法,即通过魔术方法(magic methods)来实现。

php 魔术方法__get,PHP魔术方法之__set()和__get()相关推荐

  1. php魔术方法get,PHP魔术方法之__get,__set详解(代码实例)

    本文目标: 1.了解PHP中魔术方法的定义 2.了解__get()魔术方法的使用场景 3.掌握__get()魔术方法的用法 4.了解__set()魔术方法的使用场景 5.掌握__set()魔术方法的用 ...

  2. php魔术方法例子,PHP魔术方法示例

    ① __get/__set:将对象的属性进行接管 当访问一个不存在的对象属性时: index.php define('BASEDIR',__DIR__); //定义根目录常量 include BASE ...

  3. php 魔术方法 sleep,PHP 魔术方法: __sleep __wakeup

    从php5以后的版本,类就可以使用魔术方法了.php规定以两个下划线(__)开头的方法都保留为魔术方法,所以建议大家函数名最好不用__开 头,除非是为了重载已有的魔术方法. 目前php已有的魔术方法有 ...

  4. php5的魔术方法,php5中魔术方法学习笔记

    1.__construct() 当实例化一个对象的时候,这个对象的这个方法首先被调用. PHP实例代码如下: classTest {function__construct() {echo"b ...

  5. invoke 魔术_PHP常用魔术方法(__invoke魔术方法)

    PHP5.3魔术方法 __invoke 这个魔幻方法被调用的时机是: 当一个对象当做函数调用的时候, 如果对象定义了__invoke魔幻方法则这个函数会被调用, class Callme { publ ...

  6. php魔术方法call,PHP魔术方法__call()

    __call()方法的用法 function __call(string $function_name, array $arguments) { // 方法体 } 程序中调用未定义的方法时,__cal ...

  7. PHP中 对象自动调用的方法:__set()、__get()、__tostring()

    总结: (1)__get($property_name):获取私有属性$name值时,此对象会自动调用该方法,将属性name值传给参数$property_name,通过这个方法的内部 执行,返回我们传 ...

  8. 【PHP面向对象(OOP)编程入门教程】10.__set(),__get(),__isset(),__unset()四个方法的应用...

    一般来说,总是把类的属性定义为private,这更符合现实的逻辑.但是, 对属性的读取和赋值操作是非常频繁的,因此在PHP5中,预定义了两个函数"__get()"和"__ ...

  9. (实用篇)浅谈PHP拦截器之__set()与__get()的理解与使用方法

    "一般来说,总是把类的属性定义为private,这更符合现实的逻辑. 但是,对属性的读取和赋值操作是非常频繁的,因此在PHP5中,预定义了两个函数"__get()"和&q ...

  10. python color属性_Python中类的属性、方法及内置方法

    1.类的属性成员变量 对象的创建创建对象的过程称之为实例化,当一个对象被创建后,包含三个方面的特性对象聚丙属性和方法, 句柄用于区分不同的对象, 对象的属性和方法,与类中的成员变量和成员函数对应, o ...

最新文章

  1. 2017年云计算的6大趋势
  2. 【转】Hibernate的Generator属性有7种class,本文简略描述了这7种class的意义和用法。...
  3. Eclipse(javaweb)刚换工作空间之后,应该做哪几件事
  4. Nginx(六):配置nginx高可用集群
  5. ccf魔数c语言,ccf 201609-4 交通规划
  6. 【python教程入门学习】用Python制作迷宫GIF
  7. 解决MySQL无法正常启动的问题 Can't connect to MySQL server on 'localhost'(10061)
  8. Linux目录/usr/bin和 /usr/local/bin区别
  9. 思科 命令 TFTP
  10. 计算机毕业设计之java+javaweb的房屋出租系统
  11. PE文件格式详解(0)
  12. 中国IT产业未来在哪里
  13. OpenWrt增加Led
  14. KMP算法—终于全部弄懂了
  15. 张馨予一幅画拍出几十万,然而范冰冰却一直在向粉丝要画!
  16. 《神奇的数学》读后感_《奇妙的数学王国》读后感 300字
  17. 计算机三维课设的目的和意义,三维动漫设计开题报告
  18. Windows API一日一练(59)CreateFileMapping和MapViewOfFile函数
  19. 阳光宽频加密算法破解,找出隐藏真实地址。
  20. 探月工程计算机技术学校,探月工程介绍

热门文章

  1. 在日常学习生活中,究竟该如何保持稳定的情绪呢?
  2. 微信小程序解析HTML标签
  3. Golang10进制转16进制的几种方法
  4. DMotion - 基于DOTS的动画框架和状态机
  5. 缺陷管理-基于企业微信文档设计的一个缺陷管理文档
  6. H5 移动调试全攻略
  7. 薪水被应届生倒挂,裸辞了
  8. 虚拟机克隆的两种方式
  9. Pregel Aggregator
  10. (15)模版方法设计模式