【问题标题】:Static class variables in multiple php files多个php文件中的静态类变量
【发布时间】:2012-06-05 20:17:19
【问题描述】:

我对 php 很生疏,正在学习如何使用类,现在发生了一些奇怪的事情,这可能就是 php 的工作原理——我不确定。

我有一个对类(项目)来说是静态的数组,我想做的是在页面加载后立即填充数组(在 index.php 中),然后使用其中的项目填充数据。但我也想在其他php文件(比如我的ajax_show_timesheet.php)中使用SAME项目数组。

当我尝试从另一个 php 文件访问数组时:

Project::$projectArray[key];

数组为空。如果我打电话给

Project::createProjects();

再次从另一个 php 文件中重新填充。

那么为什么我不能从不同的 .php 文件中访问同一个静态数组呢?

这是我正在做的事情:

类项目:

class Project
{

  public static $projectArray;

  public $projectID;

  public function __construct($projID=0){
    $this->projectID = $projID;

  }

  public static function createProjects(){

    $projectResult = mysql_query("SELECT * FROM $tblProjects");

    $numRows = mysql_numrows($projectResult); 
    $i = 0;

    while($i < $numRows){
      //for each project in the DB, add one to the array
      Project::$projectArray[mysql_result($projectResult, $i, "projectID")] 
             = new Project(mysql_result($projectResult, $i, "projectID"));

      $i++;
    }
  }
}

在 index.php 我填写初始化项目:

Project::createProjects();

在 ajax_show_timesheet.php 我做了类似的事情:

echo Project::$projectArray[key]->projectID

而我什么也得不到。

任何关于如何在多个文件中使用静态变量的帮助都会很棒!

【问题讨论】:

  • 您是否在同一个请求中访问这两个文件?或者,如果您不通过 h​​ttp 访问它们,您如何称呼它们?
  • @NathanielFord 我不太确定你的意思(再次,新手)。当我调用 ajax_show_timesheet 时,它是通过 ajax,所以我猜....这是一个不同的请求?
  • 所以,AJAX 将创建一个新的请求/响应。这由 Web 容器单独处理。容器会将其视为原始进程(这样两个客户端就不会非法使用相同的数据)。我认为有一些方法可以缓存某些数据,但这不是一个好主意。

标签: php class variables static


【解决方案1】:

当你这样做时会发生什么?

public static function createProjects(){

    $projectResult = mysql_query("SELECT * FROM $tblProjects");

    $numRows = mysql_numrows($projectResult); 
    $i = 0;

    while($i < $numRows){
        //for each project in the DB, add one to the array
        Project::$projectArray[mysql_result($projectResult, $i, "projectID")] 
              = new Project(mysql_result($projectResult, $i, "projectID"));

        $i++;
    }
    var_dump(Project::$projectArray);
}

因为this suggests 你不能以你现在的方式初始化你的静态变量。看起来您正在尝试像单例一样使用 Project,但这不是 php 单例的工作方式。

【讨论】:

  • 如果我这样做,它只会打印出数组的内容。一大堆信息
  • 在 google 上阅读了关于单例的信息后,似乎它们是我想要使用的(我想要一个可以被任何 .php 文件使用的数组,所以我只需要查询项目数据库一次)。但在我看来,我的做法就像一个单身人士?顺便说一句,这是糟糕的设计吗?
  • 所以,理论上它就像一个单例,只是你不在同一个请求/响应中。单例是每个进程,而不是每个程序。在两个进程中运行单例的程序不共享该信息。您可能正在寻找类似 memcached 的东西,它可以让您存储并快速检索它,而不是再次查询数据库。
  • 那东西对我来说太恶心了。我想每当我进行 ajax 调用时我都会调用 Project::createProjects() ......我没有制作一个庞大的系统或任何东西,所以它不会减慢很多
  • 确实如此。除非您打算将其扩展到数千个或更多的客户端,否则它可能不会对服务器产生巨大的影响。
猜你喜欢
  • 2010-10-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-10-04
  • 2011-03-20
  • 1970-01-01
  • 2011-07-27
  • 2014-02-03
相关资源
最近更新 更多