PHP 定数を使用するときに注意する必要があるいくつかの問題

伊谢尔伦
リリース: 2023-03-11 22:34:01
オリジナル
1495 人が閲覧しました

定数 には英数字とアンダースコアが含まれており、定数名として数字を使用できます。 定数名のすべての文字は大文字にする必要があります。クラス定数は、クラスのメンバーとして const を介して定義する必要があります。グローバル定数に定義を使用することは強く推奨されません

PHP の定数はなぜ慎重に使用する必要があるのでしょうか?

Zend Framework のドキュメントには次のように書かれています: 定数には英数字とアンダースコアが含まれており、定数名として数字が許可されます。 定数名のすべての文字は大文字にする必要があります。クラス定数は、「const」を介してクラスのメンバーとして定義する必要があり、「define」で定義されたグローバル定数の使用は強く推奨されません。

PHP の公式フレームワークとして、なぜこのような要件があるのでしょうか?

一緒に分析しましょう。

1. 定義では予期しないエラーが発生しやすいです

PHP 定数 は、定義後に変更したり、再度割り当てたりすることはできません。しかし、再度割り当てられた場合はどうなるでしょうか?

<?php
 define(&#39;C&#39;, 12345);
 define(&#39;C&#39;, 123);
?>
ログイン後にコピー

このコードは通知エラーを報告します。その結果、定義する前に、他の人が同じ名前の定数を定義した場合、その中に何が入っているかが実際には分からない可能性があります。

2. PHP 定数が定義されているかどうかを確認するにはどうすればよいですか?判定方法が間違って書きやすい

<?php
 define(&#39;C&#39;, 12345);
 // 错误方法1,经常犯
 if (isset(C)){……}
 // 错误方法2,经常犯
 if (defined(C)){……}
 // 正确方法
 if (defined(&#39;C&#39;)){……}
?>
ログイン後にコピー

3. 実行効率が低い

<?php
  define(&#39;FORUM_THEME&#39;,$forum[&#39;theme&#39;]); 
  $this->display(&#39;/&#39;.FORUM_THEME.&#39;@Public:login&#39;); 
  // 系统会从整个执行流程中查找FORUM_THEME
?>
ログイン後にコピー

PHPは定数を処理する際に複数の検索を行う必要があるため、効率が低いです。

要約: PHP 定数の問題は、PHP の定数の処理方法が緩すぎることです。これを厳密にできれば、多くの問題は回避されるでしょう。実際のプロセスでは、変数を使用できる場合は定数を使用しないでください。変数を使用した方が効率的で便利です。

そのため、定数またはクラス変数を使用する必要がある場合は、次のメソッドを使用できます:

<?php
 class foo {
  const WEBSITE = "www.zhuyinghao.com";
  protected $_forum_theme;
  function name()
  {
    echo WEBSITE;
    $this->_forum_theme = $forum[&#39;theme&#39;];
  }
  function displace() 
  {
    echo $this->_forum_theme;
  }
 }
?>
ログイン後にコピー

クラス名と関数名が同じ場合に何が起こるか

PHP 4では、コンストラクタークラスのコンストラクタ名はクラス名と同じである必要があり、親クラスのコンストラクタはサブクラス内で自動的に実行されません。サブクラスで親クラスのコンストラクターを実行するには、次のようなステートメントを実行する必要があります:

$this->[親クラスのコンストラクター名 ()]

PHP 5.0 以降では、construct()はコンストラクターとして一律に使用されますが、バージョン 4.0 のコンストラクターの定義規則と互換性があります。 4.0 コンストラクターとconstruct() 関数の両方が定義されている場合は、construct() 関数が優先されます。

改行の /r/n を置き換えるには PHP EOL を使用します

改行はプログラムを作成するときによく使用されます。改行には PHP の組み込み定数 PHP_EOL を使用します。

小さな改行には、プラットフォームごとに実装が異なります。 UNIX の世界では改行を置き換えるために n が使用されますが、その違いを反映するために Windows では rn が使用されます。さらに興味深いのは、Mac では r が使用されることです。したがって、unix シリーズでは n が使用され、windows シリーズでは rn が使用され、mac では r が使用されます。

そのため、システムはプラットフォームのシステムに応じて異なる改行に変換します。ブラウザで行を折り返す場合は、PHP_EOL 変数を使用して行を折り返す必要があります

以上がPHP 定数を使用するときに注意する必要があるいくつかの問題の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート