对不起,如果这是一个非常基本而且很长的问题,但我是新手。
在尝试计算常规类变量和静态类变量之间的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
答案 0 :(得分:0)
您的解释似乎是正确的,但您已经混淆了一个对象的两个实例以及两个请求的脚本。
或者说简单:
但正如其他人已经提到的:除非你明确地将它存储在会话,文件或数据库之类的地方,否则请求之间(刷新时)之间不会存在任何内容。