如何在函数内部处理php静态类变量

时间:2017-09-06 01:24:36

标签: php arrays oop

我正在编写一个简单的逻辑用于测试目的。当调用一个动作方法时,我抓住作为参数传递给动作的id并将其存储在一个关联数组中。我写了一个静态函数来处理逻辑。我还有第二个问题,我想检查id是否已作为关联数组中的键存在,如果是,我想增加计数器。但我可以为这个问题打开另一个问题。这个问题的目的是静态变量不起作用。

class UsersController extends Controller

 static $users= Array();

 public function show( $id)
   { 
      $this::stats($id);
   }

 private static function stats($id)
   {

      if(  array_key_exists("{$id}", UsersController::$users))
       {
           UsersController::$users["{$id}"] += 1;
       }
       else
       {
           UsersController::$users["{$id}"] = 1;
      }
   print_r(UsersController::$users);
   }

每次访问不同的用户www.example.com/users/2或www.example.com/users/1。 print_r语句显示数组中只存在一个元素。我错过了一些oop原则。我在C#中编写了类似的代码,它的工作方式与预期一致。

2 个答案:

答案 0 :(得分:0)

您不会错过任何OOP原则,您错过了PHP流程的标准实现。通常,Web服务器被设计为执行php脚本然后执行死亡。当你访问两个不同的页面时,内存中没有持久性。

你能实现PHP继续使用相同的内存吗?当然可以,但我知道没有这样的网络服务器实现。

大多数人使用会话(服务器端)或cookie(客户端)来保持多个请求中的持久数据。

答案 1 :(得分:-1)

您需要将数据存储在永久存储中以通过多个请求保留。

每个PHP请求都是一个全新的执行。因此,如果它是您的C#代码,就好像您退出C#程序,再次启动它并与第二个用户一起访问。

经常使用PHP的永久存储源包括将其存储在文件,数据库等中的选项。

如果此数据的存储可以是每个用户,如果丢失则不是很大,您可以将其存储在会话中(存储在服务器上,通常存储在文件中)或cookie(存储在客户端的浏览器中)。这些存储介质都不是非常可靠,并且被认为是暂时的。

还有更多临时形式的数据存储,它们包括Memcache(基于独立内存的存储介质),redis(同上),APCu(可以作为模块构建到PHP中)等等。