【发布时间】:2017-04-13 08:59:13
【问题描述】:
我是 PHP 新手,遇到了我认为奇怪的类变量用法(我使用 PHP 5.6,如果有帮助,我想使用 7.0)。
Class Foo {
private $bar = 'some string not returned nor modified and used in one place';
public function Test($foobar)
{
if ($foobar === $this->bar) {
// Some code
} else {
// Some code
}
}
}
当我看到上面的代码时,我问我的同事为什么将 $bar 声明为类变量,为什么不只在方法“Test”中声明 $bar。 他回答说,在 Test 中声明 $bar 会导致性能损失,因为每次调用方法“Test”时,都会为 $bar 变量重新创建内存空间。
我有点疑惑,这是真的吗?我理解逻辑:如果您将变量声明为类变量,内存将被“分配”一次,而不是在每次调用时,但令我惊讶的是,php 在幕后没有自动优化来做到这一点。
这是旧的优化吗?将尽可能多的变量声明为类变量是一件好事吗?
很抱歉问了这样一个问题,但我搜索了一下,但一无所获(主要是因为我不知道必须输入哪个关键字才能获取有关此特定主题的信息)。
【问题讨论】:
-
$bar是实例变量而不是(静态)类变量;并且应该被引用为$this->bar,而不是$self::bar....如果$bar是静态的,那么它将是self::$bar,而不是$self::bar -
我更正了,谢谢。
-
如果字符串和你的例子一样简单,我会说这是一个微优化,性能提升可以忽略不计,这实际上使代码更难阅读。
-
就我而言,它实际上只是一个字符串,但我的问题适用于其他变量类型(对象、数组...)。如果这是一个真正的优化,那么值得将尽可能多的局部变量的方法放在类变量上。
-
虽然内存分配/释放可能会节省一点;与局部变量相比,访问实例属性也有轻微的性能开销......这是一个微优化
标签: php