php 魔术方法__get,PHP魔术方法之__set()和__get()
先来看一段代码:
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()相关推荐
- php魔术方法get,PHP魔术方法之__get,__set详解(代码实例)
本文目标: 1.了解PHP中魔术方法的定义 2.了解__get()魔术方法的使用场景 3.掌握__get()魔术方法的用法 4.了解__set()魔术方法的使用场景 5.掌握__set()魔术方法的用 ...
- php魔术方法例子,PHP魔术方法示例
① __get/__set:将对象的属性进行接管 当访问一个不存在的对象属性时: index.php define('BASEDIR',__DIR__); //定义根目录常量 include BASE ...
- php 魔术方法 sleep,PHP 魔术方法: __sleep __wakeup
从php5以后的版本,类就可以使用魔术方法了.php规定以两个下划线(__)开头的方法都保留为魔术方法,所以建议大家函数名最好不用__开 头,除非是为了重载已有的魔术方法. 目前php已有的魔术方法有 ...
- php5的魔术方法,php5中魔术方法学习笔记
1.__construct() 当实例化一个对象的时候,这个对象的这个方法首先被调用. PHP实例代码如下: classTest {function__construct() {echo"b ...
- invoke 魔术_PHP常用魔术方法(__invoke魔术方法)
PHP5.3魔术方法 __invoke 这个魔幻方法被调用的时机是: 当一个对象当做函数调用的时候, 如果对象定义了__invoke魔幻方法则这个函数会被调用, class Callme { publ ...
- php魔术方法call,PHP魔术方法__call()
__call()方法的用法 function __call(string $function_name, array $arguments) { // 方法体 } 程序中调用未定义的方法时,__cal ...
- PHP中 对象自动调用的方法:__set()、__get()、__tostring()
总结: (1)__get($property_name):获取私有属性$name值时,此对象会自动调用该方法,将属性name值传给参数$property_name,通过这个方法的内部 执行,返回我们传 ...
- 【PHP面向对象(OOP)编程入门教程】10.__set(),__get(),__isset(),__unset()四个方法的应用...
一般来说,总是把类的属性定义为private,这更符合现实的逻辑.但是, 对属性的读取和赋值操作是非常频繁的,因此在PHP5中,预定义了两个函数"__get()"和"__ ...
- (实用篇)浅谈PHP拦截器之__set()与__get()的理解与使用方法
"一般来说,总是把类的属性定义为private,这更符合现实的逻辑. 但是,对属性的读取和赋值操作是非常频繁的,因此在PHP5中,预定义了两个函数"__get()"和&q ...
- python color属性_Python中类的属性、方法及内置方法
1.类的属性成员变量 对象的创建创建对象的过程称之为实例化,当一个对象被创建后,包含三个方面的特性对象聚丙属性和方法, 句柄用于区分不同的对象, 对象的属性和方法,与类中的成员变量和成员函数对应, o ...
最新文章
- 2017年云计算的6大趋势
- 【转】Hibernate的Generator属性有7种class,本文简略描述了这7种class的意义和用法。...
- Eclipse(javaweb)刚换工作空间之后,应该做哪几件事
- Nginx(六):配置nginx高可用集群
- ccf魔数c语言,ccf 201609-4 交通规划
- 【python教程入门学习】用Python制作迷宫GIF
- 解决MySQL无法正常启动的问题 Can't connect to MySQL server on 'localhost'(10061)
- Linux目录/usr/bin和 /usr/local/bin区别
- 思科 命令 TFTP
- 计算机毕业设计之java+javaweb的房屋出租系统
- PE文件格式详解(0)
- 中国IT产业未来在哪里
- OpenWrt增加Led
- KMP算法—终于全部弄懂了
- 张馨予一幅画拍出几十万,然而范冰冰却一直在向粉丝要画!
- 《神奇的数学》读后感_《奇妙的数学王国》读后感 300字
- 计算机三维课设的目的和意义,三维动漫设计开题报告
- Windows API一日一练(59)CreateFileMapping和MapViewOfFile函数
- 阳光宽频加密算法破解,找出隐藏真实地址。
- 探月工程计算机技术学校,探月工程介绍