Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/293.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 有人能解释一下set和get的过载吗`_Php_Oop_Magic Methods - Fatal编程技术网

Php 有人能解释一下set和get的过载吗`

Php 有人能解释一下set和get的过载吗`,php,oop,magic-methods,Php,Oop,Magic Methods,我不知道这是不是问这个的好地方,但我还是要去。最近,我在Lynda.com上观看了一个名为“使用PHP进行面向对象编程”的系列节目,并谈到了有关重载的部分。在本节中,他使用了\uu get和\uu set魔术方法。我完全不知道这些方法在做什么,更不知道魔法方法的目的是什么。任何帮助都会很好 当试图设置或访问的属性未在类中定义或不可访问时,将调用\uuu set和\uu get。它们可以用于错误处理或其他目的(例如,像雄辩的ORM,它“神奇地”将表列映射到对象的属性) 假设你有这个班: class

我不知道这是不是问这个的好地方,但我还是要去。最近,我在Lynda.com上观看了一个名为“使用PHP进行面向对象编程”的系列节目,并谈到了有关重载的部分。在本节中,他使用了
\uu get
\uu set
魔术方法。我完全不知道这些方法在做什么,更不知道魔法方法的目的是什么。任何帮助都会很好

当试图设置或访问的属性未在类中定义或不可访问时,将调用
\uuu set
\uu get
。它们可以用于错误处理或其他目的(例如,像雄辩的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->$variable=“test”
这样的值,我就无法得到它的值。我能吗?没关系,我刚拿到
\uu set($name,$value)
正在将未定义的属性设置为值,而
\uu get($name)
正在定义该属性。如果我错了,请纠正我。为了在未定义
var
的情况下使用
$a->var=“test”
,需要实现
\u设置($property,$value)
方法,其主体应该是
$this->$property=$value
。然后你就可以设置一个以前不存在的属性,以后再获取它的值(否则访问未定义的属性会返回
NULL
。做一点实验看看。是的,我刚刚发现了。这有用吗?我会用它吗?就我个人而言,我避免“魔法”,我更喜欢在定义时:)还有,使用“神奇”属性/方法可能会混淆IDE等。了解这些东西是如何工作的总是好的,这样当你偶然发现它时,你就可以理解代码,但是如果你在你所从事的任何项目中都看不到它的用途,那就干脆不要使用它。
$a = new A();

echo $a->a;

$a->iDoNotExist;

$a->iDoNotExistEither = "boo!";