2013-08-15 4 views
15

タイトルが述べるように、私はこれを明確にしたいと思います。私はこのトピックについていくつかの記事と投稿を読んでいますが、何かが私をクリックしていません。私は追加するつもりです私は少しPHPの新しいです。 OK、ここに私が理解したいことがあります。Php define()ネームスペース内の定数クラフト

namespace Information; 
define('ROOT_URL', 'information/'); 
define('OFFERS_URL', ROOT_URL . 'offers/'); 

namespace Products; 
define('ROOT_URL', 'products/'); 
define('OFFERS_URL', ROOT_URL . 'offers/'); 

は私が(「NAME」、)を定義し使用していますなぜ定数は、すなわち、構築可能であること基本定数(s)は、それはだから、定数を構築したい;.

私の質問では、ROOT_URLの値は、その '名前空間に対する相対的な値ですか?このような;

$info_offers_url = \Information\OFFERS_URL; ('information/offers/') 
$prod_offers_url = \Products\OFFERS_URL;  ('products/offers/') 

または();を定義します。 ROOT_URLをグローバルなスコープに配置する必要があります。これを行うべきではありませんか?より良い方法がありますか?

すべてのサポートは大変ありがとうございます。

+4

namualからの引用: 'スーパーグローバルと同様に、定数の範囲は、そんなにありがとう、彼らは –

+0

@マークベイカーを名前空間されていませんglobal.'れます。あなたの答えを答えにして、あなたの目を覚ますにはどうすればいいですか? –

答えて

20

名前空間内で定数を定義する場合は、名前空間内からdefine()を呼び出す場合でも、define()の呼び出しで名前空間を指定する必要があります。私が試した以下の例は、それをはっきりさせるでしょう。

次のコードは、グローバル名前空間(つまり "\ CONSTANTA")の定数 "CONSTANTA"を定義します。あなたが名前空間の定数を定義したい場合は

<?php 
namespace mynamespace; 
define('CONSTANTA', 'Hello A!'); 
?> 

あなたが名前空間の定数を使用すると、かなり簡単ですManual

+8

価値があるのは、実際のマニュアルからではなく、ユーザーのコメントからです。 –

+0

名前空間の定数: 'use const Foo \ BAR'をインポートすることもできます。 _const_に注意してください。 – Bell

+0

それらをインポートできることは、名前にバックスラッシュを使用するのではなく、実際の名前空間であることも証明します。 – Bell

9

から撮影

<?php 
namespace test; 
define('test\HELLO', 'Hello world!'); 
define(__NAMESPACE__ . '\GOODBYE', 'Goodbye cruel world!'); 
?> 

のように定義することができますが、constキーワードを使用する必要があります。

次に、あなたが直接バックスラッシュ\を使用して定数を呼び出すことができます。

namespace Dummy\MyTime; 
const MONTHS = 12; 
const WEEKS = 52; 
const DAYS = 365; 


namespace Test; 
use Dummy\MyTime; 

$daysPerWeek = MyTime\DAYS/MyTime\WEEKS; 
$daysPerMonth = MyTime\DAYS/MyTime\MONTHS; 

echo "Days per week: $daysPerWeek\n"; // 7.0192307692308 
echo "Days per month: $daysPerMonth\n"; // 30.416666666667 

私は、これはdefineを使用するよりもきれいだと思います。

namespace Information; 
const ROOT_URL = 'information/'; 
const OFFERS_URL = ROOT_URL . 'offers/'; 

namespace Products; 
const ROOT_URL = 'products/'; 
const OFFERS_URL = ROOT_URL . 'offers/'; 

namespace Test; 
$info_offers_url = \Information\OFFERS_URL; // information/offers/ 
$prod_offers_url = \Products\OFFERS_URL; // products/offers/ 

私は、これはあなたを助けることを願っています:

は> = 5.6あなたが PHPを使用している場合、あなたが望むもののみ機能します(定数のスカラ式を割り当てる)、と述べました。

出典:http://php.net/manual/en/migration56.new-features.php

+1

この答えは 'define()'とは直接関係しませんが、非常に便利です。 – BlitZ

関連する問題