__set()
  在对象访问私有成员的时候自动被调用,达到了给你看,但是不能给你修改的效果!(在对象访问一个私有的成员的时候就会自动的调用该魔术方法)

__get()
  方法用于获取私有属性值。(在设置私有属性的时候将会自动调用)

__isset()
  方法用于检测私有属性值是否被设定。(当外部使用isset读类内部进行检测对象是否有具有某个私有成员的时候就会被自动调用!)

__unset()
  方法用于删除私有属性。(在外部调用类内部的私有成员的时候就会自动的调用__unset魔术方法)

一篇关于魔术方法的文章:http://blog.csdn.net/binghui1990/article/details/9104725

00x1 案例一__get(达到了给你看,但是不能给你修改的效果!)

<?php
class human
{
private $name; #定义一个被封装的属性,也就是定义了一个私有的成员。在被调用的时候会,自动的调用__get魔术方法
public $sex;
public $age; public function __get($p){ #定义一个__get魔术方法,记住该魔术方法至少要有一个参数
echo "##############<br />";
}
public function h(){ #定义了一个h方法,只是为了充数的。
echo "hello world";
}
}
$a=new human();
echo $a->name; #在访问了一个私有的成员的时候PHP就会自动的调用__get魔术方法
?>
输出效果如下:
##############

再次对案例一括展(这一个括展主要是认识__get魔术引号在实际运用当中的实际案例)

<?php
class human
{
private $name; #定义一个被封装了的$name属性,倘若调用该封装成员将会自动的调用__get方法。
public $sex;
public $age; function __construct($name,$sex,$age) #对$name、$sex、$age初始化
{
$this->name=$name;
$this->sex=$sex;
$this->age=$age;
} public function __get($p){ #__get魔术方法里面必须要有一个参数。
echo $this->name."<br />";
echo $this->$p;
}
}
$a=new human("妹子","女",);
echo $a->name; #调用name这个被封装的属性(也就是调用了name这个human类中的私有成员)
?>
输出效果
妹子
妹子

00x2 案例二__set

__set该魔术方法会在要修改一个封装属性的时候自动调用。CODE如下所示

注:

  该函数至少需要两个参数。

<?php
/**
* 劝君莫惜金缕衣,劝君珍惜少年时!
*/
class Human
{
private $name;
private $sex;
private $age; function __construct($name,$sex,$age)
{
$this->name=$name;
$this->sex=$sex;
$this->age=$age;
} function __set($x,$y)
{
echo "nihao<br />";
}
}
$a = new Human("王大牛","男",);
$a->name="xxxxxxxxxxxxxxxx";
?>
输出效果如下:
nihao

00x3 案例三__isset

<?php
class Human
{
public $name;
public $sex;
public $age; function __construct($name,$sex,$age)
{
$this->name=$name;
$this->sex=$sex;
$this->age=$age;
} function __isset($x) #在此处声明一个__isset的魔术方法,当在类外部使用isset()函数测定私有成员$nm时,自动调用。
{
echo "你想判断我的".$x."属性存在不存在。<br />";
}
}
$a=new Human("成大牛","男",);
if(isset($a->xishaonian)){ #使用isset检测xishaonian这个成员是否在对象a里面。显而易见是不存在的。这时候就会调用__isset方法。
echo "存在";
}else{
echo "不存在";
}
?>
输出效果如下所示:
你想判断我的xishaonian属性存在不存在。
不存在

00x4 案例三__unset

<?php
/**
* 简单的说就是当外部使用unset对类内部进行删除某个私有成员的时候就会自动调用__unset函数。切记是private也就是私有成员!
*/
class Human
{
private $name;
private $sex;
private $age; public function __unset($x)
{
echo "我要努力学习技术成为一名网络安全大牛!";
}
}
$a=new Human("成大牛","男",);
unset($a->name); ?>

一个同时使用了四个魔术方法的案例:

该CODE来自:http://blog.csdn.net/ebw123/article/details/41699031
<?php
class Person {
private $name;
private $sex;
private $age;
public function __get($property_name) {
if(isset($this->$property_name))
{
return ($this->$property_name);
} else {
return (NULL);
}
}
public function __set($property_name, $value) {
$this->$property_name = $value;
}
public function __isset($nm) {
echo "isset()函数测定私有成员时,自动调用<br>";
return isset($this->$nm);
}
public function __unset($nm) {
echo "当在类外部使用unset()函数来删除私有成员时自动调用的<br>";
unset($this->$nm);
}
}
$p1 = new Person();
$p1->name = "this is a person name";
echo var_dump(isset($p1->name))."<br>";
echo $p1->name."<br>";
unset($p1->name);
echo $p1->name;

THE END


跟着百度学PHP[4]OOP面对对象编程-13-魔术方法__set(),__get(),__isset(),__unset()的更多相关文章

  1. 跟着百度学PHP[4]OOP面对对象编程-6-构造方法(__construct)和构析方法(__destruct)

    函数就是成员方法(方法有三:构造方法.成员方法.析构方法) 下面是两种方法. 构造方法和构析方法 00x1 构造方法 构造方法会在创建对象之后自动调用.其名称为__construct <?php ...

  2. 跟着百度学PHP[4]OOP面对对象编程-15-魔术方法__call方法

    简而言之就是调用了一个类中没有的方法就会自动调用__call()方法, 该参数有两个必须的参数! 第一个参数:调用的不存在的方法的方法名. 第二个参数:调用不存在的方法的参数. 但是总的说回来,__c ...

  3. 跟着百度学PHP[4]OOP面对对象编程-7-OOP的一些关键子讲解

    面对对象常用的一些关键子:http://www.cnblogs.com/xishaonian/p/6146794.html排版不是很好望见谅. THE END

  4. 跟着百度学PHP[4]OOP面对对象编程-4-对象成员的访问 ->

    使用一个减号一个尖括号->来达到访问对象成员. $object->方法 来看案例. <?php class Person{ private $name; "; var $s ...

  5. 跟着百度学PHP[4]-OOP面对对象编程-1-什么是面对对象编程

    该阶段学习参考:http://www.cnblogs.com/xiaochaohuashengmi/archive/2010/09/10/1823042.html 面向对象编程(Object Orie ...

  6. 跟着百度学PHP[4]OOP面对对象编程-17-多态

    多态是除封装和继承之外的另一个面象对象的三大特性之一. 多态的作用简而言之就是为程序做括展. 比如说在公司上班,每个月财务发放工资,同一个发工资的方法,在公司内不同的员工或是不同职位的员工,都是通过这 ...

  7. 跟着百度学PHP[4]OOP面对对象编程-14-克隆对象__clone()方法

    $b=clone ($a) #克隆a对象. <?php class Human { private $name; private $sex; private $age; function __c ...

  8. 跟着百度学PHP[4]OOP面对对象编程-12-对象接口技术(interface)

    PHP与大多数面向对象编程语言一样,不支持多重继承.也就是说每个类只能继承一个父类. 接口正是解决每个类只能继承一个父类这个问题的 接口用什么权限,继承的那个方法也要使用什么权限. 接口的声明使用:i ...

  9. 跟着百度学PHP[4]OOP面对对象编程-10-静态关键字static

    使用static关键字可以将类中的成员标识为静态的,既可以用来标识成员属性,也可以用来标识成员方法. 以Person类为例,如果在person类中有一个“$country=’china’”的成员属性, ...

随机推荐

  1. easyUI validate函数【总结篇-部分转】

    以下是自己总结和修改别人的帖子和资源整理出来的一些常用验证函数,备用,交流. <body>邮箱验证:<input type="text" validtype=&q ...

  2. 自然语言13_Stop words with NLTK

    https://www.pythonprogramming.net/stop-words-nltk-tutorial/?completed=/tokenizing-words-sentences-nl ...

  3. ubuntu分区

    参考网址:http://jingyan.baidu.com/article/60ccbceb18624464cab197ea.html

  4. Linux下Memcache 安装和使用

    Memcached是一种高性能的分布式内存对象缓存系统(memcached虽然称为“分布式”缓存服务器,但服务器端并没有“分布式”功能,其“分布式”由客户端函数库完成,成熟算法的为一致性Hash),用 ...

  5. GitHub 在 Clion2016.1.3 中的设置

    1.在 GitHub 上注册,建立一个 Repositories,结果获得如下 https://github.com/GPerelman/Clion2016.1.3.git 2.打开 git-bash ...

  6. OpenGL Registry

    https://www.opengl.org/registry/ https://cvs.khronos.org/svn/repos/ogl/trunk/doc/registry/public/api ...

  7. 轻量级router[类似laravel router]

    github地址:https://github.com/NoahBuscher/Macaw/blob/master/Macaw.php 代码加上一些注释,方便以后再看. <?php namesp ...

  8. WebGrid Helper with Check All Checkboxes

    WebGrid Helper with Check All Checkboxes myEvernote Link Tuesday, September 13, 2011ASP.NET ASP.NET ...

  9. jQuery中$(function(){})与(function($){})(jQuery)、$(document).ready(function(){})等的区别详细讲解

    1.(function($) {…})(jQuery); 1).原理: 这实际上是匿名函数,如下: function(arg){…} 这就定义了一个匿名函数,参数为arg 而调用函数时,是在函数后面写 ...

  10. base64 加密

    Base64 参考网站:http://zh.wikipedia.org/wiki/Base64 简介 是网络上使用最广泛的编码系统,能够将任何二进制数据,转换成只有 65 个字符组成的文本文件 a~z ...