1

我对 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

我什么也没回来。

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

4

1 回答 1

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);
}

因为这表明您不能以您现在的方式初始化静态变量。似乎您正在尝试像单例一样使用 Project,但这不是 php 单例的工作方式。

于 2012-06-05T20:23:33.357 回答