1

私はphpにかなり錆びていて、クラスの使い方を学んでいるところですが、今、何か奇妙なことが起こっています。これがphpの仕組みかもしれません。よくわかりません。

クラス(Project)に静的な配列があり、ページが読み込まれるとすぐに配列を埋めて(index.phpに)、データを入力するときにそこからプロジェクトを使用します。ただし、他のphpファイル(ajax_show_timesheet.phpなど)でも同じプロジェクト配列を使用したいと思います。

別の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 に答える