0

奇妙なリクエストです。構成マネージャー関数を使用して構成ファイルを要求しているので、何百ものセットアップではなく、必要な変数のみをロードします。

問題は、ファイルの1つにクラスと変数が設定されているため、それらは含まれていますが、メインスクリプトからアクセスできないことです。

ファイルをロードする関数は次のとおりです。

    function load($OPT){
        if (file_exists(ABSPATH. "includes/config/".$OPT.".config.php")){
            require_once(ABSPATH. "includes/config/".$OPT.".config.php");
        } else {
            echo "Missing configuration script ".$OPT.", application has been halted.";
            exit();
        }
    }

私もクラスでこれをやろうとしましたが、同じ問題に遭遇しました

class configManager {
    function load($OPT){
        if (file_exists(ABSPATH. "includes/config/".$OPT.".config.php")){
            require_once(ABSPATH. "includes/config/".$OPT.".config.php");
        } else {
            echo "Missing configuration script ".$OPT.", application has been halted.";
            exit();
        }
    }
}

含まれるファイルには、次のようなコードが含まれます

define('COMPANYNAME', 'NAME');
define("IPADDRESS", $_SERVER['REMOTE_ADDR']);   // IP Address of accessing user
require_once (ABSPATH . 'includes/classes/mysql.class.php'); // class to manage the database
$DB = new sqlClass; 
var_dump($DB);  

これで、上記のコードのvar_dumpは期待どおりに出力されますが、以下に示すようなvar_dumpを実行すると、nullに戻ります。

require_once (ABSPATH . 'includes/functions/_configmanager.php'); // Class to manage the configuration of the site.
loadconfig("global");
var_dump($DB);

誰かがこれを達成する方法について何かアイデアがありますか?

4

2 に答える 2

1

この構成の解決策は好きではありません。ただし、解決策があります。hakra で述べたように、スコープは関数内にあります。を使用globalして、変数を外部から見えるようにすることができます。

例:

global $DB;
require_once('configManager.php');
loadcfg('global');

global.cfg.php:

global $DB;
$DB = mysql_connect(...);

これにより$DB、ローカル変数ではなくグローバル変数として処理されるようになります。

しかし!グローバル変数を作成しないようにしてください。別の解決策を考えてください。たとえば、オブジェクトの作成全体ではなく、環境ベースのパラメーターのみを設定します。他の場所で行う場合は、を回避しglobalsて、コードをより読みやすくシンプルにすることができます。

于 2012-10-01T11:55:21.490 に答える
0

変数のスコープは、変数が定義されているコンテキストです。ほとんどの場合、すべての PHP 変数のスコープは 1 つだけです。この単一のスコープは、含まれているファイルと必要なファイルにもまたがっています。

于 2012-10-01T10:28:16.537 に答える