__get(),__set(),__isset(),__unset()

在给不可访问属性赋值时,__set()会被调用
读取不可访问属性的值时,__get()会被调用

当对不可访问属性调用isset()或empty()时,__isset()会被调用
当对不可访问属性调用unset()时,__unset()会被调用

所谓不可访问属性,实际上就是在调用某个属性时发现这个属性没有被定义,这时候不同的操纵会触发不同的魔术方法

这几个方法也被称为属性重载的魔术方法

 <?php
class MagicTest{
public function __get($name) {
return "Getting the property ".$name."<br/>";
}
public function __set($name,$value) {
echo "setting the property ".$name." to value ".$value."<br/>";
}
public function __isset($name) {
echo "__isset invoke"."<br/>";
return true;
}
public function __unset($name) {
echo "unsetting property ".$name;
}
} $obj = new MagicTest();
echo $obj->classname;
$obj->className="MagicClassX";
echo '$obj->ClassName is set?'.isset($obj->className)."<br/>";
echo '$obj->className is empty?'.empty($obj->className)."<br/>";
unset($obj->className);

输出为:

Getting the property classname
setting the property className to value MagicClassX
__isset invoke
$obj->ClassName is set?1
__isset invoke
$obj->className is empty?
unsetting property className

__get(),__set(),__isset(),__unset()的更多相关文章

  1. PHP中的魔术方法总结 :__construct, __destruct , __call, __callStatic,__get, __set, __isset, __unset , __sleep, __wakeup, __toStr

    PHP中的魔术方法总结 :__construct, __destruct , __call, __callStatic,__get, __set, __isset, __unset , __sleep ...

  2. PHP中的魔术方法总结 :__construct, __destruct , __call, __callStatic,__get, __set, __isset, __unset , __sleep

    PHP中的魔术方法总结 :__construct, __destruct , __call, __callStatic,__get, __set, __isset, __unset , __sleep ...

  3. PHP中的魔术方法:__construct, __destruct , __call, __callStatic,__get, __set, __isset, __unset , __sleep, __wakeup, __toString, __set_state, __clone and __autoload

    1.__get.__set 这两个方法是为在类和他们的父类中没有声明的属性而设计的: __get( $property ) 当调用一个未定义的属性时访问此方法: __set( $property, $ ...

  4. __get().__set.__isset,__unset魔术方法

    一般来说,总是把类的属性定义为 private .这更符合现实的逻辑. 但是对属性的读取和赋值操作非常频繁的,因此在PHP中,预定义了两魔术方法 "__get()"用来获取私有成员属性值的,只有一个参 ...

  5. PHP中的魔术方法总结:__construct,__destruct ,__call,__callStatic,__get,__set,__isset, __unset ,__sleep,__wakeup,__toString,__set_state,__clone,__autoload

    1.__get.__set这两个方法是为在类和他们的父类中没有声明的属性而设计的__get( $property ) 当调用一个未定义的属性时访问此方法__set( $property, $value ...

  6. php魔术方法__get(),__set(),__isset()的使用

    1.魔术方法__get(),__set(),__isset()类: <?php /** * @purpose: 魔术方法 __get() , __set(), __isset() 的使用 * U ...

  7. PHP面向对象.__set(),__get(),__isset(),__unset()四个方法的

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

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

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

  9. PHP面向对象(OOP):__set(),__get(),__isset(),__unset()四个方法的应用

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

随机推荐

  1. html5 frameset5内嵌框架集

    利用html5 frameset内嵌框架简单做一个网页,网页的布局大体如下: 我们可以将其分为四个部分: 第一部分:top图片栏 第二部分:left链接栏 第三部分:right内容栏 第四部分:网页整 ...

  2. Tomcat翻译--JNDI Resources HOW-TO

    原文:http://tomcat.apache.org/tomcat-7.0-doc/jndi-resources-howto.html Introduction(介绍) Tomcat provide ...

  3. App自动化测试探索(二)MAC环境搭建iOS+Python+Appium测试环境

    环境搭建要求,MAC 机器一台,要求 Xcode 8.0以上 1. 安装 Homebrew /usr/bin/ruby -e "$(curl -fsSL https://raw.github ...

  4. 64位Navicat Premium安装/破解【含资源】

    开门见山: 1/先安装Navicat Primium,双击Navicat Primium——trial_64.exe(64位) 2/安装好打开Navicat Primium,提示使用或注册时,双击Pa ...

  5. 面试题42:翻转单词顺序VS左旋转字符串

    题目一:输入一个英文句子,翻转句子中单词的顺序,但单词内字符的顺序不变.为简单起见,标点符号和普通字母一样处理. 例如输入字符串“I am a student.",则输出"stud ...

  6. python中join函数用法

    str.join(list/tuple/dict/string) str = "-"; seq = ("a", "b", "c&q ...

  7. poj3268 Silver Cow Party (SPFA求最短路)

    其实还是从一个x点出发到所有点的最短路问题.来和回只需分别处理一下逆图和原图,两次SPFA就行了. #include<iostream> #include<cstdio> #i ...

  8. docker容器升级脚本

    #!/bin/bash # Let's finish it like a flash # usage:sh -x update_cms_backend.sh -v 2018050401 ARGS=`g ...

  9. CUDA Pro Tip: Optimized Filtering with Warp-Aggregated Atomics

    In this post, I’ll introduce warp-aggregated atomics, a useful technique to improve performance when ...

  10. web打印详解

    在B/S模式开发中,打印是个很大的困扰.无论是采用页面直接输出或者引用WORD.DLL也好,都有不足之处. 目前最好的办法就是采用第三方控件,网上流传的打印控件有很多.总结了下推荐几个给大家: 一.首 ...