__unset 删除非公有属性,在外部调用unset时发生,  __isset用来检测对象属性是否设置值

<?php
class coach
{
protected $chairfit = "徐晓冬";
protected $lover = "丁大锅";
public function __construct()
{
echo "欢迎来到~必图拳馆训练~";
}
public function __get($chairfit)
{
return $this->$chairfit;
}
public function __set($name,$value)
{
$this->$name=$value;
}
}
class cj extends coach
{
public $expertin = ['散打','泰拳','巴西柔术'];
}
$cj = new cj();
var_dump($cj);
$cj->lover='陈培昌';
var_dump(isset($cj->lover)) ;
?>

以为这样就能检测非公有属性是否设置?deeply sorry about that!

输出结果:

欢迎来到~必图拳馆训练~
bool(false)

正确姿势

<?php
class coach
{
protected $chairfit = "徐晓冬";
protected $lover = "丁大锅";
public function __construct()
{
echo "欢迎来到~必图拳馆训练~"."\n";
}
public function __get($chairfit)
{
return $this->$chairfit;
}
public function __set($name,$value)
{
$this->$name=$value;
}
   #加上这段
public function __isset($name)
{
return isset($name);
}
}
class cj extends coach
{
public $expertin = ['散打','泰拳','巴西柔术'];
}
$cj = new cj();
//var_dump($cj);
$cj->lover='陈培昌';
var_dump(isset($cj->lover)) ;
?>

输出结果:

欢迎来到~必图拳馆训练~
bool(true)

<?php
class coach
{
protected $chairfit = "徐晓冬";
private $lover;
public function __construct()
{
echo "欢迎来到~必图拳馆训练~"."\n";
}
public function __get($chairfit)
{
return $this->$chairfit;
}
public function __set($name,$value)
{
$this->$name=$value;
}
public function __isset($name)
{
return isset($name);
}
public function __unset($name)
{
unset($this->$name);
}
}
class cj extends coach
{
public $expertin = ['散打','泰拳','巴西柔术'];
}
$cj = new coach();
//var_dump($cj);
$cj->lover='陈培昌';
var_dump($cj);
unset($cj->lover);
var_dump($cj); ?>

unset cj对象的lover属性之前,打印对象结果为:

object(coach)#1 (2) {
["chairfit":protected]=>
string(9) "徐晓冬"
["lover":"coach":private]=>
string(9) "陈培昌"
}

删除之后打印对象结果

object(coach)#1 (1) {
["chairfit":protected]=>
string(9) "徐晓冬"
}

php类相关知识---__unset和__isset的更多相关文章

  1. String 类相关知识

    1.常用方法 1)判断字符串是否为空 public boolean isEmpty()2)获取字符串长度 public int length()3)截取子子串 public String substr ...

  2. Java _类 相关知识

    成员变量 java对象的属性就是成员变量,其实成员变量就是指普通的变量,可以设置初始值,也可以不设置.当不设置时,会被设置为默认值.(当成员变量前面有private关键词时,说明定义了一个私有成员) ...

  3. php类相关知识----类常量,静态变量

    类常量 <?php class myuser { ;//定义的常量不带$符号,常量之前没有访问修饰符,常量之前没有修饰符号 public function monolog() { echo &q ...

  4. Java String类相关知识梳理(含字符串常量池(String Pool)知识)

    目录 1. String类是什么 1.1 定义 1.2 类结构 1.3 所在的包 2. String类的底层数据结构 3. 关于 intern() 方法(重点) 3.1 作用 3.2 字符串常量池(S ...

  5. php类相关知识----抽象类

    <?php //抽象类存在的目的是被继承,而不是用来被实现 abstract class wenwajiao { //抽象类中一定要有抽象方法,而且一定要被实现 abstract public ...

  6. 【Python五篇慢慢弹(5)】类的继承案例解析,python相关知识延伸

    类的继承案例解析,python相关知识延伸 作者:白宁超 2016年10月10日22:36:57 摘要:继<快速上手学python>一文之后,笔者又将python官方文档认真学习下.官方给 ...

  7. 04StringBuffer相关知识、Arrays类、类型互换、正则、Date相关

    04StringBuffer相关知识.Arrays类.类型互换.正则.Date相关-2018.7.12 1.StringBuffer A:StringBuffer的构造方法: public Strin ...

  8. php有关类和对象的相关知识1

    有关类和对象的相关知识 类的自动加载 类的自动加载是指,在外面的页面中,并不需要去“引入”(包含)类文件,但是程序会在需要一个类的时候就自动去“动态加载”该类. 什么叫做“需要一个类”?通常是这样的情 ...

  9. 第7章 Python类型、类、协议 第7.1节 面向对象程序设计的相关知识

    Python被视为一种面向对象的语言,在介绍Python类相关的内容前,本节对面向对象程序设计相关的概念进行简单介绍. 一.    类和对象(实例) 在面向对象的程序设计(OOP)过程中有两个重要概念 ...

随机推荐

  1. 学习笔记:CentOS 7学习之十一:文件的重定向

    1.文件描述符定义 文件描述符:是内核为了高效管理已被而打开的文件所创建的缩影,用于指向被打开的文件,所有执行I/O操作的系统调用都通过文件描述符:文件描述符是一个简单的非负整数,用于标明每一个被进程 ...

  2. [bzoj3043]IncDec Sequence_差分

    IncDec Sequence 题目大意:给定一个长度为n的数列{a1,a2...an},每次可以选择一个区间[l,r],使这个区间内的数都加一或者都减一.问至少需要多少次操作才能使数列中的所有数都一 ...

  3. 基于freescale i.Mx6(ARM)的阿里云oss调试记录

    交叉编译阿里OSS调试记录 1.1 开通oss服务 具体参考以下链接: https://help.aliyun.com/document_detail/31884.html?spm=a2c4g.111 ...

  4. arm-linux-ar常见用法

    1)     创建test.a静态库 arm-linux-gcc  -c  a.o  a.c arm-linux-gcc  -c  b.o  b.c arm-linux-ar  -rc  test.a ...

  5. 批量导出docker images 的一个简单方法

    docker images |cut -c - |xargs docker save -o iamges.tar 主要 最大的长度不能超过 18 超过了就得改一下 -c 后面的数据长度 最终效果为: ...

  6. [转帖]Kubernetes CNI网络最强对比:Flannel、Calico、Canal和Weave

    Kubernetes CNI网络最强对比:Flannel.Calico.Canal和Weave https://blog.csdn.net/RancherLabs/article/details/88 ...

  7. Mysql创建、使用循环函数

    创建函数 create procedure names() begin declare i int default 0; while i < 3000 do INSERT INTO studen ...

  8. sqlalchemy定义mysql时间戳字段

    update_time = Column(TIMESTAMP, nullable=False, comment='更新时间戳', server_default=text('CURRENT_TIMEST ...

  9. sql server安装图解

    1.进入安装中心:可以参考硬件和软件要求.可以看到一些说明文档 2.选择全新安装模式继续安装 3.输入产品秘钥:这里使用演示秘钥进行 4.在协议中,点击同意,并点击下一步按钮,继续安装 5.进入全局规 ...

  10. 《深入理解 Java 虚拟机》学习笔记 -- 内存区域

    <深入理解 Java 虚拟机>学习笔记 -- 内存区域 运行时数据区域 主要分为 6 部分: 程序计数器 虚拟机栈 本地方法栈 Java 堆 方法区 如图所示: 1. 程序计数器(线程私有 ...