config.php各ページに含まれている があります。構成では、次のような配列を作成します。
$config = array();
$config['site_name'] = 'Site Name';
$config['base_path'] = '/home/docs/public_html/';
$config['libraries_path'] = $config['base_path'] . '/libraries';
//etc...
次にfunction.php、ほぼすべてのページに含まれており、そこにglobal $configアクセスするために使用する必要があります-これは私が取り除きたいものです!
$configを使用せずにコードの他の部分にアクセスするにはどうすればよいglobalですか?
なぜ私の例で使用すべきではないのか、誰か説明できglobalますか? 口調が悪いと言う人もいれば、安全ではないという人もいますか?
編集1:
どこでどのように使用するかの例:
function conversion($Exec, $Param = array(), $Log = '') {
global $config;
$cmd = $config['phppath'] . ' ' . $config['base_path'] . '/' . $Exec;
foreach ($Param as $s)
{
$cmd .= ' ' . $s;
}
}
編集2:
Vilxで提案されているように、これらすべてをクラスに入れるのはクールですが、この場合、構成keyをvalueデータベースから抽出する次のループとどのように結び付けますか。
配列を割り当てるという考えを単純化しすぎました$config。以下に例を示します。
$sql = "SELECT * from settings";
$rsc = $db->Execute($sql);
if ( $rsc ) {
while(!$rsc->EOF) {
$field = $rsc->fields['setting_options'];
$config[$field] = $rsc->fields['setting_values'];
@$rsc->MoveNext();
}
}
編集3:
varsその上、 configで設定されている機能から他の機能にアクセスする必要があり、それらのいくつかは次のとおり$dbです$language。
それらをクラスに入れれば、本当に何かが解決しますか? 実際に使用するglobalと何が変わるの?
編集4:
PHP global in functionsを読んだところ、Gordonが を使用すべきではない理由を非常にうまく説明していますglobal。global私はすべてに同意しますが、変数を再割り当てするために私の場合は使用しません<-- WTF!!。しかし、関数からデータベースにアクセスする必要があるglobal $db場合は、この場合の問題はどこにありますか? を使用せずに、他の方法でこれを行うにはどうすればよいですglobalか?
編集5:
同じ PHP global in functions でdecezeは次のように述べています。
しかし、ここでは基本的な「INIT」について話しています。私は基本的に設定defineしますが、使用しますvars-まあ、それは技術的に間違っています。しかし、あなたの関数は何にも依存していません-しかし、$db覚えておくことができる1つのvarの名前ですか? を使用するのは本当にグローバルな必要性$dbです。ここで DEPENDENCY はどこにあり、それ以外の場合はどのように使用するのですか?
PSここで、私たちは2つの異なる心の対立に直面していると思いました。たとえば、私のもの(オブジェクト指向プログラミングをまだよく理解していない)と、OOPの教祖(私の現在の観点から)と呼ばれる可能性のある人たちです。 -私にとって彼らにとって明白に見えることは、新しい質問を引き起こします。それが、この質問が何度も繰り返されている理由だと思います。個人的には、最終的にはより明確になりましたが、まだ明確にしなければならないことがあります。