Heim > Backend-Entwicklung > PHP-Tutorial > php属性重载和方法重载的介绍(附代码)

php属性重载和方法重载的介绍(附代码)

PHPz
Freigeben: 2018-10-16 15:07:22
nach vorne
1361 Leute haben es durchsucht

本篇文章给大家带来的内容是关于php属性重载和方法重载的介绍(附代码),有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。


重载: 当访问一个不存在的或者私有属性(权限不够)或方法的时候,能够触发的一些列的魔术方法

属性重载

  • __set:设置属性的时候自动触发

  • __get:获取属性的时候自动触发

  • __isset:isset和empty时自动触发

  • __unset:unset的时候自动触发

<?php/**
 * Created by IntelliJ IDEA.
 * User: 何晓宏
 * Date: 2018/10/15
 * Time: 23:46
*/class Person{
    public $name;
    private $age;
    function __construct($name,$age){
        $this->name=$name;
        $this->age=$age;
    }
    function __destruct(){
        //脚本执行结束析构自动执行
        //可以使用unset($person)
    }

    /**魔术方法__get
     * 访问属性的名字
     * @param $name
     * @return bool
     * array设置控制用户访问
     */
    public function __get($name)
    {
        $allow=array(&#39;name&#39;,&#39;age&#39;);
        if(in_array($name,$allow)){
            return $this->$name;
        }else{
            return false;
        }

    }

    /** 魔术方法__set
     * 增加属性
     * @param $name :属性名
     * @param $value :属性值
     */
    public function __set($name, $value)
    {
        $arrow=array(&#39;money&#39;);
        //判断用户的操作是否合法
        if(in_array($name,$arrow)){
            $this->$name=$value;
        }

    }

    /**魔术方法__isset
     * @param $name
     * @return bool
     */
    public function __isset($name)
    {
        //可以设置array设置权限
        return isset($this->$name);
    }

    /**魔术方法__unset
     * 删除公有私有属性 
     * @param $name
     */
    public function __unset($name)
    {
        //可以设置array设置权限
        unset($this->$name);

    }}$person=new Person(&#39;hxh&#39;,18);//unset($person);//没有魔术方法__get 无法输出echo $person->age;var_dump(isset($person->age));//增加属性$person->money=&#39;100w&#39;;echo $person->money;
Nach dem Login kopieren

方法重载

  • __call():访问一个非静态方法

  • __callStatic():访问一个静态方法

<?php/**
 * Created by IntelliJ IDEA.
 * User: 何晓宏
 * Date: 2018/10/15
 * Time: 23:46
*/class Person{

    private function nojingtai(){
        //非静态方法,实例化后才会分配内存,属于实例对象
        echo __METHOD__;

    }

    protected static function jingtai(){
        //静态方法,类装载的时候就被装载到内存,属于类本身,使用效率比非静态方法要高
        echo __METHOD__;
    }

    function __construct($name,$age){
        $this->name=$name;
        $this->age=$age;
    }
    function __destruct(){
        //脚本执行结束析构自动执行
        //可以使用unset($person)
    }

    /**魔术方法__call
     * 访问一个非静态方法
     * @param $name
     * @param $arguments
     */
    public function __call($name, $arguments)
    {
        $this->$name();
    }

    /**魔术方法__callStatic
     * 访问一个静态方法
     * @param $name
     * @param $arguments
     */
    public static function __callStatic($name, $arguments)
    {
        self::$name();

    }}$person=new Person(&#39;hxh&#39;,18);//没有魔术方法之前出错$person->nojingtai();Person::jingtai();
Nach dem Login kopieren

重载的意义

控制对象或类的允许操作范围

容错处理

以上就是本篇文章的全部内容,更多精彩请关注PHP中文网!!!

Verwandte Etiketten:
Quelle:csdn.net
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage