跟着百度学PHP[4]OOP面对对象编程-13-魔术方法__set(),__get(),__isset(),__unset()
__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()的更多相关文章
- 跟着百度学PHP[4]OOP面对对象编程-6-构造方法(__construct)和构析方法(__destruct)
函数就是成员方法(方法有三:构造方法.成员方法.析构方法) 下面是两种方法. 构造方法和构析方法 00x1 构造方法 构造方法会在创建对象之后自动调用.其名称为__construct <?php ...
- 跟着百度学PHP[4]OOP面对对象编程-15-魔术方法__call方法
简而言之就是调用了一个类中没有的方法就会自动调用__call()方法, 该参数有两个必须的参数! 第一个参数:调用的不存在的方法的方法名. 第二个参数:调用不存在的方法的参数. 但是总的说回来,__c ...
- 跟着百度学PHP[4]OOP面对对象编程-7-OOP的一些关键子讲解
面对对象常用的一些关键子:http://www.cnblogs.com/xishaonian/p/6146794.html排版不是很好望见谅. THE END
- 跟着百度学PHP[4]OOP面对对象编程-4-对象成员的访问 ->
使用一个减号一个尖括号->来达到访问对象成员. $object->方法 来看案例. <?php class Person{ private $name; "; var $s ...
- 跟着百度学PHP[4]-OOP面对对象编程-1-什么是面对对象编程
该阶段学习参考:http://www.cnblogs.com/xiaochaohuashengmi/archive/2010/09/10/1823042.html 面向对象编程(Object Orie ...
- 跟着百度学PHP[4]OOP面对对象编程-17-多态
多态是除封装和继承之外的另一个面象对象的三大特性之一. 多态的作用简而言之就是为程序做括展. 比如说在公司上班,每个月财务发放工资,同一个发工资的方法,在公司内不同的员工或是不同职位的员工,都是通过这 ...
- 跟着百度学PHP[4]OOP面对对象编程-14-克隆对象__clone()方法
$b=clone ($a) #克隆a对象. <?php class Human { private $name; private $sex; private $age; function __c ...
- 跟着百度学PHP[4]OOP面对对象编程-12-对象接口技术(interface)
PHP与大多数面向对象编程语言一样,不支持多重继承.也就是说每个类只能继承一个父类. 接口正是解决每个类只能继承一个父类这个问题的 接口用什么权限,继承的那个方法也要使用什么权限. 接口的声明使用:i ...
- 跟着百度学PHP[4]OOP面对对象编程-10-静态关键字static
使用static关键字可以将类中的成员标识为静态的,既可以用来标识成员属性,也可以用来标识成员方法. 以Person类为例,如果在person类中有一个“$country=’china’”的成员属性, ...
随机推荐
- 生成秘钥文件 sn.exe(Strong Name Tool)
Visual Studio 内置 Strong Name Tool, 我们直接运行"VS开发人员命令提示"就可以生成秘钥文件. 秘钥文件包含公钥和私钥. 来看这个例子: 在文件夹下 ...
- Repeater 获取数据值
<input id="btn_fld_PRD_UM" class="btn" type="button" value="选择 ...
- mysql锁
锁是计算机协调多个进程或线程并发访问某一资源的机制.在数据库中,除传统的计算资源(如CPU.RAM.I/O等)的争用以外,数据也是一种供许多用户共享的资源.如何保证数据并发访问的一致性.有效性是所有数 ...
- Tomcat配置并启用HTTPS
参考文献:http://www.cnblogs.com/xdp-gacl/p/3744053.html#blogTitle2 概述:用sun公司提供的keytool(位置为<JAVA_HOME& ...
- 《深入理解bootstrap》读书笔记:第二章 整体架构
一. 整体架构 1. CSS-12栅格系统 把网页宽度均分为12等分(保留15位精度)--这是bootstrap的核心功能. 2.基础布局组件 包括排版.按钮.表格.布局.表单等等. 3.jQu ...
- VBO, VAO, Generic Vertex Attribute
VBO - 用于存储顶点数据的Buffer Object. VAO - 用于组织VBO的对象. Generic Vertex Attribute - 通用顶点属性. For example, the ...
- JAVA JLabel自定义子类无法显示
import java.awt.*; import java.util.Scanner; import javax.swing.*; public class Test_16_13 extends J ...
- Yii2 行为
// Step 1: 定义一个将绑定行为的类 class MyClass extends yii\base\Component { // 空的 } // Step 2: 定义一个行为类,他将绑定到My ...
- NSURLSession & NSCache
用于替代 NSURLConnection 支持后台运行的网络任务 暂停.停止.重启网络任务,不再需要 NSOperation 封装 请求可以使用同样的配置容器 不同的 session 可以使用不同的私 ...
- Coding上传项目步骤
step1:在coding上面创建一个项目mybokestep2:在git 命令台中进入项目的根目录下面,使用git init创建.git文件夹和.gitigonre文件,帮组本地与远程的链接step ...