【问题标题】:Could someone please explain overloading with __set and __get?` [duplicate]有人可以用 __set 和 __get 解释重载吗?
【发布时间】:2015-10-25 20:52:37
【问题描述】:

我不知道这是否是问这个问题的正确地方,但无论如何我都会去。最近我在 Lynda.com 上观看了一个名为“使用 PHP 进行面向对象编程”的系列文章,并谈到了关于重载的部分。在本节中,他使用了__get__set 魔术方法。我完全不知道这些在做什么,甚至更不知道魔法方法的目的是什么。任何帮助都会很棒!

【问题讨论】:

    标签: php oop magic-methods


    【解决方案1】:

    __set__get 在您尝试设置或访问的属性未在您的类中定义或不可访问时调用。它们可用于错误处理或其他用途(例如 Eloquent ORM,它“神奇地”将表列映射到对象的属性)。

    假设你有这个类:

    class A {
    
        var $a = "I'm A<br/>";
    
        function __get($property)
        {
            echo "You tried to access '{$property}' which does not exist!<br/>";
        } // __get
    
        function __set($property, $value)
        {
            echo "You tried to set '{$property}' to '{$value}', but '{$property}' is not defined<br/>";
        } // __set
    
    }
    

    然后,执行此操作以查看结果:

    $a = new A();
    
    echo $a->a;
    
    $a->iDoNotExist;
    
    $a->iDoNotExistEither = "boo!";
    

    【讨论】:

    • 我还是一头雾水。如果我设置$a-&gt;$variable = "test" 之类的东西,我就无法获得它的价值。我应该可以吗?
    • 没关系,我刚刚知道了。 __set($name, $value) 正在为未定义的属性设置值,__get($name) 正在定义该属性。如果我错了,请纠正我。
    • 为了在未定义var的情况下使用$a-&gt;var = "test",您需要实现__set($property, $value)方法,其主体应为$this-&gt;$property = $value。然后您将能够设置一个以前不存在的属性并稍后获取它的值(否则访问未定义的属性会返回NULL。实验一下看看。
    • 是的,我刚刚想通了。这甚至有用吗?我会使用它吗?
    • 就我个人而言,我避免使用“魔法”,我更喜欢在定义事物时使用 :) 此外,使用“魔法”属性/方法可能会混淆 IDE 等。了解事物的工作原理总是很好,所以你当你偶然发现它时可以理解代码,但如果你在你正在从事的任何项目中都看不到它的目的,那么就不要使用它。
    猜你喜欢
    • 1970-01-01
    • 2012-05-29
    • 2010-12-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-09-05
    相关资源
    最近更新 更多