相关疑难解决方法(0)

为什么要使用getter和setter/accessors?

使用getter和setter的优点是什么 - 只能获取和设置 - 而不是简单地使用公共字段来存储这些变量?

如果getter和setter做的不仅仅是简单的get/set,我可以非常快地解决这个问题,但我并不是100%清楚如何:

public String foo;
Run Code Online (Sandbox Code Playgroud)

更糟糕的是:

private String foo;
public void setFoo(String foo) { this.foo = foo; }
public String getFoo() { return foo; }
Run Code Online (Sandbox Code Playgroud)

而前者需要很少的样板代码.

java oop getter setter abstraction

1472
推荐指数
26
解决办法
37万
查看次数

PHP __get和__set魔术方法

除非我完全弄错了,否则这些__get__set方法应该允许重载→ getset.

例如,以下语句应调用该__get方法:

echo $foo->bar;
$var = $foo->bar;
Run Code Online (Sandbox Code Playgroud)

以下应该使用该__set方法:

$foo->bar = 'test';
Run Code Online (Sandbox Code Playgroud)

这在我的代码中不起作用,并且可以通过这个简单的示例重现:

class foo {

    public $bar;
    public function __get($name) {

        echo "Get:$name";
        return $this->$name;
    }

    public function __set($name, $value) {

        echo "Set:$name to $value";
        $this->$name = $value;
    }
}


$foo = new foo();

echo $foo->bar;
$foo->bar = 'test';

echo "[$foo->bar]";
Run Code Online (Sandbox Code Playgroud)

这只会导致:

[test]
Run Code Online (Sandbox Code Playgroud)

die()在那里打几个电话表明它根本没有打它.

现在,我只是说它,并且我手动使用__get它现在需要的地方,但这不是非常动态,并且需要知道"重载"代码实际上没有被调用,除非特别调用.我想知道这是不应该以我理解它应该或为什么这不起作用的方式起作用.

这是在运行php 5.3.3.

php magic-methods

82
推荐指数
5
解决办法
15万
查看次数

标签 统计

abstraction ×1

getter ×1

java ×1

magic-methods ×1

oop ×1

php ×1

setter ×1