为什么我销毁属性的时候不会重新检测一遍存不存在呢?

为什么我销毁属性的时候不会重新检测一遍存不存在呢?

<?php

class Person
{
   public $name = "王枫";
   protected $age = "18";

   public function __get($n)
   {
       echo "触发了不可访问的属性".$n;
   }
   public function __set($a, $b)
   {
           $this->$a = $b;
           echo "触发了不可访问的属性".$a."赋值为了".$b;
   }
   public function __isset($n)
   {
       echo "判断一个不可访问的属性是否存在".$n;
   }

   public function __unset($n)
   {
       echo "销毁一个不可访问的属性".$n;
   }

}

$xiao = new Person();
$xiao->age;
echo "<br>";

$xiao->age = "23";
echo "<br>";

empty($xiao->age);
echo "<br>";

unset($xiao->age);



正在回答

登陆购买课程后可参与讨论,去登陆

1回答

您好,销毁属性时使用的是unset,unset会触发__unset方法。当对不可访问属性调用 isset() 或    empty() 时,__isset()会被调用,因此销毁时是没有调用的。祝学习愉快!

  • 雨之赞歌 提问者 #1
    这个我知道,可是视频中老师在做例子的时候,__unset被触发的同时,也触发了__isset,然后老师说在使用unset()函数的时候会先检测属性是否存在,所以同时也触发了__isset,可是我这里并没有触发。
    2019-03-15 09:51:19
  • 好帮手慕查理 回复 提问者 雨之赞歌 #2
    您好,可以下载源码查看,在unset之后还有一句检测的代码,因此最终会再次触发__isset。视频会进行处理,给你的学习带来不便抱歉。
    2019-03-15 11:49:55
问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师