32

タイトルが示すように、私はこれを明確にしたいと思います。このトピックに関するいくつかの記事や投稿を読んだことがありますが、何かが気に入らないのです。私はPHPに少し慣れていないことを付け加えます。OK、これが私が理解したいことです。

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

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

定数を構築可能にしたい、つまり基本定数から定数を構築したいので、define('NAME', value );を使用しています。

私の質問は、 ROOT_URL の値はその名前空間に相対的な値をもたらすでしょうか? このような;

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

または define(); を行います。ROOT_URL をグローバル スコープに配置するので、これを行うべきではありませんか? より良い習慣はありますか?

すべてのヘルプは非常に高く評価されています。

4

3 に答える 3

16

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

そうは言っても、必要なもの (スカラー式を定数に割り当てる) は、PHP >= 5.6を使用している場合にのみ機能します。

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/

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

ソース: http://php.net/manual/en/migration56.new-features.php

于 2016-03-15T09:50:09.353 に答える