zoukankan      html  css  js  c++  java
  • php中常用魔术方法的举例

        魔术方法是php面向对象特有的功能,并且有时候能实现意想不到的效果,包括前面提到的构造函数、析构函数、还有__clone函数,另外再简单的介绍几个:

    1、__toSring和__invoke

     1 class Moshu{
     2   public function __tostring(){
     3     return "This is the Class MagicTest.<br />";
     4   }
     5   public function __invoke($x){
     6     echo "__invoke called with parameter " . $x . "<br />";
     7   }
     8 }
     9 
    10 $obj =  new Moshu();
    11 echo $obj;
    12 $obj(5);

    根据代码可以简单地看出,第11行说明当对象被当做字符串输出时,会自动调用__toString方法,第12行说明当对象被当做方法调用时,会自动调用__invoke方法,参数要保持一致

    2、__call和__callStatic方法重载

     1 class Moshu{
     2   public function __call($name, $arguments){
     3     echo "Calling " . $name . " with parameters: " . implode(', ', $arguments) . "<br />";
     4   }
     5 
     6   public static function __callStatic($name, $arguments){
     7     echo "Static calling " . $name . " with parameters: " . implode(', ', $arguments) . "<br />";
     8   }
     9 }
    10 
    11 $obj =  new Moshu();
    12 $obj->runTest("para1", "para2");
    13 MagicTest::runTest("para3","para4");

    第12行调用一个不存在的公共方法时,__call魔术方法会被自动调用,当访问一个不存在的静态方法时,__callStatic方法会被自动调用,这个应用在开发中很常见,就好比所有不存在的方法都正常出现一样,这叫做方法重载

    3、__get、__set、__isset、__unset属性重载

     1 class Moshu{
     2   public function __get($name){
     3     return "Getting the property " . $name;
     4   }
     5   public function __set($name, $value){
     6     echo "Setting the property " . $name . " to value ". $value. "<br />";
     7   }
     8 
     9   public function __isset($name){
    10     echo "__isset invoked<br />";
    11     return false;
    12   }
    13 
    14   public function __unset($name){
    15     echo "unsetting property " . $name;
    16   }
    17 }
    18 
    19 $obj =  new Moshu();
    20 echo $obj->name . "<br />";
    21 $obj->name = "Name Value";
    22 echo '$obj->name is set? '. isset($obj->name) . "<br />";
    23 echo '$obj->name is empty?' . empty($obj->name) . "<br />";
    24 unset($obj->name);

    由代码可以看出,当读取不存在或不可访问的属性name时,__get()方法会被自动调用;当给不存在或不可访问的属性赋值时,__set()方法会自动调用;当对不可访问或不存在属性用isset或empty时,会自动调用__isset()方法,通过返回值可以看出,isset和empty返回值正好相反;当对不可访问或者不存在的属性使用unset销毁时,__unset()方法会被自动调用

    以上就是php中常见的魔术方法了

  • 相关阅读:
    Spring中通配符问题
    <context:component-scan>子标签:<context:include-filter>和<context:exclude-filter>使用时要注意的地方
    (转)Spring常见注解总结
    (转)Spring常用注解
    spring配置文件引入properties文件:<context:property-placeholder>标签使用总结
    (转)Java多线程学习(吐血超详细总结)
    Druid连接池(四)
    sublime自动保存设置
    情感分类
    psvm中String [] args 理解
  • 原文地址:https://www.cnblogs.com/freeweb/p/4652618.html
Copyright © 2011-2022 走看看