8

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

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

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

echo "Blah blah blah{$EL}";

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

4

11 に答える 11

7

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

 include 'header.php';

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

編集:申し訳ありませんが、関数内では機能しません...今、私はあなたの問題を理解しています。

編集 #2: わかりました、ヘッダーでの元のアドバイスに従いますが、変数ではなくdefine()を使用してください。それらは、含まれた後に関数内で機能します。

于 2008-08-16T05:23:09.677 に答える
3

定数の仕事のように聞こえます。関数define()を参照してください。

于 2008-08-16T08:44:31.847 に答える
2

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

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

echo '何か'.el; // 行末または前に el を追加するだけです

この助けを願っています

注 < br の後の '\' を削除してください。入力する必要があったためです。そうしないと、回答に br タグが表示されません...

于 2010-12-13T20:03:44.077 に答える
1

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
}
?>

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

于 2008-08-16T11:21:08.037 に答える
0

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

function myFunc()
 {
require 'config.php';
//Variables from config are available now.
 }
于 2008-08-16T09:26:18.017 に答える
0

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

<?php

class SITE {
    public static $el;
}

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

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

Test();

?>

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

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

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

于 2008-09-09T22:59:23.913 に答える
0

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

見る:

それらの 1 つを学ぶために時間を投資すれば、すぐに元が取れます。

于 2008-09-10T09:13:12.783 に答える
-1

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

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

編集あなたの問題については、$GLOBALS[]の使用をお勧めします。詳細については、例 #2を参照してください。

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

于 2008-08-16T05:27:22.260 に答える
-1

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

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

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

require 'config.php'

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

于 2008-08-16T05:34:03.480 に答える