3

これに関連する投稿がいくつかありますが、私が苦労している状況に近いものは何も見られません。

私は、元の設計者がいくつかの興味深い設計方法を採用した、かなり大きなコードベースを継承しました。定義されているクラスのメソッドを呼び出そうとしています。クラスファイル自体には、いくつかのグローバル変数が設定されています。このメソッドを関数から呼び出します。また、このファイルを含めました。メソッドを実行すると、グローバル変数は定義されなくなります。下記参照:

私のファイル:

<?php //myScript.php

echo("Calling foo(): ");
foo();

function foo() {
   include '../../php/class.bar.php';
   $bar = new bar();
   $bar->doSomething();
}
?>

../../php/class.bar.php:

$GLOBAL_ARRAY_ONE[0] = 'Here I am';
$GLOBAL_ARRAY_ONE[1] = 'JT';

class bar {
   public $itsFoo = array();
   public $itsBar = array();

   public function doSomething() {
      global $GLOBAL_ARRAY_ONE;
      $this->itsFoo[0] = $GLOBAL_ARRAY_ONE[0];
      $this->itsFoo[1] = $GLOBAL_ARRAY_ONE[1];

      var_dump($this->itsFoo);
   }
}

したがって、「myScript.php」を実行すると、出力は次のようになります。calling foo(): NULL

私は個人的にそのようなスクリプトでグローバル配列を宣言しませんが、それらにアクセスできない理由はわかりません。

何か案は?ありがとう!

4

1 に答える 1

2

include関数内のファイルであるためGLOBALS、そこに定義することはできません(どちらも a class)。あなたがおそらくやりたいことは、include class.bar.php(の)外への移動ですfoo()

<?php //myScript.php

include '../../php/class.bar.php';

echo("Calling foo(): ");
foo();

function foo() {   
   $bar = new bar();
   $bar->doSomething();
}
?>
于 2012-09-12T22:53:07.183 に答える