Php 为什么静态属性不能通过->;但是静态函数是可访问的吗?
我有下面的代码Php 为什么静态属性不能通过->;但是静态函数是可访问的吗?,php,class,oop,static,static-methods,Php,Class,Oop,Static,Static Methods,我有下面的代码 class MyClass { public static $count = 0; public static function plusOne() { return "The count is " . ++self::$count . ".<br />"; } } $obj = new MyClass; $obj->plusOne(); //Works proper for static function
class MyClass
{
public static $count = 0;
public static function plusOne()
{
return "The count is " . ++self::$count . ".<br />";
}
}
$obj = new MyClass;
$obj->plusOne(); //Works proper for static function
echo '<br/>'.MyClass::$count; // count: 1
MyClass::plusOne(); //Works proper for static function
echo '<br/>'.MyClass::$count; // count: 2
----OUTPUT------
1
2
----------------
class-MyClass
{
公共静态$count=0;
公共静态函数plusOne()
{
返回“计数为”。++self::$count。“
”;
}
}
$obj=新的MyClass;
$obj->plusOne()//适用于静态功能
回显“
”。MyClass::$count;//计数:1
MyClass::plusOne()//适用于静态功能
回显“
”。MyClass::$count;//计数:2
----输出------
1.
2.
----------------
在您的示例中,它看起来很奇怪,但是想象一下如果您也有
class MyOtherClass
{
public $count = 0;
public function plusOne()
{
return "The other count is " . ++$this->count . ".<br />";
}
}
您可以这样做,无论$obj是MyClass还是MyTherClass,它都会工作。在这一点上,实现细节并不重要,除非您已经知道它们-例如,您可以使用MyClass::plusOne(),而无需实例化它,因为您知道这是一个静态方法
静态变量始终是声明的静态变量。实例上没有数据-因此,无论您在更新它时使用什么范围,它都将更新静态计数。当您将类实例化为对象时,可以使用
->
:
是您希望通过静态调用某个对象的时间。您无法访问->$count
,因为它是类成员,您可以在未实例化时通过:
访问。可能重复@lolka\u bolka:谢谢。在第二季度,我使用了不同的方法2(即->,:),但最后计数增加。第一次使用$obj->plusOne(),第二次直接使用MyClass::plusOne(),有什么想法吗?@Darhazer:谢谢。我通过你的链接得到了我的Q1答案。你能帮我解决第二季度的问题吗?正如@lolka_bolka所指出的,使用名称->
并不意味着它必须是一种非静态方法,它必须是在实例化对象的类中定义的方法。谢谢,但我需要知道为什么访问静态变量和静态函数的区别不是替代代码。当然,代码只是为了说明这一点:当您访问变量的方法时,该变量可能不总是同一个类。它可能有一个类,其中该方法是静态的,也可能有一个类不是静态的。使用->可以在任何情况下调用给定的方法。
$obj->plusOne();