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: $usedn"); Test1类的结果(无方法): used: 3157408 Test2类的结果(20种方法): used: 3157408 我已经在两个单独的脚本中运行它,因为在单个脚本中运行两个测试显然暴露了一些PHP内部分配,第二个测试比第一个测试消耗的内存少,无论是第一个还是第二个. 虽然您确实需要更多的内存来实际的类定义,但显然这个成本只是每个类产生一次,而不是每个实例.您不必担心内存使用情况. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |