跟着百度学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’”的成员属性, ...
随机推荐
- HTML <!DOCTYPE> 标签 布局引用的几种方法 行级元素与块级元素
HTML <!DOCTYPE> 标签 <!DOCTYPE html> <html> <head> <title>文档的标题</titl ...
- WinForm------GridControl显示每行的Indicator中的行号
1.修改Indicator的行宽 2.添加CustomDrawRowIndicator事件 private void AdminCardView_CustomDrawRowIndicator(obje ...
- win7开防火墙,允许别人远程
- java 类的静态变量
主要是记录一个奇葩的现象,java类中的静态变量,不仅可以通过类名称直接调用,而且还可以通过类的实力对象调用,java是不存在静态类的,如果非要用静态的类那就是内部类. 类中的静态变量是存储在JVM方 ...
- easyUI draggable插件使用不当,导致拖动div内部文本框无法输入;设置echarts数据为空时就显示空白,不要动画和文字
先上一个Demo <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://ww ...
- Java排序算法——选择排序
import java.util.Arrays; //================================================= // File Name : Select_S ...
- NGINX 配置404错误页面转向
什么是404页面 如果碰巧网站出了问题,或者用户试图访问一个并不存在的页面时,此时服务器会返回代码为404的错误信息,此时对应页面就是404页面.404页面的默认内容和具体的服务器有关.如果后台用的是 ...
- 设计模式学习——观察者模式(Observer Pattern)
0. 前言 观察者模式在许多地方都能够用到,特别是作为MVC模式的一部分,在MVC中,模型(M):存放数据,视图(V):显示数据.当模型中的数据发生改变时,视图会得到通知,这是典型的观察者模式. 1. ...
- Quartz.NET总结(三)Quartz 配置
前两篇文章,已经介绍了Quartz.NET的使用和Cron表达式表达式的写法,今天说一说Quartz的配置,Quartz相关的配置有三个quartz.config.quartz_jobs.xml.lo ...
- sqlserver检测死锁;杀死锁和进程;查看锁信息
http://blog.sina.com.cn/s/blog_9dcdd2020101nf4v.html sqlserver检测死锁;杀死锁和进程;查看锁信息 ( ::)转载▼ 标签: sql 检测死 ...