PHPでサイト全体の変数を設定するにはどうすればよいですか?

StackOverflow https://stackoverflow.com/questions/13000

  •  08-06-2019
  •  | 
  •  

質問

でこのようなものを定義したい php:

$EL = "\n<br />\n";

次に、次のように、その変数をサイト全体の「エンドライン」マーカーとして使用します。

echo "Blah blah blah{$EL}";

$EL を一度 (1 つのファイルのみで) 定義し、サイトのすべてのページに含めるにはどうすればよいですか? ない (奇妙なことに逆方向に) を使用してそれを参照する必要があります global $EL; すべてのページ関数にステートメントが含まれていますか?

役に立ちましたか?

解決

ほとんどの PHP サイトには、サイトのすべてのページにファイル (私はこれをヘッダーと呼びます) が必要です。コードの最初の行をヘッダー ファイルに配置する場合は、それをすべてのページに次のように含めます。

 include 'header.php';

global キーワードなどを使用する必要はなく、作成したコードの 2 行目は機能するはずです。

編集:ああ、申し訳ありませんが、関数内では機能しません...今、あなたの問題が分かりました。

編集#2:OK、ヘッダーに関する私の最初のアドバイスを受け入れますが、 定義する() 変数ではなく。これらはインクルードされた後、関数内で動作します。

他のヒント

定数の仕事のようですね。機能を見る 定義する().

PHP5を使用していますか?__autoload() 関数を定義し、いくつかの定数を含むクラスを使用すると、必要な場所でそれらを呼び出すことができます。これに関して唯一厄介なのは、次のように少し長いものを入力しなければならないことです。

MyClass::MY_CONST

利点は、新しい行の処理方法を変更する場合、1 か所だけ変更すればよいことです。

もちろん、考えられるマイナスの点は、追加の関数 (__autoload()) を含めて呼び出し、その関数を実行し (クラスを参照するとき)、別のファイル (クラス ファイル) をロードすることです。それは価値よりもオーバーヘッドが大きい可能性があります。

提案があるとすれば、タグのエコーを必要とするこの種のエコーを避けることです( <br />)。もう少しテンプレート風の設定ができれば、明示的に入力しなくても nl を処理できるようになります。だから代わりに

echo "Blah Blah Blah\n<br />\n";

試す:

<?php
if($condition) {
?>
<p>Blah blah blah
<br />
</p>
<?php
}
?>

クラスを呼び出したり、関数内だけでなく関数外に変数を含めたりすることは、実行する必要のない多くの作業であるように思えます。可能であれば、そのような状況は回避するのが最善です。

これを行う define ('el','\n\<\br/>\n'); el.phpとして保存します

次に、使用したいファイルを含めることができます。

echo 'something'.el;// 行末または行頭に el を追加するだけであることに注意してください

これがお役に立てば幸いです

注: < br の後の「\」を削除してください。削除しないと、回答に br タグが表示されません。

@svec はい、これは可能です。関数内にもファイルを含める必要があります。私のソフトウェアのほとんどはこのように動作します。

function myFunc()
 {
require 'config.php';
//Variables from config are available now.
 }

もう 1 つのオプションは、パブリック静的プロパティを持つオブジェクトを使用することです。以前は $GLOBALS を使用していましたが、ほとんどのエディターは $GLOBALS をオートコンプリートしません。また、インスタンス化されていないクラスはどこでも利用できます (そのクラスを使用することを PHP に指示しなくてもどこでもインスタンス化できるため)。例:

<?php

class SITE {
    public static $el;
}

SITE::$el = "\n<br />\n";

function Test() {
    echo SITE::$el;
}

Test();

?>

これは出力されます <br />

また、定数には配列を含めることができないのに対し、プロパティ内に任意のタイプの値 (配列、文字列、整数など) を入れることができるため、定数よりも扱いが簡単です。

これは、上のユーザーによって提案されました。 PhpEd フォーラム.

svec の場合は、PHP フレームワークを使用します。どれでもいいです - そこにはたくさんあります。これが正しい方法です。フレームワークを使用すると、アプリケーションの単一のエントリポイントがあるため、サイト全体の変数を定義するのは簡単で自然です。また、ヘッダーファイルを含めることや、すべてのページにユーザーがログインしているかどうかを確認する必要はありません。まともなフレームワークがあなたのためにそれを行います。

見る:

それらのうちの 1 つを学ぶために時間を投資すれば、それはすぐに返ってきます。

IIRC の一般的な解決策は、宣言を含むプレーン ファイルであり、すべてのソース ファイルに含めます。constants.inc.php'。そこでは、すべてのファイルにインポートされるアプリケーション全体の変数を多数定義できます。

ただし、 include ディレクティブを指定する必要があります。 使用する単一のソース ファイル。この技術を使用して複数の言語のローカリゼーションを提供するプロジェクトもいくつか見ました。私は gettext の方法を好みますが、平均的なユーザーにとっては、このバリアントの方が扱いやすいかもしれません。

編集 あなたの問題に対して、私はの使用をお勧めします $グローバル[], 、 見る 例2 詳細については。

それでも当てはまらない場合は、PHP5 オブジェクトを掘り下げて、必要な静的定数を提供する静的シングルトンを作成してみます (http://www.developer.com/lang/php/article.php/3345121)

データがユーザー固有の場合はセッションが最善の策であり、それ以外の場合は config ファイルを使用するだけです。config.php:

<?php
$EL = "\n<br />\n";
?>

次に、各ページに追加します

require 'config.php'

そのページから $EL にアクセスできるようになります。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top