Vol*_*ike 14 php variables static private class
我注意到PHP中有两种方法可以做同样的事情.你能告诉我哪种方式更好的编程习惯吗?
在第一个例子中,我在类上使用了一个私有变量.在第二个例子中,我在类方法中使用静态变量.
class Test {
private $_myvar;
public function getVar(){
if (!isset($this->_myvar)) {
$this->_myvar = "test\n";
}
return $this->_myvar;
}
}
$oTest = new Test();
echo $oTest->getVar(); // sets var first time and returns it
echo $oTest->getvar(); // pulls from cache
Run Code Online (Sandbox Code Playgroud)
要么:
class Test {
public function getVar(){
static $myvar;
if (!isset($myvar)) {
$myvar = "test\n";
}
return $myvar;
}
}
$oTest = new Test();
echo $oTest->getVar(); // sets var first time and returns it
echo $oTest->getvar(); // pulls from cache
Run Code Online (Sandbox Code Playgroud)
Orb*_*ing 15
这就像说哪个房间更好的厨房或浴室,它们都是房间,但它们有不同的功能.
甲static
变量是在多个对象是相同的.
通过private
上面声明的实例变量特定于给定对象.
注意,这private
是一个访问修饰符,static
不是,变量可以是两者.
在您拥有static
变量的位置,在函数内,它根本不是类/对象变量,而是传统的函数级static
变量,它将在函数的所有调用中单实例化,使其类似于类-level static
变量,但只能在其定义的方法中访问.
使用class属性(可以是public,private或protected),该类的其他部分可以访问该变量.
使用静态变量,它只对该类的方法可见.
我建议使用class属性(但可能不是私有的,我通常没有太多用处;受保护通常是一个更好的主意),因为以后测试更容易; 你不能做任何事情来取消,改变或检查静态变量.
我在静态变量和静态类属性之间的其他答案中看到了一些可能的混淆.PHP使用相同的修饰符,但行为完全不同; 一个例子如下.
<?php
class Foo {
// Static class property
public static $bar = 'bar';
public function blarg() {
static $bar;
if (empty($bar)) {
$bar = 'blarg';
}
return $bar;
}
}
Run Code Online (Sandbox Code Playgroud)
在上面的例子中,可以使用Foo::$bar
(或self::$bar
在类和static::$bar
PHP 5.3中)访问静态类属性; 静态变量不能并且仅在函数内可见blarg()
.