我一直在想一些事情,希望有人能帮我澄清。
假设我们有一个类
class Test
{
private $value;
function first()
{
if("this"=="that") {
$neededVariable = 1;
}
}
function second()
{
$this->first();
//I need to evaluate something that was done in function first
if($neededVariable===1) {
//do something
}
}
现在最好的做法是什么?据我所知,有两种选择:
- 让
first()
函数用$this->value = 1;
设置成员变量,并用second()
函数访问该变量
2.first()
函数可以返回$neededVariable
。
他们都给出了相同的结果,但我在犹豫是否有最佳实践。也许其中一个比另一个有更好的表现,或者只是因为选择1/2是惯例。
非常感谢您的回答!
提前感谢:)
我认为1号更好。
因为如果使用2,每次调用second()时,first()也会在func-second中被调用。(首次需要大量使用cpu时对cpu不利)
但2号也有一些好东西。每次要使用func second时,除非$value为null,否则应该先调用func。如果你想在不同的页面中使用这个类,这是很糟糕的。
将first的结果存储在$中意味着修改对象的状态。简单地使用它来传递结果是糟糕的设计,因为代码的读者会认为修改对象的状态有更深的意义。更糟糕的是,调用second()也会像调用first()一样修改对象的状态——这是代码用户所期望的吗?
如果修改对象的状态是first()的预期目的,并且用户很清楚second()也会有同样的效果,那么在first(。
然而,如果您只想共享逻辑,只需编写一个重用逻辑的函数即可。这样,就可以将设置状态与重用逻辑分开。
class Test
{
private $value;
private function evaluate() {
$neededVariable = 0;
if ("this"=="that") {
$neededVariable = 1
}
return $neededVariable;
}
function first()
{
$this->value = $this->evaluate();
}
function second()
{
$neededVariable = $this->evaluate();
if($neededVariable===1) {
//do something
}
}
}
在您提到的第一种方法中,我们只是调用一个例程(函数),创建的成员变量的空间已经被利用,因此不再需要内存,而在第二秒内,如果从该子程序返回值,则需要另一个临时变量来存储该数据。它们都有相同的结果,但在第二种方法中,您会不知不觉地为该临时变量再创建一个内存块。
class Test
{
private $value;
function first()
{
if("this"=="that") {
$neededVariable = 1;
}
return $neededVariable;
}
function second()
{
//either you create a variable or use directly the function in if..
//both will require that temporary memory block.
$var = $this->first(); //or if($this->first() == 1)
if($var ===1) {
//do something
}
}