PHP魔术方法的的理解

超、凢脫俗 2022-03-26 15:10 397阅读 0赞

_set:属性不存在时自动设置属性

  1. /**
  2. * 属性不存在时通过__set自动设置属性
  3. * @param $key [键名]
  4. * @param $value [属性值]
  5. */
  6. function __set($key,$value){
  7. $this->arr[$key] = $value;
  8. }
  9. 代码:
  10. $object->title = 'blue'; //设置不存在的属性,调用__set()
  11. echo $object->title,'<br/>'; //输出不存在的属性,调用__get()
  12. 输出:
  13. blue

__get:属性不存在或不能读取时,设置该方法可读取

  1. /**
  2. * 属性不存在或不能读取(属性为私有private)时,通过__get读取
  3. * @param $key 键名
  4. * @return 属性
  5. */
  6. function __get($key){
  7. return $this->arr[$key];
  8. }

__call:方法不存在时,执行

  1. /**
  2. * 方法不存在时,执行__call方法
  3. * @param $func [方法名]
  4. * @param $param [参数]
  5. * @return [description]
  6. */
  7. function __call($func,$param){
  8. var_dump($func);
  9. echo '<br/>';
  10. var_dump($param);
  11. echo '<br/>';
  12. }
  13. 代码:
  14. $object -> show('hello','world'); //调用不存在的方法,调用__call()
  15. 输出:
  16. string(4) "show"
  17. array(2) { [0]=> string(5) "hello" [1]=> string(5) "world" }

__callStatic:静态方法不存在时,执行

  1. /**
  2. * 静态方法不存在时,执行__callStatic方法
  3. * @param $func [方法名]
  4. * @param $param [参数]
  5. * @return [description]
  6. */
  7. static function __callStatic($func,$param){
  8. var_dump($func);
  9. echo '<br/>';
  10. var_dump($param);
  11. echo '<br/>';
  12. }
  13. 代码:
  14. IMooc\Object::show('hello','world'); //调用不存在的静态方法,调用__callStatic()
  15. 输出:
  16. string(4) "show"
  17. array(2) { [0]=> string(5) "hello" [1]=>string(5) "world" }

__toString:当对象转换为字符串时,执行

  1. /**
  2. * 当对象转换为字符串时,执行__toString方法
  3. * @return string [description]
  4. */
  5. function __toString{
  6. return __CLASS__;
  7. }
  8. 代码:
  9. echo $object,'<br/>'; //将对象以字符串形式输出,调用__toString()
  10. 输出:
  11. IMooc\Object

__invoke:当把对象当成函数来使用时,执行

  1. /**
  2. * 当把对象当成函数来使用时,执行__invoke方法
  3. * @param [type] $param [参数]
  4. * @return [type] [description]
  5. */
  6. function __invoke($param){
  7. var_dump($param);
  8. }
  9. 代码:
  10. echo $object('hello'); //将对象当函数使用,调用__invoke()
  11. 输出:
  12. string(5) "hello"

链接:https://www.imooc.com/article/13239

发表评论

表情:
评论列表 (有 0 条评论,397人围观)

还没有评论,来说两句吧...

相关阅读

    相关 PHP魔术方法

    PHP 中魔术方法是以下两个划线 “\_\_” 开头的、具有特殊作用的一些方法,可以看作PHP的“语法糖”。 > 语法糖是指那些没有给计算机语言添加新功能,而只是对人类来说更