2

各ページの最初に、SESSION などを開始するファイルを含めますsession.php。このファイルsession.phpには、関数を含むファイルを含めます。これを と呼びましょう。function1.php関数を で使用できるようにする必要があるためですsession.php

ただし、メイン ページの後半で、 にfunction2.php設定された変数にアクセスする必要があるものも含めるsession.phpので、さらに に含めようとしsession.phpましたfunction2.php

問題は function1 が複数回宣言されるためエラーが発生することです...

致命的なエラー: function1() を再宣言できません (以前は ... で宣言されていました)

では、このためのよりエレガントでクリーンな (より) ソリューションは何でしょうか? どうすれば解決できますか?

基本的に、以前にメインページに含まれていた関数内の変数にアクセスする必要があります...

4

3 に答える 3

6

session.php から必要な変数はオブジェクトの一部ではないため、これはパブリック変数とプライベート変数の問題ではありません。これらは、(おそらく) グローバル スコープで宣言した単なる変数であり、function2.php でアクセスする必要があります。

最初: function2.php の内容は... 関数ですか? そうでない場合、そのファイルは、それが含まれていたスクリプト内の場所と同じスコープを持つ必要があり、問題なくアクセスできるはずです。

session.php 変数にアクセスする必要がある場所が関数またはオブジェクトである場合、いくつかの選択肢があります。

0. ファイルを再インクルードする

これがあなたが今やろうとしていることです。session.php にも関数定義が含まれており、一度関数を作成すると再定義できないため、失敗します。回避策として、変数定義を別のファイルに移動し、それを function2 に含めることができます。これは不器用ですが、単純です。

1. 関数を呼び出すときに変数を関数に渡します。

  • 長所: シンプルで柔軟。
  • 短所:関数の呼び出しが苦痛になります。それぞれを個別に渡すのではなく、すべてをパラメーターの単一の配列に入れることで、これを簡素化できます。

2.使用global

global $var1, $var2 ...function2 の先頭に、スクリプトの他の場所で使用された変数をインポートするコマンドを追加するだけです。

これも非常に単純ですが、グローバル変数を使用することは、多くのプログラマーにだらしないと見なされ、他の場所でデバッグが困難なエラーが発生する可能性があります。

3. 定数を使用する

session.php で、共有する変数を定数として定義します。例: define("PASSWORD", "coolpassword123")。定数は、関数やオブジェクトなどの内部から参照でき、宣言後に変更することはできません。例: echo(PASSWORD)(引用符なし、$ なし)。

通常、定数は、1) 値を変更する必要がなく、2) 単純な数値または文字列値に固執できる限り、この種の問題に対する最良の解決策です。定数を配列、オブジェクトなどにすることはできません。

于 2012-07-06T21:26:02.813 に答える
2

include_once代わりに試してくださいinclude

http://php.net/manual/en/function.include-once.php

編集:完全な例

main.php

<?php
include_once 'session.php';
include 'function2.php';

session.php

<?php
include_once 'function1.php';
function1('session.php');

function1.php

<?php
function function1($calledFrom)
{
    echo 'function1 called from: ' . $calledFrom . PHP_EOL;
}

function2.php

include_once 'function1.php';
function1('function2.php');

これらをすべて同じフォルダに入れて実行します

php main.php

出力は次のとおりです。

function1 の呼び出し元: session.php

function1 の呼び出し元: function2.php

于 2012-07-06T21:14:07.350 に答える
0

まず、含まれるファイル全体で関数に同じ名前を使用していないことを確認してください。

その後、問題の変数を関数のパラメーターとして渡すだけです。

function1($variable1);

次に、関数でそれを取得します

function function1($getvar){
    //do something with the passed variable $getvar
}
于 2012-07-06T21:30:21.977 に答える