1

index.php" " " file.php" と " fns.php"の 3 つのファイルがあるとします。

最初の例 (動作します):

index.php :

<?php
  $var = "Variable Data";
  include "file.php";
?>

ファイル.php:

<?php
  var_dump($var);  #Output will be : string(13) "Variable Data"
?>

2番目の例(機能しません):

index.php :

<?php
  include "fns.php";
  $var = "Variable Data";
  load("file.php");
?>

fns.php :

<?php
  function load($file) { include $file; }
?>

file.php

<?php
  var_dump($var); #Output will be : NULL
?>

のような関数を使用してファイルをインクルードし、load()変数を追加せずに機能させ続けるにはどうすればよいGlobal $var;ですか?

私の解決策:

<?php
  function load($file)
  {
    $argc = func_num_args();
    if($argc>1) for($i=1;$i<$argc;$i++) global ${func_get_arg($i)};

    include $file;
  } 

  #Call :
  load("file.php", "var");
?>
4

2 に答える 2

5

関数内にファイルをインクルードするため、インクルードされたファイルのスコープはその関数のスコープになります。

追加の変数を含めるには、それらを関数に挿入します。

function load($file, $var) { include $file; }

このように、$var利用可能になります。


さらに動的にすることもできます。

function load($file, $args) { extract($args); include($file); }

そして、次のように使用します。

load("path/to/file.php", array("var"=>$var, "otherVar"=>$otherVar));

PHP は、変数を正しいシンボル名 ( $var, $otherVar) に抽出します。

于 2012-06-07T08:31:14.713 に答える
1

関数にファイルをインクルードしようとすると、変数のスコープが機能します。関数loadで変数を設定した場合、それはではありませんNULL

function load($file, $var) {
    include($file);
}
于 2012-06-07T08:34:53.517 に答える