質問

C ++プリプロセッサ #define はまったく異なります。

PHPの define()は、単に変数を作成するのとは異なりますか?

define("SETTING", 0);  
$something = SETTING;

vs

$setting = 0;  
$something = $setting;
役に立ちましたか?

解決

'define'操作自体はかなり遅い-xdebugプロファイラーによって確認されました。

http://t3.dotgnuのベンチマークです。 info / blog / php / my-first-php-extension.html

  • 純粋な「定義」
    380.785フェッチ/秒
    14.2647平均ミリ秒/最初の応答

  • 'hidef'拡張で定義された定数
    930.783フェッチ/秒
    6.30279平均ミリ秒/最初の応答


リンク切れの更新

上記のブログ投稿はインターネットを離れました。引き続き表示できますこちらはWayback Machine経由。別の類似の記事があります。

作成者が参照するライブラリは、こちら(apc_define_constants)にあります。 およびこちら(hidef拡張機能)

他のヒント

一般的に、定数の概念は、プログラム内で constant (おかしいですね?))です。これは、コンパイラー(インタープリター)が" FOOBAR"を置き換えることを意味します。スクリプト全体でFOOBARの値を使用します。

理論と利点については、これだけです-コンパイルすれば。現在、PHPはかなり動的であり、ほとんどの場合、PHPスクリプトは実行ごとにコンパイルされるため、違いに気付くことはありません。 などのバイトコードキャッシュを使用しない限り、定数と変数の速度に顕著な違いは見られないはずです。 APC Zend Optimizer または eAccelerator 。それは理にかなっています。

定数のその他の利点/欠点はすべてここで既に説明されており、 PHPマニュアルに記載されています。

php > $cat='';$f=microtime(1);$s='cowcow45';$i=9000;while ($i--){$cat.='plip'.$s.'cow';}echo microtime(1)-$f."\n";

0.00689506530762

php > $cat='';$f=microtime(1);define('s','cowcow45');$i=9000;while ($i--){$cat.='plip'.s.'cow';}echo microtime(1)-$f."\n";

0.00941896438599

これは同様の結果で再現可能です。定数は変数よりも定義や使用が少し遅いように思えます。

manual

  • 定数の前にドル記号($)はありません;
  • 定数は、単純な割り当てではなく、define()関数を使用してのみ定義できます。
  • 定数は、変数スコープ規則に関係なく、どこでも定義およびアクセスできます。
  • 設定された定数は再定義または未定義にできません。そして
  • 定数はスカラー値にのみ評価できます。

私にとっての主な利点は、グローバルスコープです。私は確かにそれらの効率について心配しません-変更できないグローバルなスカラー値が必要なときはいつでもそれらを使用してください。

非効率的です。 (そして、私はここですべての仮定をphp.netからの1つのコメントに基づいていますが、私はまだ自分でベンチマークを行っていません。)

定数の呼び出しには、変数の呼び出しの2倍の時間がかかります。

定数の存在を確認するには、誤検知のために2ミリ秒と12ミリ秒かかります!

これは、PHPのオンラインドキュメントの定義ページのコメントからのベンチマークです。

  

defined()を使用する前に、次のベンチマークを確認してください。

true                                       0.65ms
$true                                      0.69ms (1)
$config['true']                            0.87ms
TRUE_CONST                                 1.28ms (2)
true                                       0.65ms
defined('TRUE_CONST')                      2.06ms (3)
defined('UNDEF_CONST')                    12.34ms (4)
isset($config['def_key'])                  0.91ms (5)
isset($config['undef_key'])                0.79ms
isset($empty_hash[$good_key])              0.78ms
isset($small_hash[$good_key])              0.86ms
isset($big_hash[$good_key])                0.89ms
isset($small_hash[$bad_key])               0.78ms
isset($big_hash[$bad_key])                 0.80ms
  

PHPバージョン5.2.6、Apache 2.0、Windows XP

     

各ステートメントは1000回実行されましたが、   1000回の呼び出しでは、エンドユーザーが髪を引き裂くことはありません。   if(true)と比較すると、いくつかの興味深い結果がスローされます:

     

1)if($ true)は事実上同一2)if(TRUE_CONST)はほぼ同じ   2倍遅い-置換はコンパイル時に行われないと思います   時間(これを再確認する必要がありました!)3)defined()は3倍遅い   定数が存在する場合4)defined()は19倍遅い   定数は存在しません! 5)isset()は非常に効率的です   あなたがそれを投げる(アレイを実装している人にとって素晴らしいニュース   駆動型イベントシステム-私!)

     

if(defined( 'DEBUG'))...を避けたい場合があります...

tfconsulting dot com dot auのtris + phpから2009年3月26日06:40

http://us.php.net/manual/en/ function.defined.php#89886

定義は単純な静的な意味です。つまり、変数は動的な意味ですが、プロセス中に値を自由に操作できるため、実行中に値を変更することはできません。

主な違い:

  • 定義は定数、変数は変数です
  • 異なるスコープ/可視性

速度テストを実行すると、変数を設定してダンプするよりも、設定およびダンプされる定数の方がはるかに速く実行されます。

効率についてはわかりませんが、varを作成するだけではありません:

  • これは定数です。この設定を再定義または再割り当てすることはできません。
  • 定義が見つからない場合、$ somethingが" SETTING"に設定されます。これは、たとえばi18nで便利です。翻訳が欠落している場合(つまり、対応する定義がローカリゼーションファイルである場合)、大文字の大きな単語、かなり目に見える...
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top