• 技术文章 >后端开发 >php教程

    php幻术方法: _get() 和 _set()的妙用

    2016-06-13 13:20:01原创434
    php魔术方法: __get() 和 __set()的妙用

    ?

    _setters)) {
          return $this->$property;
        }
        else if (method_exists($this, '_get_' . $property))
          return call_user_func(array($this, '_get_' . $property));
        else if (in_array($property, $this->_getters) OR method_exists($this, '_set_' . $property))
          throw new Exception('Property "' . $property . '" is write-only.');
        else
          throw new Exception('Property "' . $property . '" is not accessible.');
      }
    
      public function __set($property, $value) {
        if (in_array($property, $this->_getters)) {
          $this->$property = $value;
        }
        else if (method_exists($this, '_set_' . $property))
          call_user_func(array($this, '_set_' . $property), $value);
        else if (in_array($property, $this->_setters) OR method_exists($this, '_get_' . $property))
          throw new Exception('Property "' . $property . '" is read-only.');
        else
          throw new Exception('Property "' . $property . '" is not accessible.');
      }
    }
    ?>
    
    This way the variables in the $_getters array can be read from the outside and the variables in the $_setters array can be modified from the outside, like this:
    
    title = 'Hello, World';
    echo $post->title;
    
    // The following will throw an exception since $comments is read-only:
    $post->comments = 23;
    ?>
    
    And in case you need a less generic getter or setter at some point, you can remove the variable from the $_getters or $_setters array and implement a method like:
    
    title = str_replace('World', 'Universe', $value);
    }
    ?>
    
    And from the outside the property could still be used with:
    
    title = 'Hello, World!';
    ?>

    ?上面是手册里的例子,但是我觉得应该是先判断类里面是否有处理属性的方法,有的话就调用该方法,没有就直接设置该属性。

    ?

    声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn核实处理。
    上一篇: php xPath 解析xml文件 有关问题 下一篇: PHP5.2怎么连接SQL SERVER 2000
    20期PHP线上班

    相关文章推荐

    • 【活动】充值PHP中文网VIP即送云服务器• php中的一些数组排序方法分享_php技巧• 让你成为更出色的PHP开发者的10个技巧_php技巧• 说明的比较细的php 正则学习实例_php技巧• php自动跳转中英文页面_php技巧• 实例(Smarty+FCKeditor新闻系统)_php实例
    1/1

    PHP中文网