PHP OOP很多设置者,getter

我需要创建约5-7班,每班都会包含很多会员(让我们说每班都包含20名成员).我可以使用公共访问来创建它们,如:

class A {
    public $myPropertyOne = '';
    public $myPropertyTwo = '';
    ...
}

我最喜欢的方式当然是让这些成员私有并为每个属性创建get / set方法.即

class A {
    private $myPropertyOne = '';
    private $myPropertyTwo = '';

    public function getMyPropertyOne() {
            return $this->myPropertyOne;
    }

    public function setMyPropertyOne($myPropertyOne) {
            $this->myPropertyOne = $myPropertyOne;
    }

    public function getMyPropertyTwo() {
            return $this->myPropertyTwo;
    }

    public function setMyPropertyTwo($myPropertyTwo) {
            $this->myPropertyTwo = $myPropertyTwo;
    }
}

但考虑到一个类将有20个属性,我将除了添加40个方法.我在这里关心的是这将如何减慢脚本和更多的记忆这将需要(记住我将有这样的几个类).

另一个解决方案可能是使用魔术函数__set,__get但是我不想,因为开发IDE中的代码完成不会建议对我来说至关重要的属性.

如果这将是一个编译语言(如C),我将不会有问题,并将使用getter,setter的解决方案,但由于PHP是解释语言,我对我的脚本感兴趣,使用较少的RAM并尽可能快.

提前感谢,关于这个问题的任何想法将不胜感激!

我的想法

感谢大家的答案,我只想分享一下我的意见,以防有人会找到这个问题的答案.

我不能完全同意你不应该关心性能的人,因为这是优化工作的任务,我认为这是重要的因素(至少对我而言),当我们处理诸如PHP这样的解释性语言时,我们将永远不得不考虑内存和速度(这一切都提醒我,当我正在开发DOS系统应用程序的时候,呃:)你总是受限于CPU和千字节的总内存不足,所以如果你可以保存一个额外的字节),在PHP开发中,您拥有相同的图片,无论您添加多少个服务器,用户的计数总是会更高,以便您始终必须决定是否要遵循经典/安全/正确的方法或避免这种情况获得一些速度或记忆的增益.

所以….我的意见是,这里的最好的方法是使用所有成员的公共访问,并避免所有属性的getter / setter,并使用get / set方法的私有访问需要数据验证或初始化的属性,然后一个值将被设置.

例如:

class B {
    public $myPropertyOne = '';
    public $myPropertyTwo = '';
    private $myPropertyThree = array();


    public function getMyPropertyThree() {
        return $this->myPropertyThree;
    }

    public function setMyPropertyThree($val) {
        if(!is_array($val)) {
            return;
        }

        $this->myPropertyThree = $val;
    }
}

谢谢你花时间在我的问题!

简单的测试显示实例占用相同的内存量,不受类中方法的影响:

没有办法的类:

class Test1 { }

20类方法:

class Test2 {

    function test1() { return true; }
    function test2() { return true; }
    function test3() { return true; }
    function test4() { return true; }
    function test5() { return true; }
    function test6() { return true; }
    function test7() { return true; }
    function test8() { return true; }
    function test9() { return true; }
    function test10() { return true; }
    function test11() { return true; }
    function test12() { return true; }
    function test13() { return true; }
    function test14() { return true; }
    function test15() { return true; }
    function test16() { return true; }
    function test17() { return true; }
    function test18() { return true; }
    function test19() { return true; }
    function test20() { return true; }

}

测试循环,两个测试相同:

$test = array();
$base = memory_get_usage();
for ($i = 0; $i < 10000; $i++) {
    $test[] = new ClassToBeTested();
}
$used = memory_get_usage() - $base;
print("used: $used\n");

Test1类的结果(无方法):

used: 3157408

Test2类的结果(20种方法):

used: 3157408

我已经在两个单独的脚本中运行它,因为在单个脚本中运行两个测试显然暴露了一些PHP内部分配,第二个测试比第一个测试消耗的内存少,无论是第一个还是第二个.

虽然您确实需要更多的内存来实际的类定义,但显然这个成本只是每个类产生一次,而不是每个实例.您不必担心内存使用情况.

翻译自:https://stackoverflow.com/questions/11167709/php-oop-a-lot-of-setters-getters

转载注明原文:PHP OOP很多设置者,getter