加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > PHP教程 > 正文

php中的常用魔术方法汇总

发布时间:2020-12-13 03:08:19 所属栏目:PHP教程 来源:网络整理
导读:《:php中的常用魔术方法汇总》要点: 本文介绍了:php中的常用魔术方法汇总,希望对您有用。如果有疑问,可以联系我们。 这篇文章详细的对php中的常用魔术办法进行了整理归纳,供大家参考研究,具体内容如下 PHP学习 1、PHP把所有”__”开头的方法当做

《:php中的常用魔术方法汇总》要点:
本文介绍了:php中的常用魔术方法汇总,希望对您有用。如果有疑问,可以联系我们。

这篇文章详细的对php中的常用魔术办法进行了整理归纳,分享给大家供大家参考,具体内容如下PHP学习

1、PHP把所有”__”开头的方法当做魔术方法,所以任何自定义的方法都不能是”__”开头
php提供的重载,是指动态的创建属性或方法.重载是通过魔术方法来实现的.这些魔术方法的参数不能饮用传递,__get(),__set(),__isset(),__unset(),实现类属性重载.
2、当拜访类中不可拜访的属性时,将调用__get()方法
3、当拜访类中不可拜访的属性时,根据不同的情况会调用__get(),其中当拜访属性 时,使用函数isset()或empty()时,将调用__isset()方法使用unset()函数时,将调用__unset()方法.
4、这四个方法不能使用static关键词定义,在php5.3.0后,一个warning级别的警告将发生,当使用static方法定义这4个方法.
5、何谓不可拜访的属性:(1)类中没有的属性,(2)私有变量在类外被拜访.方法重载,通过__call()和__callstatic()来实 现,两者的区别是一个上下文环境是否是静态方法,后者在调用不可拜访的静态方法时会被调用.__callstatic()是在php5.3.0中才被添 加.
6、__sleep()和__wakeup()
serialize()序列化时,会先检查是否存在__sleep()函数,如果存在,则先调用__sleep(),返回一个包含所有变量名称的数组,如果该方法不返回任何内容,则null被序列化,并产生一个notice级别的错误.
__wakeup()方法和__sleep()相反,在调用unserialize()时被调用
7、__toString(),让一个类决定它如何转换成字符串,在php5.2.0之前,这个方法只能结合echo或print方法生效,php5.2.0之后,可以结合printf()修饰,但修饰的时候也不能用类似%d之类的非字符修饰符.
8、__invoke(),当尝试以调用函数的方式调用对象时,将出发这个函数,只在php5.3之后生效.
9、__set_state()静态方法,当调用var_export()的时候,才会调用这个静态方法,php5.1.0之后生效.唯一参数是接收一个数组.
10、__construct()和__destruct(),构造函数和析构函数,构造函数主要用于类的初始化,析构函数在某个对象的所有引用都 删除后或者对象被显示的销毁时运行.在析构函数中不允许抛出异常,否则会出发一个fatal error,析构函数在脚本结束时调用,此时所有的http header都已经发出.
11、__clone(),对象复制,此方法不能直接被调用,必须通过clone关键字显示调用

代码:

//实例化对象时,会调用对象的__construct办法
$obj = new Object();
//给对象不存在的属性赋值时,会调用对象的__set办法
$obj->title = "hello";
//使用对象不存在的属性时,会调用对象的__get办法
echo $obj->title;
//调用对象不存在的办法时,会调用对象的__call办法
$obj->test("hello",123,567);
//调用不存在的类静态办法时,会调用类的__callStatic办法
Object::staticMethod("static","not found method");
//直接输出对象时,会调用对象的__toString办法
echo $obj;
//将一个对象当作函数一样使用时,会调用对象的__invoke办法
echo $obj("test");
//克隆对象时,会调用对象的__clone办法
$obj2 = clone $obj;
//判断对象属性是否存在时,会调用对象的__isset办法
var_dump(isset($obj->aaa));
//销毁对象属性时,会调用对象的__unset办法
unset($obj->aaa);
 
 
class Object{
 
  protected $array = array();
 
  function __construct()
  {
    echo __METHOD__."你正在实例化对象<br>";
  }
 
  function __set($name,$value)
  {
    $this->array[$name]=$value;
  }
 
  function __get($name)
  {
    return $this->array[$name];
  }
 
  function __call($name,$arguments)
  {
    var_dump($name,$arguments);
    return "magic functionn";
  }
 
  static function __callStatic($name,$arguments);
    return "magic static function";
  }
 
  function __toString()
  {
    return __CLASS__.'<br>';
  }
 
  function __invoke($arguments)
  {
    var_dump($arguments);
    return __METHOD__.'<br>';
  }
 
  function __clone()
  {
    echo __METHOD__."你正在克隆对象<br>";
  }
 
  function __isset($name)
  {
    echo __METHOD__."你想判断有没有属性".$name."<br>";
    return 1;
  }
 
  function __unset($name)
  {
    echo __METHOD__."你想删除属性".$name."<br>";
  }
 
 
  function __destruct()
  {
    echo __METHOD__."你正在注销对象<br>";
  }
 
 
 
}

以上就是关于php中的常用魔术办法的全部内容,希望对大家的学习有所帮助.

《:php中的常用魔术方法汇总》是否对您有启发,欢迎查看更多与《:php中的常用魔术方法汇总》相关教程,学精学透。编程之家 52php.cn为您提供精彩教程。

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读