0
$test = test;

class getFile{
    public function __construct($fileName){
    require $fileName;
  } 
}

$get = new getFile('file.php');

したがって、file.phpには、echo$testが含まれます。

私がこれをクラスの外で呼ぶとしたら、例えば

'test.php'が必要です; $ testは問題なく取得されますが、クラス内での呼び出しには明らかなスコープの問題があります。関数内で必要なファイルに変数へのアクセスを許可するにはどうすればよいですか?

編集: - - - - - - - - - - - -

このファイルにアクセスしたい複数の変数があります(これらはすべてページに基づいて動的であるため、常に設定されるとは限らないため、x変数とy変数を追加することはできません)各変数をグローバルにアクセス可能として宣言するのではなく、方法はありませんクラスで必要なファイルを許可するには、そうでないかのようにこれらの変数にアクセスしますか?

フィードバックありがとうございます。残念ながら、私が望むことは不可能に思えますが、ファイルにアクセスするために必要な最も重要な変数をグローバルとして登録する回避策を作成するように促されました。

4

4 に答える 4

1
public function __construct($fileName) {
    global $test;
    require $fileName;
} 

動作します

于 2011-10-19T19:56:53.560 に答える
0

おそらく、次のように、クラス内でグローバル変数を宣言できます。

$text = 'test';

class getFile {
   public function __construct($fileName) {
      global $test;
      require $fileName;
   }
}

$get = new getFile('file.php');
于 2011-10-19T19:58:22.113 に答える
0

グローバル スコープで宣言された PHP 変数は、関数またはメソッド内で自動的に使用可能になるわけではありません。グローバルであることを明示的に宣言する必要があります。

file.php:

    <?php
    global $test
    echo $test

また

public function __construct($filename) {
    global $test;
    require $filename;
}

どちらも問題を解決します。file.phpスクリプトはグローバルに見えますが、その中に関数定義がないため、オブジェクトのメソッドのスコープにまだバインドされており、$ __construct()test グローバルはありません。

于 2011-10-19T19:58:45.550 に答える
0

あなたのコメントに応えて、私はあなたが好きかもしれない回避策を持っています

class getFile{
    public $files = Array();
    public function __construct($fileName){
        $this->files[] = $fileName;
    } 
}

$get = new getFile('file.php');

foreach($get->files as $file) require($file);

それとも、静的メソッドを作成できますか?

class getFile{
    public static $files = Array();
    public static function get($fileName){
        self::$files[] = $fileName;
    } 
}

getFile::get('file1.php');
getFile::get('file2.php');
getFile::get('file3.php');

foreach(getFile::$files as $file) require($file);
于 2011-10-19T20:07:42.730 に答える