我在一个类中有一个方法,我想在其中初始化一个静态变量。
1 /当我初始化变量,然后使用$this
关键字将其影响为其他某个值时,它将起作用。例如:
class Test {
// ...
function test($input_variable)
{
static $my_static_variable = null;
if (!isset($my_static_variable))
$my_static_variable = $this->someFunction($input_variable);
// ... some further processing
}
}
2 /但是,当我尝试使用$this
关键字直接初始化/构造变量时,出现语法错误:unexpected '$this' (T_VARIABLE)
:
class Test {
// ...
function test($input_variable)
{
static $my_static_variable = $this->someFunction($input_variable); // *** syntax error, unexpected '$this' (T_VARIABLE)
// ... some further processing
}
}
1 /是初始化静态变量的好方法吗? 为什么不允许2 /,因为它应该做与1 /完全相同的事情?
我正在使用PHP 5.5.21(cli)(构建于2016年7月22日08:31:09)。
谢谢
答案 0 :(得分:0)
您不能在静态变量上使用#Class
class StudentDetails():
def __init__(self, id, Name, Status):
self.id= id
self.Name= Name
self.Status= Status
def main():
results= LinkCursor.fetchall() #databse results
。您可以将$this
与范围解析运算符(::)结合使用。
这里是示例:
self
答案 1 :(得分:0)
可以在不实例化类的情况下访问静态变量和函数。您不能使用$ this访问声明为static的变量或函数。 您必须使用范围解析运算符::来访问声明为静态的变量和函数。
对于变量:-
class A
{
static $my_static = 'foo';
public function staticValue() {
return self::$my_static;// Try to use $this here insted of self:: you will get error
}
}
class B extends A
{
public function fooStatic() {
return parent::$my_static;
}
}
使用以下命令访问变量:-
print A::$my_static
对于功能:-
class A {
public static function aStaticMethod() {
// ...
}
}
您可以按以下方式调用该函数:-
A::aStaticMethod();
答案 2 :(得分:0)
我想我有答案。在php documentation中,说明如下:
如上例所示,可以声明静态变量。从 PHP 5.6您可以为这些变量赋值,这些变量就是结果 ,但您不能在此处使用任何函数,这会导致 解析错误。
所以我想这对于PHP 5.5也适用。
正如@MagnusEriksson指出的那样,我也可以使用类属性。但是,我不希望在test()
方法之外的其他地方访问我的变量。
顺便说一句,doc中的静态属性在某种程度上说是相同的:
静态属性不能通过使用 箭头运算符->。
与其他任何PHP静态变量一样,静态属性只能是 在PHP 5.6之前使用文字或常量进行初始化;表达 不允许。在PHP 5.6和更高版本中,相同的规则适用于const 表达式:可以提供一些有限的表达式 在编译时进行评估。