php手册里说在 当对不可访问属性调用 isset() 或 empty() 时,__isset() 会被调用,如下:
function __isset( $name ) {
return isset( $this->$name );
}
我想说的是为啥不直接把 $name 改为 public,而要这样绕? 新手。谢了
å¨ PHP éï¼å°ææ以 __ï¼ä¸¤ä¸ªä¸å线ï¼å¼å¤´çç±»æ¹æ³ä¿ç为éæ¯æ¹æ³ï¼æ以å¨å®ä¹ç±»æ¹æ³æ¶ï¼é¤äºä¸è¿°éæ¯æ¹æ³ï¼å»ºè®®ä¸è¦ä»¥ __ 为åç¼ã
éæ¯æ¹æ³çå¼å ¥æ¯å¯¹é¢å对象ç¼ç¨ææ³çè¿ä¸æ¥å®ç°ï¼é载就æ¯éè¿éæ¯æ¹æ³æ¥å®ç°çã
PHP éæ¯æ¹æ³ä¸»è¦æï¼
__construct()ï¼ __destruct()ï¼ __call()ï¼ __callStatic()ï¼ __get()ï¼ __set()ï¼ __isset()ï¼ __unset()ï¼__sleep()ï¼ __wakeup()ï¼ __toString()ï¼ __invoke()ï¼ __set_state()ï¼ __clone() å __debugInfo() çã
æ常è§çæ¯__construct()ï¼ __destruct()ï¼__get()ï¼ __set()çï¼
__constructå__destructæ¯ç±»çæé å½æ°åææå½æ°ã
éæ¯æ¹æ³çå¼å ¥æ¯å¯¹é¢å对象ç¼ç¨ææ³çè¿ä¸æ¥å®ç°ï¼é载就æ¯éè¿éæ¯æ¹æ³æ¥å®ç°çã
PHP éæ¯æ¹æ³ä¸»è¦æï¼
__construct()ï¼ __destruct()ï¼ __call()ï¼ __callStatic()ï¼ __get()ï¼ __set()ï¼ __isset()ï¼ __unset()ï¼__sleep()ï¼ __wakeup()ï¼ __toString()ï¼ __invoke()ï¼ __set_state()ï¼ __clone() å __debugInfo() çã
æ常è§çæ¯__construct()ï¼ __destruct()ï¼__get()ï¼ __set()çï¼
__constructå__destructæ¯ç±»çæé å½æ°åææå½æ°ã
温馨提示:答案为网友推荐,仅供参考
第1个回答 推荐于2017-11-25
这样绕的话是为了安全,也就是面向对象里封装的理念,如果直接设置Public那么没个对象都可以自由设置这个属性的值了,而且没有经过任务逻辑判断,这样绕弯的话可以增加安全性本回答被提问者采纳
第2个回答 2020-02-05
魔术方法包括:
__construct(),类的构造函数
__destruct(),类的析构函数
__call(),在对象中调用一个不可访问方法时调用
__callStatic(),用静态方式中调用一个不可访问方法时调用
__get(),获得一个类的成员变量时调用
__set(),设置一个类的成员变量时调用
__isset(),当对不可访问属性调用isset()或empty()时调用
__unset(),当对不可访问属性调用unset()时被调用。
__sleep(),执行serialize()时,先会调用这个函数
__wakeup(),执行unserialize()时,先会调用这个函数
__toString(),类被当成字符串时的回应方法
__invoke(),调用函数的方式调用一个对象时的回应方法
__set_state(),调用var_export()导出类时,此静态方法会被调用。
__clone(),当对象复制完成时调用
__autoload(),尝试加载未定义的类
__debugInfo(),打印所需调试信息
__construct(),类的构造函数
__destruct(),类的析构函数
__call(),在对象中调用一个不可访问方法时调用
__callStatic(),用静态方式中调用一个不可访问方法时调用
__get(),获得一个类的成员变量时调用
__set(),设置一个类的成员变量时调用
__isset(),当对不可访问属性调用isset()或empty()时调用
__unset(),当对不可访问属性调用unset()时被调用。
__sleep(),执行serialize()时,先会调用这个函数
__wakeup(),执行unserialize()时,先会调用这个函数
__toString(),类被当成字符串时的回应方法
__invoke(),调用函数的方式调用一个对象时的回应方法
__set_state(),调用var_export()导出类时,此静态方法会被调用。
__clone(),当对象复制完成时调用
__autoload(),尝试加载未定义的类
__debugInfo(),打印所需调试信息