2012-05-02 9 views
1

私は(それはそれと同じように、主なアプリケーションではPHP 5.2.xで開発中ですが)現在のアプリケーションをPHP 5.4.x(Apache 5.4.2とPHP 5.4を使用)に適合させようとしています.1私たちのテストサーバーで)、私は現在のアプリケーションでテストサーバーで実行するときにいくつかの警告を見つけています。定数定義はPHP 5.4.xではこれ以上有効ではありませんか?

例えば

...私たちは言語を検出し、イディオマスのような定義を含む言語ファイルをロードする機能を備えた当社の現在のアプリケーションで定数の定義を使用している/ LANGの.php、というLANGは2桁の言語表現(es、us、deなど)です。各言語ファイル内

はこの1つのようないくつかの定義があります:だから

define("IDIOMA_AF", "Afrikaans"); 
define("IDIOMA_AR", "العربية"); 
define("IDIOMA_BG", "български език"); 

、我々は出力に与えられた翻訳されたテキストをしたいとき、私たちはこれを行う:

<?php echo IDIOMA_AF; ?> 

メッセージPHP 5.4。アプリケーションがスローされたときに1つの出力が表示されます。

Notice: Constant IDIOMA_AF already defined in D:\apache\htdocs\aplicacion\modulos\base\idiomas\es.php on line 34 

同じ問題?私はこれらの問題を解決する方法を知ることが有用であるため、あなたの経験について少し知りたいと思います。私たちはgettextを使ってより良いシステムを実装しようと考えています(これはもっと整理され、扱いやすいと思いますが...)。ただし、アップグレードする前に現在のアプリケーションをしばらく実行したいと思っています。

+1

何を得るのですか? ['get_defined_constants()'](http://php.net/manual/en/function.get-defined-constants.php)を使用すると、そこに 'IDIOMA_AF'定数がありますか? –

+1

言語ファイルの条件付き読み込みのようなサウンドは、その値(おそらく別の言語ファイル)を定義したものをすでに読み込んでいるか、または同じ言語ファイルを複数回含んでいるため動作しません。 [debug_backtrace()](http://php.net/manual/en/function.debug-backtrace.php)を実行する価値があります – Anigel

+0

ええ、基本モジュールがあるので重複したエントリを作成していました。最初の場所(ログイン時)と後でロードする2次モジュール(必要に応じて)、いくつかの定義を共有しました:) –

答えて

2

つまり、定数を2回定義しようとしています(これは許可されていません)。

if (!defined('IDIOMA_AF')) define('IDIOMA_AF', 'Afrikaans'); 

またはトレースを、そしてあなたが二回とにかく定数を定義している理由は、修正:

あなたは試みることができます。

機能get_defined_constants()は、このような問題のための便利なデバッグツールです。

それとも、単にこれらのエラーを無視:あなたは `のvar_dump(IDIOMA_AF)を行う場合は`最初の行にする前に、あなたがここに置かerror_reporting(E_ALL & ~E_NOTICE);

+1

これは、我々がいくつかのエントリーを実際に複製していたときに通知を取り除くのを助けました(私たちの基本モジュールはすでにいくつかの定義を読み込んでいて、アプリケーションのサブモジュールによって読み込まれていました)。 間違いなく、gettextは私たちの翻訳ニーズに対する「本当の」答えですが、これはトリックでした:) –

関連する問題