PHP - 为什么要使用类静态变量?

时间:2016-01-20 21:01:07

标签: php variables static

对不起,如果这是一个非常基本而且很长的问题,但我是新手。

在尝试计算常规类变量和静态类变量之间的PHP差异时,我使用了以下逻辑:

要使用普通的类变量,您需要创建一个对象并使用该对象的变量,但在使用类的静态变量时,您不会创建对象,而是直接引用静态变量。这是有记录的,但我想知道为什么有一个静态变量的类?我推断,因为你没有创建一个对象,任何引用同一个类的静态变量的实例都会看到相同的值。即如果一个实例将类的静态变量设置为等于2,则读取类的静态变量的其他实例将得到的值为2.我相信这是它在其他一些语言中的工作原理,例如C#,从我的逻辑来看,它是有道理的。

当我尝试测试我的理论时,我发现它不是真的。使用下面的代码,每个实例都有自己的类的静态变量值,即如果我转到页面然后刷新它,每次为类的常规和静态变量得到相同的结果。我希望静态变量在我第一次刷新页面时从2开始。

我的问题是我的代码被窃听,如果不是为什么在类中使用静态变量?我确实看到了在方法中使用静态变量的好处。

<?php

require_once "./TRYclassVari.php";
require_once "./TRYstaticVari.php";

$classVari = new ClassVari;
$fredClassBefore = $classVari->classVariable;
$classVari->classVariable++;
$fredClassAfter = $classVari->classVariable;
$classVari->classVariable++;
$fredClassAfterAnother = $classVari->classVariable;

//$staticVari = new staticVari;
$fredStaticBefore = StaticVari::$statVari;
StaticVari::$statVari++;
$fredStaticAfter = StaticVari::$statVari;
StaticVari::$statVari++;
$fredStaticAfterAnother = StaticVari::$statVari;

echo "Class vari before = {$fredClassBefore}<br>";
echo "Class vari after = {$fredClassAfter}<br>";
echo "Class vari after another = {$fredClassAfterAnother}<br>";
echo "Stat Vari before = {$fredStaticBefore}<br>";
echo "Stat vari after = {$fredStaticAfter}<br>";
echo "Stat vari after another = {$fredStaticAfterAnother}<br>";

首次调用页面后刷新后,代码输出相同:

类变量= =

= 1之后的类变量

类变量接着= 2

之前的统计数字=

= 1后的统计变量

接下来的统计变量= 2

1 个答案:

答案 0 :(得分:0)

您的解释似乎是正确的,但您已经混淆了一个对象的两个实例以及两个请求的脚本。

或者说简单:

静态变量就像一个全局变量。

但正如其他人已经提到的:除非你明确地将它存储在会话,文件或数据库之类的地方,否则请求之间(刷新时)之间不会存在任何内容。