{"id":3685,"date":"2025-04-11T18:00:33","date_gmt":"2025-04-11T09:00:33","guid":{"rendered":"https:\/\/dexall.co.jp\/articles\/?p=3685"},"modified":"2025-04-11T18:03:02","modified_gmt":"2025-04-11T09:03:02","slug":"php%e3%81%ae%e5%ae%9a%e6%95%b0%e5%ae%8c%e5%85%a8%e3%82%ac%e3%82%a4%e3%83%89%ef%bc%9aconst%e3%81%a8define%e3%81%ae%e9%81%95%e3%81%84%e3%81%8b%e3%82%89%e5%ae%9f%e8%b7%b5%e7%9a%84%e3%81%aa%e6%b4%bb","status":"publish","type":"post","link":"https:\/\/dexall.co.jp\/articles\/?p=3685","title":{"rendered":"PHP\u306e\u5b9a\u6570\u5b8c\u5168\u30ac\u30a4\u30c9\uff1aconst\u3068define\u306e\u9055\u3044\u304b\u3089\u5b9f\u8df5\u7684\u306a\u6d3b\u7528\u6cd5\u307e\u3067\u30102025\u5e74\u6700\u65b0\u3011"},"content":{"rendered":"\n<div class=\"toc\"><br \/>\n<b>Warning<\/b>:  Undefined array key \"is_admin\" in <b>\/home\/xs392991\/dexall.co.jp\/public_html\/articles\/wp-content\/themes\/sango-theme\/library\/gutenberg\/dist\/classes\/Toc.php<\/b> on line <b>116<\/b><br \/>\n<br \/>\n<b>Warning<\/b>:  Undefined array key \"is_category_top\" in <b>\/home\/xs392991\/dexall.co.jp\/public_html\/articles\/wp-content\/themes\/sango-theme\/library\/gutenberg\/dist\/classes\/Toc.php<\/b> on line <b>121<\/b><br \/>\n<br \/>\n<b>Warning<\/b>:  Undefined array key \"is_top\" in <b>\/home\/xs392991\/dexall.co.jp\/public_html\/articles\/wp-content\/themes\/sango-theme\/library\/gutenberg\/dist\/classes\/Toc.php<\/b> on line <b>128<\/b><br \/>\n    <div id=\"toc_container\" class=\"sgb-toc--bullets js-smooth-scroll\" data-dialog-title=\"\u76ee\u6b21\">\n      <p class=\"toc_title\">\u76ee\u6b21 <\/p>\n      <ul class=\"toc_list\">  <li class=\"first\">    <a href=\"#i-0\">PHP\u306e\u5b9a\u6570\u3068\u306f\uff1f\u57fa\u672c\u6982\u5ff5\u3068\u91cd\u8981\u6027<\/a>    <ul class=\"menu_level_1\">      <li class=\"first\">        <a href=\"#i-1\">\u5b9a\u6570\u3068\u5909\u6570\u306e\u6839\u672c\u7684\u306a\u9055\u3044<\/a>      <\/li>      <li>        <a href=\"#i-2\">PHP\u306b\u304a\u3051\u308b\u5b9a\u6570\u306e\u5f79\u5272<\/a>      <\/li>      <li class=\"last\">        <a href=\"#i-3\">\u5b9a\u6570\u3092\u4f7f\u3046\u3079\u304d\u72b6\u6cc1\u3068\u5f97\u3089\u308c\u308b\u30e1\u30ea\u30c3\u30c8<\/a>      <\/li>    <\/ul>  <\/li>  <li>    <a href=\"#i-4\">PHP\u3067\u5b9a\u6570\u3092\u5b9a\u7fa9\u3059\u308b2\u3064\u306e\u65b9\u6cd5\uff1aconst\u3068define<\/a>    <ul class=\"menu_level_1\">      <li class=\"first\">        <a href=\"#i-5\">define()\u95a2\u6570\u306b\u3088\u308b\u5b9a\u7fa9\u65b9\u6cd5\u3068\u7279\u5fb4<\/a>      <\/li>      <li>        <a href=\"#i-6\">const\u30ad\u30fc\u30ef\u30fc\u30c9\u306b\u3088\u308b\u5b9a\u7fa9\u65b9\u6cd5\u3068\u7279\u5fb4<\/a>      <\/li>      <li class=\"last\">        <a href=\"#i-7\">const\u3068define\u306e\u6c7a\u5b9a\u7684\u306a\u9055\u3044\u3068\u4f7f\u3044\u5206\u3051<\/a>      <\/li>    <\/ul>  <\/li>  <li>    <a href=\"#i-8\">PHP\u306e\u5b9a\u6570\u306e\u30b9\u30b3\u30fc\u30d7\u3092\u5b8c\u5168\u7406\u89e3\u3059\u308b<\/a>    <ul class=\"menu_level_1\">      <li class=\"first\">        <a href=\"#i-9\">\u30b0\u30ed\u30fc\u30d0\u30eb\u5b9a\u6570\u306e\u30b9\u30b3\u30fc\u30d7\u3068\u53ef\u8996\u6027<\/a>      <\/li>      <li>        <a href=\"#i-10\">\u30af\u30e9\u30b9\u5b9a\u6570\u306e\u7279\u6027\u3068\u6d3b\u7528\u6cd5<\/a>      <\/li>      <li class=\"last\">        <a href=\"#i-11\">\u540d\u524d\u7a7a\u9593\u5185\u3067\u306e\u5b9a\u6570\u306e\u7ba1\u7406\u65b9\u6cd5<\/a>      <\/li>    <\/ul>  <\/li>  <li>    <a href=\"#i-12\">PHP\u5b9a\u6570\u306e\u547d\u540d\u898f\u5247\u3068\u30d9\u30b9\u30c8\u30d7\u30e9\u30af\u30c6\u30a3\u30b9<\/a>    <ul class=\"menu_level_1\">      <li class=\"first\">        <a href=\"#i-13\">\u30d7\u30ed\u304c\u5b9f\u8df5\u3059\u308b\u5b9a\u6570\u306e\u547d\u540d\u898f\u5247<\/a>      <\/li>      <li>        <a href=\"#i-14\">\u5b9a\u6570\u306b\u683c\u7d0d\u3059\u3079\u304d\u5024\u306e\u7a2e\u985e<\/a>      <\/li>      <li class=\"last\">        <a href=\"#i-15\">\u8907\u6570\u74b0\u5883\u3067\u306e\u5b9a\u6570\u7ba1\u7406\u30c6\u30af\u30cb\u30c3\u30af<\/a>      <\/li>    <\/ul>  <\/li>  <li>    <a href=\"#i-16\">PHP\u5b9a\u6570\u306e\u9ad8\u5ea6\u306a\u6d3b\u7528\u30c6\u30af\u30cb\u30c3\u30af<\/a>    <ul class=\"menu_level_1\">      <li class=\"first\">        <a href=\"#i-17\">PHP 5.6\u4ee5\u964d\u3067\u306e\u914d\u5217\u5b9a\u6570\u306e\u6d3b\u7528\u6cd5<\/a>      <\/li>      <li>        <a href=\"#i-18\">\u9b54\u8853\u5b9a\u6570(__CLASS__\u306a\u3069)\u306e\u52b9\u679c\u7684\u306a\u4f7f\u3044\u65b9<\/a>      <\/li>      <li class=\"last\">        <a href=\"#i-19\">\u30af\u30e9\u30b9\u7d99\u627f\u306b\u304a\u3051\u308b\u5b9a\u6570\u306e\u632f\u308b\u821e\u3044<\/a>      <\/li>    <\/ul>  <\/li>  <li>    <a href=\"#i-20\">\u5b9f\u969b\u306e\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u3067\u5f79\u7acb\u3064PHP\u5b9a\u6570\u306e\u6d3b\u7528\u4f8b<\/a>    <ul class=\"menu_level_1\">      <li class=\"first\">        <a href=\"#i-21\">\u8a2d\u5b9a\u60c5\u5831\u306e\u4e00\u5143\u7ba1\u7406\u306b\u3088\u308b\u4fdd\u5b88\u6027\u306e\u5411\u4e0a<\/a>      <\/li>      <li>        <a href=\"#i-22\">\u30bb\u30ad\u30e5\u30ea\u30c6\u30a3\u5f37\u5316\u306e\u305f\u3081\u306e\u8a8d\u8a3c\u60c5\u5831\u7ba1\u7406<\/a>      <\/li>      <li class=\"last\">        <a href=\"#i-23\">\u591a\u8a00\u8a9e\u5bfe\u5fdc\u30b5\u30a4\u30c8\u3067\u306e\u5b9a\u6570\u6d3b\u7528\u6cd5<\/a>      <\/li>    <\/ul>  <\/li>  <li class=\"last\">    <a href=\"#i-24\">PHP\u5b9a\u6570\u306e\u30d1\u30d5\u30a9\u30fc\u30de\u30f3\u30b9\u3068\u6700\u9069\u5316\u306e\u79d8\u8a23<\/a>    <ul class=\"menu_level_1\">      <li class=\"first\">        <a href=\"#i-25\">\u5b9a\u6570\u3068\u5909\u6570\u306e\u30d1\u30d5\u30a9\u30fc\u30de\u30f3\u30b9\u6bd4\u8f03\u691c\u8a3c<\/a>      <\/li>      <li>        <a href=\"#i-26\">\u30e1\u30e2\u30ea\u4f7f\u7528\u91cf\u3092\u6700\u9069\u5316\u3059\u308b\u30c6\u30af\u30cb\u30c3\u30af<\/a>      <\/li>      <li>        <a href=\"#i-27\">\u30ad\u30e3\u30c3\u30b7\u30e5\u3068\u7d44\u307f\u5408\u308f\u305b\u305f\u9ad8\u901f\u5316\u624b\u6cd5<\/a>      <\/li>      <li class=\"last\">        <a href=\"#i-28\">\u30d1\u30d5\u30a9\u30fc\u30de\u30f3\u30b9\u6700\u9069\u5316\u306e\u305f\u3081\u306e\u5b9f\u8df5\u7684\u306a\u30d2\u30f3\u30c8<\/a>      <\/li>    <\/ul>  <\/li><\/ul>\n      <a href=\"#\" class=\"sgb-toc-button js-toc-button\" rel=\"nofollow\" data-open-dialog=\"true\"><i class=\"fa fa-list\"><\/i><span class=\"sgb-toc-button__text\">\u76ee\u6b21\u3078<\/span><\/a>\n    <\/div><\/div><h2 class=\"wp-block-heading\" id=\"i-0\">PHP\u306e\u5b9a\u6570\u3068\u306f\uff1f\u57fa\u672c\u6982\u5ff5\u3068\u91cd\u8981\u6027<\/h2>\n\n\n\n<p>PHP\u306e\u30d7\u30ed\u30b0\u30e9\u30df\u30f3\u30b0\u306b\u304a\u3044\u3066\u3001\u30c7\u30fc\u30bf\u3092\u6271\u3046\u65b9\u6cd5\u306f\u5927\u304d\u304f\u5206\u3051\u3066\u300c\u5909\u6570\u300d\u3068\u300c\u5b9a\u6570\u300d\u306e2\u3064\u304c\u3042\u308a\u307e\u3059\u3002\u7279\u306b\u5b9a\u6570\u306f\u3001\u30d7\u30ed\u30b0\u30e9\u30e0\u5185\u3067\u5024\u304c\u5909\u66f4\u3055\u308c\u308b\u3053\u3068\u306a\u304f\u4e00\u8cab\u3057\u3066\u4f7f\u7528\u3055\u308c\u308b\u5024\u3092\u8868\u73fe\u3059\u308b\u305f\u3081\u306e\u91cd\u8981\u306a\u6982\u5ff5\u3067\u3059\u3002\u672c\u8a18\u4e8b\u3067\u306f\u3001PHP\u306e\u5b9a\u6570\u3001\u7279\u306b <code>const<\/code> \u30ad\u30fc\u30ef\u30fc\u30c9\u3092\u4e2d\u5fc3\u306b\u8a73\u7d30\u306b\u89e3\u8aac\u3057\u3066\u3044\u304d\u307e\u3059\u3002<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-1\">\u5b9a\u6570\u3068\u5909\u6570\u306e\u6839\u672c\u7684\u306a\u9055\u3044<\/h3>\n\n\n\n<p>PHP\u306b\u304a\u3051\u308b\u5b9a\u6570\u3068\u5909\u6570\u306b\u306f\u3001\u6839\u672c\u7684\u304b\u3064\u91cd\u8981\u306a\u9055\u3044\u304c\u3044\u304f\u3064\u304b\u3042\u308a\u307e\u3059\u3002<\/p>\n\n\n\n<p><strong>1. \u5024\u306e\u518d\u4ee3\u5165\u306e\u53ef\u5426<\/strong><\/p>\n\n\n\n<p>\u5909\u6570\u306f\u3001\u30d7\u30ed\u30b0\u30e9\u30e0\u306e\u5b9f\u884c\u4e2d\u306b\u4f55\u5ea6\u3067\u3082\u5024\u3092\u5909\u66f4\u3067\u304d\u307e\u3059\u3002\u4e00\u65b9\u3001\u5b9a\u6570\u306f\u4e00\u5ea6\u5b9a\u7fa9\u3059\u308b\u3068\u3001\u305d\u306e\u5f8c\u306f\u5024\u3092\u5909\u66f4\u3067\u304d\u307e\u305b\u3093\u3002<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">\/\/ \u5909\u6570\u306e\u4f8b\n$userName = \"Dexall\";\n$userName = \"Dexall Inc.\"; \/\/ \u518d\u4ee3\u5165\u53ef\u80fd\n\n\/\/ \u5b9a\u6570\u306e\u4f8b\nconst COMPANY_NAME = \"Dexall\";\n\/\/ const COMPANY_NAME = \"Dexall Inc.\"; \/\/ \u30a8\u30e9\u30fc\uff1a\u65e2\u306b\u5b9a\u7fa9\u3055\u308c\u305f\u5b9a\u6570\u306b\u518d\u4ee3\u5165\u306f\u3067\u304d\u306a\u3044\n<\/pre>\n\n\n\n<p><strong>2. \u547d\u540d\u898f\u5247\u3068\u8868\u8a18<\/strong><\/p>\n\n\n\n<p>\u5909\u6570\u306f\u901a\u5e38\u3001\u5c0f\u6587\u5b57\u307e\u305f\u306f camelCase \u3067\u8a18\u8ff0\u3057\u3001\u5148\u982d\u306b <code>$<\/code> \u8a18\u53f7\u3092\u4ed8\u3051\u307e\u3059\u3002\u4e00\u65b9\u3001\u5b9a\u6570\u306f\u6163\u7fd2\u7684\u306b\u5927\u6587\u5b57\u3068\u30a2\u30f3\u30c0\u30fc\u30b9\u30b3\u30a2\u3092\u4f7f\u7528\u3057\u3066\u8a18\u8ff0\u3057\u3001<code>$<\/code> \u8a18\u53f7\u306f\u4ed8\u3051\u307e\u305b\u3093\u3002<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">\/\/ \u5909\u6570\u306e\u4e00\u822c\u7684\u306a\u547d\u540d\u898f\u5247\n$userName = \"\u5c71\u7530\u592a\u90ce\";\n$userAge = 30;\n\n\/\/ \u5b9a\u6570\u306e\u4e00\u822c\u7684\u306a\u547d\u540d\u898f\u5247\nconst USER_ROLE_ADMIN = 1;\nconst MAX_LOGIN_ATTEMPTS = 5;\n<\/pre>\n\n\n\n<p><strong>3. \u5b9a\u7fa9\u306e\u30bf\u30a4\u30df\u30f3\u30b0<\/strong><\/p>\n\n\n\n<p>\u5909\u6570\u306f\u5b9f\u884c\u6642\uff08runtime\uff09\u306b\u5b9a\u7fa9\u30fb\u5909\u66f4\u3067\u304d\u307e\u3059\u304c\u3001<code>const<\/code> \u30ad\u30fc\u30ef\u30fc\u30c9\u3067\u5b9a\u7fa9\u3059\u308b\u5b9a\u6570\u306f\u30b3\u30f3\u30d1\u30a4\u30eb\u6642\uff08compile time\uff09\u306b\u8a55\u4fa1\u3055\u308c\u307e\u3059\u3002\u3053\u308c\u306b\u3088\u308a\u3001const\u3067\u5b9a\u7fa9\u3055\u308c\u305f\u5b9a\u6570\u306b\u306f\u5909\u6570\u3084\u95a2\u6570\u306e\u623b\u308a\u5024\u3092\u76f4\u63a5\u4ee3\u5165\u3067\u304d\u306a\u3044\u3068\u3044\u3046\u5236\u7d04\u304c\u3042\u308a\u307e\u3059\u3002<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">\/\/ \u5909\u6570\u306f\u52d5\u7684\u306a\u5024\u3092\u4ee3\u5165\u53ef\u80fd\n$currentTime = time();\n\n\/\/ const\u3067\u306f\u52d5\u7684\u306a\u5024\u3092\u76f4\u63a5\u4ee3\u5165\u3067\u304d\u306a\u3044\n\/\/ const CURRENT_TIME = time(); \/\/ \u30a8\u30e9\u30fc\n\n\/\/ define()\u3067\u306f\u52d5\u7684\u306a\u5024\u3092\u4ee3\u5165\u53ef\u80fd\ndefine('CURRENT_TIME', time());\n<\/pre>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-2\">PHP\u306b\u304a\u3051\u308b\u5b9a\u6570\u306e\u5f79\u5272<\/h3>\n\n\n\n<p>PHP\u306b\u304a\u3051\u308b\u5b9a\u6570\u306f\u3001\u4ee5\u4e0b\u306e\u3088\u3046\u306a\u91cd\u8981\u306a\u5f79\u5272\u3092\u62c5\u3063\u3066\u3044\u307e\u3059\u3002<\/p>\n\n\n\n<p><strong>1. \u30b3\u30fc\u30c9\u306e\u53ef\u8aad\u6027\u3068\u4fdd\u5b88\u6027\u306e\u5411\u4e0a<\/strong><\/p>\n\n\n\n<p>\u30d7\u30ed\u30b0\u30e9\u30e0\u5168\u4f53\u3067\u4f7f\u7528\u3055\u308c\u308b\u56fa\u5b9a\u5024\u3092\u5b9a\u6570\u3068\u3057\u3066\u5b9a\u7fa9\u3059\u308b\u3053\u3068\u3067\u3001\u300c\u30de\u30b8\u30c3\u30af\u30ca\u30f3\u30d0\u30fc\u300d\u3084\u300c\u30de\u30b8\u30c3\u30af\u30b9\u30c8\u30ea\u30f3\u30b0\u300d\u3092\u6392\u9664\u3057\u3001\u30b3\u30fc\u30c9\u306e\u53ef\u8aad\u6027\u3068\u610f\u56f3\u306e\u660e\u78ba\u5316\u304c\u56f3\u308c\u307e\u3059\u3002<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">\/\/ \u60aa\u3044\u4f8b\uff08\u30de\u30b8\u30c3\u30af\u30ca\u30f3\u30d0\u30fc\u306e\u4f7f\u7528\uff09\nif ($user-&gt;status === 1) {\n    \/\/ \u7ba1\u7406\u8005\u5411\u3051\u51e6\u7406\n}\n\n\/\/ \u826f\u3044\u4f8b\uff08\u5b9a\u6570\u306e\u4f7f\u7528\uff09\nconst STATUS_ADMIN = 1;\nif ($user-&gt;status === STATUS_ADMIN) {\n    \/\/ \u7ba1\u7406\u8005\u5411\u3051\u51e6\u7406\n}\n<\/pre>\n\n\n\n<p><strong>2. \u5024\u306e\u4e00\u8cab\u6027\u306e\u4fdd\u8a3c<\/strong><\/p>\n\n\n\n<p>\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u5168\u4f53\u3067\u7d71\u4e00\u3059\u3079\u304d\u5024\u3092\u5b9a\u6570\u3068\u3057\u3066\u5b9a\u7fa9\u3059\u308b\u3053\u3068\u3067\u3001\u5024\u306e\u4e00\u8cab\u6027\u3092\u4fdd\u8a3c\u3057\u3001\u4eba\u7684\u30df\u30b9\u3092\u9632\u3050\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">\/\/ \u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u63a5\u7d9a\u60c5\u5831\u306a\u3069\u3001\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u5168\u4f53\u3067\u7d71\u4e00\u3059\u3079\u304d\u5024\nconst DB_HOST = 'localhost';\nconst DB_USER = 'root';\nconst DB_PASS = 'password';\nconst DB_NAME = 'myapp';\n<\/pre>\n\n\n\n<p><strong>3. \u540d\u524d\u7a7a\u9593\u3068\u30b9\u30b3\u30fc\u30d7\u306e\u7ba1\u7406<\/strong><\/p>\n\n\n\n<p>PHP 5.3\u4ee5\u964d\u3067\u306f\u3001\u540d\u524d\u7a7a\u9593\u5185\u3067\u306e\u5b9a\u6570\u5b9a\u7fa9\u3084\u30af\u30e9\u30b9\u5b9a\u6570\u306e\u4f7f\u7528\u306b\u3088\u308a\u3001\u3088\u308a\u7d44\u7e54\u5316\u3055\u308c\u305f\u30b3\u30fc\u30c9\u69cb\u9020\u3092\u5b9f\u73fe\u3067\u304d\u307e\u3059\u3002<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">namespace App\\Config;\n\n\/\/ \u540d\u524d\u7a7a\u9593\u5185\u3067\u306e\u5b9a\u6570\u5b9a\u7fa9\nconst APP_VERSION = '1.0.0';\n\nclass Database {\n    \/\/ \u30af\u30e9\u30b9\u5b9a\u6570\n    const CONNECTION_TIMEOUT = 30;\n}\n\n\/\/ \u5225\u306e\u30d5\u30a1\u30a4\u30eb\u304b\u3089\u53c2\u7167\u3059\u308b\u5834\u5408\necho \\App\\Config\\APP_VERSION; \/\/ 1.0.0\necho \\App\\Config\\Database::CONNECTION_TIMEOUT; \/\/ 30\n<\/pre>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-3\">\u5b9a\u6570\u3092\u4f7f\u3046\u3079\u304d\u72b6\u6cc1\u3068\u5f97\u3089\u308c\u308b\u30e1\u30ea\u30c3\u30c8<\/h3>\n\n\n\n<p>PHP\u306e\u958b\u767a\u306b\u304a\u3044\u3066\u3001\u4ee5\u4e0b\u306e\u3088\u3046\u306a\u72b6\u6cc1\u3067\u306f\u5b9a\u6570\u306e\u4f7f\u7528\u304c\u7279\u306b\u52b9\u679c\u7684\u3067\u3059\u3002<\/p>\n\n\n\n<p><strong>1. \u8a2d\u5b9a\u5024\u3084\u74b0\u5883\u60c5\u5831\u306e\u7ba1\u7406<\/strong><\/p>\n\n\n\n<p>\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u306e\u8a2d\u5b9a\u5024\u3084\u74b0\u5883\u60c5\u5831\u3092\u5b9a\u6570\u3068\u3057\u3066\u7ba1\u7406\u3059\u308b\u3053\u3068\u3067\u3001\u30b3\u30fc\u30c9\u5168\u4f53\u3067\u306e\u4e00\u8cab\u6027\u3092\u4fdd\u3061\u3064\u3064\u3001\u5c06\u6765\u7684\u306a\u5909\u66f4\u3082\u5bb9\u6613\u306b\u306a\u308a\u307e\u3059\u3002<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">\/\/ \u74b0\u5883\u306b\u5fdc\u3058\u3066\u7570\u306a\u308b\u8a2d\u5b9a\u5024\u3092\u7ba1\u7406\nconst ENVIRONMENT = 'production';\nconst DEBUG_MODE = false;\nconst LOG_PATH = '\/var\/log\/app\/';\nconst CACHE_TIMEOUT = 3600; \/\/ 1\u6642\u9593\uff08\u79d2\u5358\u4f4d\uff09\n<\/pre>\n\n\n\n<p><strong>2. \u5217\u6319\u578b\uff08Enum\uff09\u306e\u4ee3\u66ff\u3068\u3057\u3066<\/strong><\/p>\n\n\n\n<p>PHP 8.1\u3088\u308a\u524d\u3067\u306f\u3001\u672c\u683c\u7684\u306a\u5217\u6319\u578b\u304c\u306a\u304b\u3063\u305f\u305f\u3081\u3001\u5b9a\u6570\u3092\u4f7f\u7528\u3057\u3066\u5217\u6319\u578b\u306e\u3088\u3046\u306a\u632f\u308b\u821e\u3044\u3092\u5b9f\u73fe\u3057\u3066\u3044\u307e\u3057\u305f\u3002<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">\/\/ \u30e6\u30fc\u30b6\u30fc\u30ed\u30fc\u30eb\u3092\u8868\u3059\u5b9a\u6570\u7fa4\nclass UserRole {\n    const GUEST = 0;\n    const MEMBER = 1;\n    const EDITOR = 2;\n    const ADMIN = 3;\n    \n    \/\/ \u6709\u52b9\u306a\u30ed\u30fc\u30eb\u304b\u691c\u8a3c\u3059\u308b\u30e1\u30bd\u30c3\u30c9\n    public static function isValidRole($role) {\n        return in_array($role, [\n            self::GUEST, self::MEMBER, self::EDITOR, self::ADMIN\n        ]);\n    }\n}\n\n\/\/ \u4f7f\u7528\u4f8b\nif (UserRole::isValidRole($user-&gt;role)) {\n    \/\/ \u51e6\u7406\u7d99\u7d9a\n}\n<\/pre>\n\n\n\n<p><strong>3. \u8a08\u7b97\u3084\u6587\u5b57\u5217\u51e6\u7406\u306e\u6700\u9069\u5316<\/strong><\/p>\n\n\n\n<p>\u983b\u7e41\u306b\u4f7f\u7528\u3055\u308c\u308b\u8a08\u7b97\u7d50\u679c\u3084\u9577\u3044\u6587\u5b57\u5217\u306a\u3069\u3092\u5b9a\u6570\u3068\u3057\u3066\u5b9a\u7fa9\u3059\u308b\u3053\u3068\u3067\u3001\u30d1\u30d5\u30a9\u30fc\u30de\u30f3\u30b9\u306e\u5411\u4e0a\u3084\u30b3\u30fc\u30c9\u306e\u7c21\u6f54\u5316\u304c\u56f3\u308c\u307e\u3059\u3002<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">\/\/ \u8a08\u7b97\u7d50\u679c\u306e\u5b9a\u6570\u5316\nconst TAX_RATE = 0.1;\nconst PI_SQUARED = 3.14159 * 3.14159;\n\n\/\/ \u8907\u96d1\u306a\u6b63\u898f\u8868\u73fe\u306e\u5b9a\u6570\u5316\nconst EMAIL_REGEX = '\/^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\\.[a-zA-Z]{2,}$\/';\n\n\/\/ \u4f7f\u7528\u4f8b\n$price = $basePrice * (1 + TAX_RATE);\nif (preg_match(EMAIL_REGEX, $email)) {\n    \/\/ \u6709\u52b9\u306a\u30e1\u30fc\u30eb\u30a2\u30c9\u30ec\u30b9\n}\n<\/pre>\n\n\n\n<p><strong>PHP\u306e\u5b9a\u6570\u4f7f\u7528\u3067\u3088\u304f\u3042\u308b\u30df\u30b9<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u5b9a\u6570\u3092\u5c0f\u6587\u5b57\u3067\u5b9a\u7fa9\u3059\u308b\uff08\u53ef\u8aad\u6027\u306e\u4f4e\u4e0b\uff09<\/li>\n\n\n\n<li>\u5b9a\u6570\u306e\u5024\u3092\u9014\u4e2d\u3067\u5909\u66f4\u3057\u3088\u3046\u3068\u3059\u308b\uff08\u5b9a\u7fa9\u4e0a\u4e0d\u53ef\u80fd\uff09<\/li>\n\n\n\n<li>PHP 5.6\u4ee5\u524d\u3067\u914d\u5217\u3092 <code>const<\/code> \u3067\u5b9a\u7fa9\u3057\u3088\u3046\u3068\u3059\u308b\uff08PHP 5.6\u4ee5\u964d\u3067\u30b5\u30dd\u30fc\u30c8\uff09<\/li>\n<\/ul>\n\n\n\n<p>\u5b9a\u6570\u306f\u30b7\u30f3\u30d7\u30eb\u306a\u6982\u5ff5\u306a\u304c\u3089\u3001\u9069\u5207\u306b\u6d3b\u7528\u3059\u308b\u3053\u3068\u3067\u30b3\u30fc\u30c9\u306e\u54c1\u8cea\u3068\u30e1\u30f3\u30c6\u30ca\u30f3\u30b9\u6027\u3092\u5927\u304d\u304f\u5411\u4e0a\u3055\u305b\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002\u6b21\u306e\u30bb\u30af\u30b7\u30e7\u30f3\u3067\u306f\u3001PHP\u3067\u5b9a\u6570\u3092\u5b9a\u7fa9\u3059\u308b\u305f\u3081\u306e2\u3064\u306e\u65b9\u6cd5\u3001<code>define()<\/code> \u95a2\u6570\u3068 <code>const<\/code> \u30ad\u30fc\u30ef\u30fc\u30c9\u306b\u3064\u3044\u3066\u8a73\u3057\u304f\u898b\u3066\u3044\u304d\u307e\u3057\u3087\u3046\u3002<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"i-4\">PHP\u3067\u5b9a\u6570\u3092\u5b9a\u7fa9\u3059\u308b2\u3064\u306e\u65b9\u6cd5\uff1aconst\u3068define<\/h2>\n\n\n\n<p>PHP\u3067\u306f\u5b9a\u6570\u3092\u5b9a\u7fa9\u3059\u308b\u305f\u3081\u306e\u65b9\u6cd5\u3068\u3057\u3066\u3001<code>define()<\/code> \u95a2\u6570\u3068 <code>const<\/code> \u30ad\u30fc\u30ef\u30fc\u30c9\u3068\u3044\u30462\u3064\u306e\u7570\u306a\u308b\u30a2\u30d7\u30ed\u30fc\u30c1\u304c\u7528\u610f\u3055\u308c\u3066\u3044\u307e\u3059\u3002\u3069\u3061\u3089\u306e\u65b9\u6cd5\u3082\u4e00\u9577\u4e00\u77ed\u304c\u3042\u308a\u3001\u72b6\u6cc1\u306b\u5fdc\u3058\u3066\u9069\u5207\u306a\u65b9\u6cd5\u3092\u9078\u629e\u3059\u308b\u3053\u3068\u304c\u91cd\u8981\u3067\u3059\u3002\u3053\u306e\u7ae0\u3067\u306f\u3001\u305d\u308c\u305e\u308c\u306e\u5b9a\u7fa9\u65b9\u6cd5\u306e\u7279\u5fb4\u3084\u9055\u3044\u306b\u3064\u3044\u3066\u8a73\u3057\u304f\u89e3\u8aac\u3057\u307e\u3059\u3002<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-5\">define()\u95a2\u6570\u306b\u3088\u308b\u5b9a\u7fa9\u65b9\u6cd5\u3068\u7279\u5fb4<\/h3>\n\n\n\n<p><code>define()<\/code> \u95a2\u6570\u306f\u3001PHP\u306e\u6700\u3082\u4f1d\u7d71\u7684\u306a\u5b9a\u6570\u5b9a\u7fa9\u65b9\u6cd5\u3067\u3059\u3002\u3053\u306e\u95a2\u6570\u306f\u5b9f\u884c\u6642\u306b\u8a55\u4fa1\u3055\u308c\u3001\u30b0\u30ed\u30fc\u30d0\u30eb\u30b9\u30b3\u30fc\u30d7\u3067\u5b9a\u6570\u3092\u5b9a\u7fa9\u3057\u307e\u3059\u3002<\/p>\n\n\n\n<p><strong>\u57fa\u672c\u69cb\u6587\uff1a<\/strong><\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">define(name, value, case_insensitive);\n<\/pre>\n\n\n\n<p><strong>\u30d1\u30e9\u30e1\u30fc\u30bf\uff1a<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><code>name<\/code>: \u5b9a\u6570\u540d\uff08\u6587\u5b57\u5217\uff09<\/li>\n\n\n\n<li><code>value<\/code>: \u5b9a\u6570\u306e\u5024<\/li>\n\n\n\n<li><code>case_insensitive<\/code>: \u5927\u6587\u5b57\u5c0f\u6587\u5b57\u3092\u533a\u5225\u3059\u308b\u304b\u3069\u3046\u304b\uff08PHP 7.3.0\u4ee5\u964d\u306f\u975e\u63a8\u5968\u3001PHP 8.0.0\u3067\u524a\u9664\uff09<\/li>\n<\/ul>\n\n\n\n<p><strong>\u4f7f\u7528\u4f8b\uff1a<\/strong><\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">\/\/ \u57fa\u672c\u7684\u306a\u4f7f\u3044\u65b9\ndefine('DB_HOST', 'localhost');\ndefine('MAX_USERS', 1000);\necho DB_HOST; \/\/ localhost \u3092\u51fa\u529b\n\n\/\/ \u52d5\u7684\u306a\u5024\u3082\u4f7f\u7528\u53ef\u80fd\ndefine('CURRENT_TIME', time());\necho CURRENT_TIME; \/\/ \u73fe\u5728\u306eUNIX\u30bf\u30a4\u30e0\u30b9\u30bf\u30f3\u30d7\u3092\u51fa\u529b\n\n\/\/ PHP 7.0\u4ee5\u964d\u3067\u306f\u914d\u5217\u3082\u5b9a\u7fa9\u53ef\u80fd\ndefine('ALLOWED_STATUS', ['active', 'pending', 'suspended']);\necho ALLOWED_STATUS[0]; \/\/ 'active' \u3092\u51fa\u529b\n<\/pre>\n\n\n\n<p><strong>define()\u306e\u30e1\u30ea\u30c3\u30c8\uff1a<\/strong><\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u52d5\u7684\u306a\u5b9a\u6570\u540d\u304c\u4f7f\u7528\u53ef\u80fd<\/strong><br><code>$prefix = 'APP_';<\/code><br><code>define($prefix . 'VERSION', '1.0.0');<\/code><br><code>echo APP_VERSION; \/\/ 1.0.0 \u3092\u51fa\u529b<\/code><\/li>\n\n\n\n<li><strong>\u6761\u4ef6\u5206\u5c90\u5185\u3067\u3082\u4f7f\u7528\u53ef\u80fd<\/strong><br><code>if (isProductionServer()) {<\/code><br>     <code>define('ENVIRONMENT', 'production');<\/code><br><code>} else {<\/code><br>     <code>define('ENVIRONMENT', 'development');<\/code><br><code>}<\/code><\/li>\n\n\n\n<li><strong>\u5b9f\u884c\u6642\u306e\u5024\u3092\u4f7f\u7528\u53ef\u80fd<\/strong><br><code>$configValue = getConfigFromDatabase();<\/code><br><code>define('APP_CONFIG', $configValue);<\/code><\/li>\n<\/ol>\n\n\n\n<p><strong>define()\u306e\u6ce8\u610f\u70b9\uff1a<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u30b0\u30ed\u30fc\u30d0\u30eb\u30b9\u30b3\u30fc\u30d7\u3067\u306e\u307f\u5b9a\u7fa9\u53ef\u80fd\uff08\u30af\u30e9\u30b9\u5185\u3067\u306f\u4f7f\u7528\u4e0d\u53ef\uff09<\/li>\n\n\n\n<li>\u4e00\u5ea6\u5b9a\u7fa9\u3059\u308b\u3068\u5909\u66f4\u3084\u518d\u5b9a\u7fa9\u306f\u3067\u304d\u306a\u3044<\/li>\n\n\n\n<li>PHP 7.3.0\u4ee5\u964d\u306f\u5927\u6587\u5b57\u5c0f\u6587\u5b57\u3092\u533a\u5225\u3057\u306a\u3044\u5b9a\u7fa9\u65b9\u6cd5\u306f\u975e\u63a8\u5968<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-6\">const\u30ad\u30fc\u30ef\u30fc\u30c9\u306b\u3088\u308b\u5b9a\u7fa9\u65b9\u6cd5\u3068\u7279\u5fb4<\/h3>\n\n\n\n<p><code>const<\/code> \u30ad\u30fc\u30ef\u30fc\u30c9\u306f\u3001PHP 5.3\u4ee5\u964d\u3067\u5c0e\u5165\u3055\u308c\u305f\u3088\u308a\u65b0\u3057\u3044\u5b9a\u6570\u5b9a\u7fa9\u65b9\u6cd5\u3067\u3059\u3002\u30b3\u30f3\u30d1\u30a4\u30eb\u6642\u306b\u8a55\u4fa1\u3055\u308c\u3001\u3088\u308a\u69cb\u9020\u5316\u3055\u308c\u305f\u30b3\u30fc\u30c9\u3092\u5b9f\u73fe\u3057\u307e\u3059\u3002<\/p>\n\n\n\n<p><strong>\u57fa\u672c\u69cb\u6587\uff1a<\/strong><\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">const NAME = value;\n<\/pre>\n\n\n\n<p><strong>\u4f7f\u7528\u4f8b\uff1a<\/strong><\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">\/\/ \u57fa\u672c\u7684\u306a\u4f7f\u3044\u65b9\nconst API_KEY = 'abcd1234';\nconst MAX_FILE_SIZE = 10485760; \/\/ 10MB\necho API_KEY; \/\/ abcd1234 \u3092\u51fa\u529b\n\n\/\/ PHP 5.6\u4ee5\u964d\u3067\u306f\u914d\u5217\u3082\u5b9a\u7fa9\u53ef\u80fd\nconst VALID_EXTENSIONS = ['jpg', 'png', 'gif'];\necho VALID_EXTENSIONS[0]; \/\/ 'jpg' \u3092\u51fa\u529b\n\n\/\/ \u540d\u524d\u7a7a\u9593\u5185\u3067\u306e\u5b9a\u7fa9\nnamespace App\\Config;\nconst APP_NAME = 'MyApplication';\n\/\/ \u5916\u90e8\u304b\u3089\u306f \\App\\Config\\APP_NAME \u3068\u3057\u3066\u30a2\u30af\u30bb\u30b9\n\n\/\/ \u30af\u30e9\u30b9\u5185\u3067\u306e\u5b9a\u7fa9\nclass UserSettings {\n    const STATUS_ACTIVE = 1;\n    const STATUS_INACTIVE = 0;\n    \n    public function isActive($status) {\n        return $status === self::STATUS_ACTIVE;\n    }\n}\n<\/pre>\n\n\n\n<p><strong>const\u306e\u30e1\u30ea\u30c3\u30c8\uff1a<\/strong><\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u30af\u30e9\u30b9\u5185\u3067\u5b9a\u7fa9\u53ef\u80fd<\/strong><br><code>class Payment {<\/code><br>    <code>const TYPE_CREDIT = 'credit';<\/code><br>    <code>const TYPE_DEBIT = 'debit';<\/code><br>    <code>const TYPE_CASH = 'cash';<\/code><br><code>}<\/code><br><code>echo Payment::TYPE_CREDIT; \/\/ 'credit' \u3092\u51fa\u529b<\/code><\/li>\n\n\n\n<li><strong>\u540d\u524d\u7a7a\u9593\u5185\u3067\u5b9a\u7fa9\u53ef\u80fd<\/strong><br><code>namespace App\\Services\\Email;<\/code><br><code>const SENDER = 'noreply@example.com';<\/code><\/li>\n\n\n\n<li><strong>PHP 8.1\u4ee5\u964d\u3067\u306fenum\u3068\u9023\u643a\u53ef\u80fd<\/strong><br><code>enum UserStatus {<\/code><br>    <code>case Active;<\/code><br>    <code>case Pending;<\/code><br>    <code>case Suspended;<\/code><br>    <code>public function label(): string {<\/code><br>        <code>return match($this) {<\/code><br>            <code>self::Active =&gt; '\u6709\u52b9',<\/code><br>            <code>self::Pending =&gt; '\u4fdd\u7559\u4e2d',<\/code><br>            <code>self::Suspended =&gt; '\u505c\u6b62\u4e2d',<\/code><br>        <code>};<\/code><br>    <code>}<\/code><br><code>}<\/code><\/li>\n<\/ol>\n\n\n\n<p><strong>const\u306e\u6ce8\u610f\u70b9\uff1a<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>PHP 5.6\u3088\u308a\u524d\u3067\u306f\u914d\u5217\u3092\u5b9a\u7fa9\u3067\u304d\u306a\u3044<\/li>\n\n\n\n<li>\u52d5\u7684\u306a\u5024\uff08\u95a2\u6570\u306e\u623b\u308a\u5024\u306a\u3069\uff09\u3092\u76f4\u63a5\u4ee3\u5165\u3067\u304d\u306a\u3044<\/li>\n\n\n\n<li>\u6761\u4ef6\u5206\u5c90\u5185\u3067\u306f\u4f7f\u7528\u3067\u304d\u306a\u3044<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-7\">const\u3068define\u306e\u6c7a\u5b9a\u7684\u306a\u9055\u3044\u3068\u4f7f\u3044\u5206\u3051<\/h3>\n\n\n\n<p><code>const<\/code> \u3068 <code>define()<\/code> \u306e\u4e3b\u306a\u9055\u3044\u3092\u4ee5\u4e0b\u306e\u8868\u306b\u307e\u3068\u3081\u307e\u3057\u305f\uff1a<\/p>\n\n\n<div id=\"id-3bf2f1ea-036a-4699-ae3a-d8958ae47de2\">\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>\u7279\u6027<\/th><th>const<\/th><th>define()<\/th><\/tr><\/thead><tbody><tr><td>\u8a55\u4fa1\u30bf\u30a4\u30df\u30f3\u30b0<\/td><td>\u30b3\u30f3\u30d1\u30a4\u30eb\u6642<\/td><td>\u5b9f\u884c\u6642<\/td><\/tr><tr><td>\u30b9\u30b3\u30fc\u30d7<\/td><td>\u30b0\u30ed\u30fc\u30d0\u30eb\u3001\u30af\u30e9\u30b9\u5185\u3001\u540d\u524d\u7a7a\u9593\u5185<\/td><td>\u30b0\u30ed\u30fc\u30d0\u30eb\u306e\u307f<\/td><\/tr><tr><td>\u52d5\u7684\u306a\u540d\u524d<\/td><td>\u4e0d\u53ef<\/td><td>\u53ef\u80fd<\/td><\/tr><tr><td>\u6761\u4ef6\u5206\u5c90\u5185\u3067\u306e\u5b9a\u7fa9<\/td><td>\u4e0d\u53ef<\/td><td>\u53ef\u80fd<\/td><\/tr><tr><td>\u52d5\u7684\u306a\u5024\u306e\u4ee3\u5165<\/td><td>\u4e0d\u53ef\uff08PHP 8.0\u4ee5\u524d\uff09<\/td><td>\u53ef\u80fd<\/td><\/tr><tr><td>\u914d\u5217\u30b5\u30dd\u30fc\u30c8<\/td><td>PHP 5.6\u4ee5\u964d<\/td><td>PHP 7.0\u4ee5\u964d<\/td><\/tr><tr><td>\u5927\u6587\u5b57\u5c0f\u6587\u5b57\u306e\u533a\u5225<\/td><td>\u5e38\u306b\u533a\u5225\u3059\u308b<\/td><td>\u8a2d\u5b9a\u53ef\u80fd\uff08PHP 7.3\u307e\u3067\uff09<\/td><\/tr><tr><td>\u30d1\u30d5\u30a9\u30fc\u30de\u30f3\u30b9<\/td><td>\u308f\u305a\u304b\u306b\u9ad8\u901f<\/td><td>\u308f\u305a\u304b\u306b\u9045\u3044<\/td><\/tr><\/tbody><\/table><\/figure>\n<\/div>\n\n\n<p><strong>\u4f7f\u3044\u5206\u3051\u306e\u30ac\u30a4\u30c9\u30e9\u30a4\u30f3\uff1a<\/strong><\/p>\n\n\n\n<p><strong><code>const<\/code> \u3092\u4f7f\u3046\u3079\u304d\u72b6\u6cc1\uff1a<\/strong><\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>\u30af\u30e9\u30b9\u5185\u3067\u5b9a\u6570\u3092\u5b9a\u7fa9\u3059\u308b\u5834\u5408<br><code>class HttpStatus {<\/code><br>    <code>const OK = 200;<\/code><br>    <code>const NOT_FOUND = 404;<\/code><br>    <code>const SERVER_ERROR = 500;<\/code><br><code>}<\/code><\/li>\n\n\n\n<li>\u540d\u524d\u7a7a\u9593\u5185\u3067\u69cb\u9020\u5316\u3055\u308c\u305f\u5b9a\u6570\u3092\u5b9a\u7fa9\u3059\u308b\u5834\u5408<br><code>namespace App\\Config;<\/code><br><code>const DATABASE = [<\/code><br>    <code>'host' =&gt; 'localhost',<\/code><br>    <code>'name' =&gt; 'myapp',<\/code><br>    <code>'user' =&gt; 'root'<\/code><br><code>];<\/code><\/li>\n\n\n\n<li>\u9759\u7684\u306a\u5024\u3067\u3001\u30b3\u30fc\u30c9\u5168\u4f53\u3067\u4e00\u8cab\u3057\u3066\u4f7f\u7528\u3059\u308b\u5834\u5408<br><code>const PI = 3.14159265359;<\/code><br><code>const TAX_RATE = 0.1;<\/code><\/li>\n<\/ol>\n\n\n\n<p><strong><code>define()<\/code> \u3092\u4f7f\u3046\u3079\u304d\u72b6\u6cc1\uff1a<\/strong><\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>\u52d5\u7684\u306a\u5024\u3092\u5b9a\u6570\u3068\u3057\u3066\u5b9a\u7fa9\u3059\u308b\u5834\u5408<br><code>define('SERVER_LOAD', getServerLoad());<\/code><\/li>\n\n\n\n<li>\u6761\u4ef6\u306b\u57fa\u3065\u3044\u3066\u5b9a\u6570\u3092\u5b9a\u7fa9\u3059\u308b\u5834\u5408<br><code>if ($_SERVER['HTTP_HOST'] === 'localhost') {<\/code><br>    <code>define('IS_DEV', true);<\/code><br><code>} else {<\/code><br>    <code>define('IS_DEV', false);<\/code><br><code>}<\/code><\/li>\n\n\n\n<li>\u5b9a\u6570\u540d\u3092\u52d5\u7684\u306b\u751f\u6210\u3059\u308b\u5fc5\u8981\u304c\u3042\u308b\u5834\u5408<br><code>foreach ($languages as $code =&gt; $name) {<\/code><br>    <code>define('LANG_' . strtoupper($code), $name);<\/code><br><code>}<\/code><\/li>\n<\/ol>\n\n\n\n<p><strong>PHP 8.0\u4ee5\u964d\u3067\u306econst\u306e\u9032\u5316\uff1a<\/strong><\/p>\n\n\n\n<p>PHP 8.0\u4ee5\u964d\u3067\u306f\u3001<code>const<\/code> \u3067\u306e\u5b9a\u7fa9\u306b\u304a\u3044\u3066\u3082\u3001\u4e00\u5b9a\u306e\u6761\u4ef6\u4e0b\u3067\u5f0f\u306e\u8a55\u4fa1\u304c\u53ef\u80fd\u306b\u306a\u308a\u307e\u3057\u305f\u3002\u3053\u308c\u306b\u3088\u308a\u3001\u4ee5\u524d\u306f <code>define()<\/code> \u3092\u4f7f\u308f\u3056\u308b\u3092\u5f97\u306a\u304b\u3063\u305f\u30b1\u30fc\u30b9\u3067\u3082 <code>const<\/code> \u304c\u4f7f\u7528\u3067\u304d\u308b\u3088\u3046\u306b\u306a\u3063\u3066\u3044\u307e\u3059\u3002<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">\/\/ PHP 8.0\u4ee5\u964d\u3067\u53ef\u80fd\u306b\u306a\u3063\u305f\u5b9a\u7fa9\nconst ONE_HOUR = 60 * 60;\nconst HOMEPAGE_URL = SITE_URL . '\/home';\n<\/pre>\n\n\n\n<p>\u305f\u3060\u3057\u3001\u95a2\u6570\u547c\u3073\u51fa\u3057\u306e\u7d50\u679c\u3092\u76f4\u63a5\u4ee3\u5165\u3059\u308b\u306a\u3069\u3001\u5b9f\u884c\u6642\u306b\u3057\u304b\u8a55\u4fa1\u3067\u304d\u306a\u3044\u5024\u306b\u3064\u3044\u3066\u306f\u3001\u5f15\u304d\u7d9a\u304d <code>define()<\/code> \u3092\u4f7f\u7528\u3059\u308b\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059\u3002<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">\/\/ \u3053\u308c\u306fPHP 8.0\u4ee5\u964d\u3067\u3082\u4e0d\u53ef\u80fd\n\/\/ const CURRENT_USER = getCurrentUser(); \/\/ \u30a8\u30e9\u30fc\n\n\/\/ define()\u306a\u3089\u53ef\u80fd\ndefine('CURRENT_USER', getCurrentUser());\n<\/pre>\n\n\n\n<p>PHP\u306e\u5b9a\u6570\u5b9a\u7fa9\u65b9\u6cd5\u3092\u9069\u5207\u306b\u9078\u629e\u3059\u308b\u3053\u3068\u3067\u3001\u3088\u308a\u53ef\u8aad\u6027\u304c\u9ad8\u304f\u3001\u4fdd\u5b88\u6027\u306b\u512a\u308c\u305f\u30b3\u30fc\u30c9\u3092\u5b9f\u73fe\u3067\u304d\u307e\u3059\u3002\u6b21\u7ae0\u3067\u306f\u3001PHP\u306e\u5b9a\u6570\u306e\u30b9\u30b3\u30fc\u30d7\u306b\u3064\u3044\u3066\u3088\u308a\u8a73\u3057\u304f\u89e3\u8aac\u3057\u3066\u3044\u304d\u307e\u3059\u3002<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"i-8\">PHP\u306e\u5b9a\u6570\u306e\u30b9\u30b3\u30fc\u30d7\u3092\u5b8c\u5168\u7406\u89e3\u3059\u308b<\/h2>\n\n\n\n<p>PHP\u306b\u304a\u3051\u308b\u5b9a\u6570\u306e\u30b9\u30b3\u30fc\u30d7\u306f\u3001\u5b9a\u6570\u304c\u3069\u3053\u304b\u3089\u30a2\u30af\u30bb\u30b9\u53ef\u80fd\u304b\u3092\u5b9a\u7fa9\u3059\u308b\u91cd\u8981\u306a\u6982\u5ff5\u3067\u3059\u3002\u9069\u5207\u306a\u30b9\u30b3\u30fc\u30d7\u8a2d\u8a08\u306b\u3088\u3063\u3066\u3001\u30b3\u30fc\u30c9\u306e\u53ef\u8aad\u6027\u3001\u4fdd\u5b88\u6027\u3001\u305d\u3057\u3066\u5b89\u5168\u6027\u3092\u9ad8\u3081\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002\u3053\u306e\u7ae0\u3067\u306f\u3001PHP\u306b\u304a\u3051\u308b\u5b9a\u6570\u306e\u3055\u307e\u3056\u307e\u306a\u30b9\u30b3\u30fc\u30d7\u306b\u3064\u3044\u3066\u8a73\u7d30\u306b\u89e3\u8aac\u3057\u307e\u3059\u3002<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-9\">\u30b0\u30ed\u30fc\u30d0\u30eb\u5b9a\u6570\u306e\u30b9\u30b3\u30fc\u30d7\u3068\u53ef\u8996\u6027<\/h3>\n\n\n\n<p>\u30b0\u30ed\u30fc\u30d0\u30eb\u5b9a\u6570\u306f\u3001\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u5168\u4f53\u304b\u3089\u30a2\u30af\u30bb\u30b9\u53ef\u80fd\u306a\u5b9a\u6570\u3067\u3059\u3002\u4e3b\u306b <code>define()<\/code> \u95a2\u6570\u3092\u4f7f\u7528\u3057\u3066\u5b9a\u7fa9\u3055\u308c\u307e\u3059\u3002<\/p>\n\n\n\n<p><strong>\u5b9a\u7fa9\u65b9\u6cd5\uff1a<\/strong><\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">\/\/ \u30b0\u30ed\u30fc\u30d0\u30eb\u5b9a\u6570\u306e\u5b9a\u7fa9\ndefine('APP_NAME', 'Dexall Application');\nconst VERSION = '1.0.0';\n\n\/\/ \u30d5\u30a1\u30a4\u30eb\u306e\u9014\u4e2d\u3067\u3082\u5b9a\u7fa9\u53ef\u80fd\uff08define()\u306e\u5834\u5408\uff09\n$environment = getEnvironment();\ndefine('IS_PRODUCTION', $environment === 'production');\n<\/pre>\n\n\n\n<p><strong>\u7279\u5fb4\uff1a<\/strong><\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u30b9\u30af\u30ea\u30d7\u30c8\u5168\u4f53\u304b\u3089\u30a2\u30af\u30bb\u30b9\u53ef\u80fd<\/strong><br><code>echo APP_NAME; \/\/ \u3069\u3053\u304b\u3089\u3067\u3082\u30a2\u30af\u30bb\u30b9\u53ef\u80fd<\/code><\/li>\n\n\n\n<li><strong>\u95a2\u6570\u3084\u30af\u30e9\u30b9\u5185\u304b\u3089\u3082\u30a2\u30af\u30bb\u30b9\u53ef\u80fd<\/strong><br><code>function getAppInfo() {<\/code><br>    <code>return APP_NAME . ' v' . VERSION;<\/code><br><code>}<\/code><br><code>class Application {<\/code><br>    <code>public function getVersion() {<\/code><br>        <code>return VERSION; \/\/ \u30b0\u30ed\u30fc\u30d0\u30eb\u5b9a\u6570\u306b\u30a2\u30af\u30bb\u30b9<\/code><br>    <code>}<\/code><br><code>}<\/code><\/li>\n\n\n\n<li><strong>\u540d\u524d\u885d\u7a81\u306e\u30ea\u30b9\u30af<\/strong><br><code>\/\/ \u4ed6\u306e\u30e9\u30a4\u30d6\u30e9\u30ea\u3067\u3082\u540c\u3058\u540d\u524d\u306e\u5b9a\u6570\u3092\u5b9a\u7fa9\u3057\u3066\u3044\u308b\u3068\u885d\u7a81\u3059\u308b\u53ef\u80fd\u6027<\/code><br><code>define('DEBUG', true);<\/code><br><code>\/\/ \u3069\u3053\u304b\u5225\u306e\u5834\u6240\u3084\u5225\u306e\u30e9\u30a4\u30d6\u30e9\u30ea\u3067<\/code><br><code>\/\/ define('DEBUG', false);<\/code><br><code>\/\/ \u65e2\u306b\u5b9a\u7fa9\u6e08\u307f\u306a\u306e\u3067\u30a8\u30e9\u30fc\u307e\u305f\u306f\u8b66\u544a<\/code><\/li>\n<\/ol>\n\n\n\n<p><strong>\u30b0\u30ed\u30fc\u30d0\u30eb\u5b9a\u6570\u306e\u30d9\u30b9\u30c8\u30d7\u30e9\u30af\u30c6\u30a3\u30b9\uff1a<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u4e00\u822c\u7684\u306a\u8a2d\u5b9a\u5024\u3084\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u5168\u4f53\u3067\u4f7f\u7528\u3059\u308b\u5024\u306b\u4f7f\u7528\u3059\u308b<\/li>\n\n\n\n<li>\u540d\u524d\u885d\u7a81\u3092\u907f\u3051\u308b\u305f\u3081\u306b\u30d7\u30ec\u30d5\u30a3\u30c3\u30af\u30b9\u3092\u4ed8\u3051\u308b\uff08\u4f8b: <code>APP_*<\/code>, <code>MYPROJECT_*<\/code>\uff09<\/li>\n\n\n\n<li>\u74b0\u5883\u5909\u6570\u304b\u3089\u306e\u8aad\u307f\u8fbc\u307f\u7d50\u679c\u306a\u3069\u3092\u683c\u7d0d\u3059\u308b<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-10\">\u30af\u30e9\u30b9\u5b9a\u6570\u306e\u7279\u6027\u3068\u6d3b\u7528\u6cd5<\/h3>\n\n\n\n<p>\u30af\u30e9\u30b9\u5b9a\u6570\u306f\u3001\u7279\u5b9a\u306e\u30af\u30e9\u30b9\u306b\u95a2\u9023\u4ed8\u3051\u3089\u308c\u305f\u5b9a\u6570\u3067\u3059\u3002\u30af\u30e9\u30b9\u306e\u5185\u90e8\u5b9f\u88c5\u306b\u95a2\u9023\u3059\u308b\u5024\u3092\u6574\u7406\u3059\u308b\u306e\u306b\u5f79\u7acb\u3061\u307e\u3059\u3002<\/p>\n\n\n\n<p><strong>\u5b9a\u7fa9\u65b9\u6cd5\uff1a<\/strong><\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">class User {\n    \/\/ \u57fa\u672c\u7684\u306a\u30af\u30e9\u30b9\u5b9a\u6570\n    const STATUS_ACTIVE = 1;\n    const STATUS_INACTIVE = 0;\n    \n    \/\/ PHP 7.1\u4ee5\u964d\u3067\u306f\u53ef\u8996\u6027\u4fee\u98fe\u5b50\u3092\u8ffd\u52a0\u53ef\u80fd\n    public const ROLE_ADMIN = 'admin';\n    protected const ROLE_EDITOR = 'editor';\n    private const ROLE_USER = 'user';\n    \n    public function isActive($status) {\n        return $status === self::STATUS_ACTIVE;\n    }\n}\n<\/pre>\n\n\n\n<p><strong>\u7279\u5fb4\uff1a<\/strong><\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u30af\u30e9\u30b9\u5916\u304b\u3089\u306e\u30a2\u30af\u30bb\u30b9\u65b9\u6cd5<\/strong><br><code>echo User::STATUS_ACTIVE; \/\/ 1<\/code><br><code>\/\/ echo User::ROLE_USER;<\/code> <code>\/\/ \u30a8\u30e9\u30fc: private\u306a\u306e\u3067\u5916\u90e8\u304b\u3089\u30a2\u30af\u30bb\u30b9\u4e0d\u53ef<\/code><\/li>\n\n\n\n<li><strong>\u7d99\u627f\u3068\u5b9a\u6570\u306e\u30aa\u30fc\u30d0\u30fc\u30e9\u30a4\u30c9<\/strong><br><code>class BasicUser {<\/code><br>    <code>const MAX_ITEMS = 10;<\/code><br><br>    <code>public function getMaxItems() {<\/code><br>        <code>return self::MAX_ITEMS;<\/code><br>    <code>}<\/code><br><code>}<\/code><br><br><code>class PremiumUser extends BasicUser {<\/code><br>    <code>const MAX_ITEMS = 100;<\/code><br><br>    <code>public function getPremiumMaxItems() {<\/code><br>        <code>return self::MAX_ITEMS; \/\/ 100\uff08\u5b50\u30af\u30e9\u30b9\u3067\u30aa\u30fc\u30d0\u30fc\u30e9\u30a4\u30c9\uff09<\/code><br>    <code>}<\/code><br><br>    <code>public function getParentMaxItems() {<\/code><br>        <code>return parent::MAX_ITEMS; \/\/ 10\uff08\u89aa\u30af\u30e9\u30b9\u306e\u5b9a\u6570\uff09<\/code><br>    <code>}<\/code><br><code>}<\/code><br><br><code>$user = new PremiumUser();<\/code><br><code>echo $user-&gt;getMaxItems(); \/\/ 10\uff08self::\u304c\u9759\u7684\u306b\u89e3\u6c7a\u3055\u308c\u308b\u305f\u3081\uff09<\/code><br><code>echo $user-&gt;getPremiumMaxItems(); \/\/ 100<\/code><\/li>\n\n\n\n<li><strong>static:: \u3068 self:: \u306e\u9055\u3044<\/strong><br><code>class BaseConfig {<\/code><br>    <code>const ENV = 'base';<\/code><br><br>    <code>public static function getEnv() {<\/code><br>        <code>return static::ENV; \/\/ \u9045\u5ef6\u9759\u7684\u675f\u7e1b\uff08Late Static Binding\uff09<\/code><br>    <code>}<\/code><br><br>    <code>public static function getBaseEnv() {<\/code><br>        <code>return self::ENV; \/\/ \u5e38\u306b\u73fe\u5728\u306e\u30af\u30e9\u30b9\u306e\u5b9a\u6570\u3092\u53c2\u7167<\/code><br>    <code>}<\/code><br><code>}<\/code><br><br><code>class DevConfig extends BaseConfig {<\/code><br>    <code>const ENV = 'development';<\/code><br><code>}<\/code><br><br><code>echo BaseConfig::getEnv(); \/\/ base<\/code><br><code>echo DevConfig::getEnv(); \/\/ development\uff08\u5b50\u30af\u30e9\u30b9\u306e\u5b9a\u6570\u304c\u4f7f\u7528\u3055\u308c\u308b\uff09<\/code><br><code>echo DevConfig::getBaseEnv(); \/\/ base\uff08\u89aa\u30af\u30e9\u30b9\u306e\u5b9a\u6570\u304c\u4f7f\u7528\u3055\u308c\u308b\uff09<\/code><\/li>\n<\/ol>\n\n\n\n<p><strong>\u30af\u30e9\u30b9\u5b9a\u6570\u306e\u6d3b\u7528\u6cd5\uff1a<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u30af\u30e9\u30b9\u56fa\u6709\u306e\u72b6\u614b\u3084\u30bf\u30a4\u30d7\u3092\u8868\u3059\u5024\u306e\u5b9a\u7fa9<\/li>\n\n\n\n<li>\u30e1\u30bd\u30c3\u30c9\u306e\u6319\u52d5\u3092\u5236\u5fa1\u3059\u308b\u8a2d\u5b9a\u5024\u306e\u5b9a\u7fa9<\/li>\n\n\n\n<li>\u30af\u30e9\u30b9\u9593\u3067\u5171\u6709\u3055\u308c\u308b\u5b9a\u6570\u306e\u4e2d\u592e\u7ba1\u7406<\/li>\n\n\n\n<li>\u30d0\u30ea\u30c7\u30fc\u30b7\u30e7\u30f3\u30eb\u30fc\u30eb\u306e\u5b9a\u7fa9<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-11\">\u540d\u524d\u7a7a\u9593\u5185\u3067\u306e\u5b9a\u6570\u306e\u7ba1\u7406\u65b9\u6cd5<\/h3>\n\n\n\n<p>PHP 5.3\u4ee5\u964d\u3067\u306f\u3001\u540d\u524d\u7a7a\u9593\u3092\u4f7f\u7528\u3057\u3066\u5b9a\u6570\u3092\u52b9\u7387\u7684\u306b\u6574\u7406\u3059\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002\u3053\u308c\u306b\u3088\u308a\u3001\u5927\u898f\u6a21\u306a\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u3067\u3082\u540d\u524d\u885d\u7a81\u3092\u907f\u3051\u306a\u304c\u3089\u5b9a\u6570\u3092\u7ba1\u7406\u3067\u304d\u307e\u3059\u3002<\/p>\n\n\n\n<p><strong>\u5b9a\u7fa9\u65b9\u6cd5\uff1a<\/strong><\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">namespace App\\Config;\n\n\/\/ \u540d\u524d\u7a7a\u9593\u5185\u3067\u306e\u30b0\u30ed\u30fc\u30d0\u30eb\u5b9a\u6570\nconst APP_VERSION = '2.0.0';\nconst DEFAULT_LANGUAGE = 'ja';\n\n\/\/ \u540d\u524d\u7a7a\u9593\u5185\u3067\u306e\u30af\u30e9\u30b9\u5b9a\u6570\nclass Database {\n    const HOST = 'localhost';\n    const USER = 'root';\n}\n<\/pre>\n\n\n\n<p><strong>\u30a2\u30af\u30bb\u30b9\u65b9\u6cd5\uff1a<\/strong><\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u540c\u3058\u540d\u524d\u7a7a\u9593\u5185\u304b\u3089\u306e\u30a2\u30af\u30bb\u30b9<\/strong><br><code>namespace App\\Config;<\/code><br><br><code>function getAppInfo() {<\/code><br>    <code>\/\/ \u540c\u3058\u540d\u524d\u7a7a\u9593\u5185\u3067\u306f\u3001\u4fee\u98fe\u306a\u3057\u3067\u76f4\u63a5\u30a2\u30af\u30bb\u30b9\u53ef\u80fd<\/code><br>    <code>return APP_VERSION;<\/code><br><code>}<\/code><br><br><code>echo Database::HOST; \/\/ localhost<\/code><\/li>\n\n\n\n<li><strong>\u5225\u306e\u540d\u524d\u7a7a\u9593\u304b\u3089\u306e\u30a2\u30af\u30bb\u30b9<\/strong><br><code>namespace App\\Controller;<\/code><br><br><code>function showVersion() {<\/code><br>    <code>\/\/ \u5b8c\u5168\u4fee\u98fe\u540d\uff08FQN\uff09\u3092\u4f7f\u7528<\/code><br>    <code>echo \\App\\Config\\APP_VERSION;<\/code><br><br>    <code>\/\/ use\u6587\u3092\u4f7f\u7528\u3057\u305f\u5834\u5408<\/code><br>    <code>\/\/ use const App\\Config\\APP_VERSION;<\/code><br>    <code>\/\/ echo APP_VERSION;<\/code><br><code>}<\/code><\/li>\n\n\n\n<li><strong>\u540d\u524d\u7a7a\u9593\u306e\u30a4\u30f3\u30dd\u30fc\u30c8<\/strong><br><code>namespace App\\Service;<\/code><br><br><code>\/\/ \u5b9a\u6570\u306e\u30a4\u30f3\u30dd\u30fc\u30c8<\/code><br><code>use const App\\Config\\DEFAULT_LANGUAGE;<\/code><br><br><code>\/\/ \u30af\u30e9\u30b9\u306e\u30a4\u30f3\u30dd\u30fc\u30c8<\/code><br><code>use App\\Config\\Database;<\/code><br><br><code>function getSettings() {<\/code><br>    <code>return [<\/code><br>        <code>'language' =&gt; DEFAULT_LANGUAGE,<\/code><br>        <code>'database' =&gt; Database::HOST<\/code><br>    <code>];<\/code><br><code>}<\/code><\/li>\n<\/ol>\n\n\n\n<p><strong>\u540d\u524d\u7a7a\u9593\u3092\u6d3b\u7528\u3057\u305f\u5b9a\u6570\u306e\u7d44\u7e54\u5316\uff1a<\/strong><\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">\/\/ app\/Config\/Application.php\nnamespace App\\Config;\n\nclass Application {\n    const NAME = 'Dexall App';\n    const VERSION = '1.0.0';\n}\n\n\/\/ app\/Config\/Database.php\nnamespace App\\Config;\n\nclass Database {\n    const HOST = 'localhost';\n    const NAME = 'dexall_db';\n}\n\n\/\/ app\/Config\/Security.php\nnamespace App\\Config;\n\nclass Security {\n    const HASH_ALGO = 'sha256';\n    const PASSWORD_MIN_LENGTH = 8;\n}\n\n\/\/ \u4f7f\u7528\u4f8b\nnamespace App\\Controller;\n\nuse App\\Config\\Application;\nuse App\\Config\\Database;\nuse App\\Config\\Security;\n\nfunction showConfig() {\n    echo \"Running \" . Application::NAME . \" v\" . Application::VERSION;\n    echo \"Database: \" . Database::NAME . \" on \" . Database::HOST;\n    echo \"Security: Passwords must be at least \" . Security::PASSWORD_MIN_LENGTH . \" characters\";\n}\n<\/pre>\n\n\n\n<p><strong>\u540d\u524d\u7a7a\u9593\u3092\u4f7f\u7528\u3059\u308b\u5229\u70b9\uff1a<\/strong><\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>\u8ad6\u7406\u7684\u306a\u30b0\u30eb\u30fc\u30d7\u5206\u3051\uff1a\u95a2\u9023\u3059\u308b\u5b9a\u6570\u3092\u540d\u524d\u7a7a\u9593\u3067\u6574\u7406\u3067\u304d\u308b<\/li>\n\n\n\n<li>\u540d\u524d\u885d\u7a81\u306e\u56de\u907f\uff1a\u7570\u306a\u308b\u540d\u524d\u7a7a\u9593\u3067\u540c\u3058\u540d\u524d\u306e\u5b9a\u6570\u3092\u5b9a\u7fa9\u53ef\u80fd<\/li>\n\n\n\n<li>\u30b3\u30fc\u30c9\u306e\u53ef\u8aad\u6027\u5411\u4e0a\uff1a\u5b9a\u6570\u306e\u300c\u6240\u5c5e\u300d\u304c\u660e\u78ba\u306b\u306a\u308b<\/li>\n\n\n\n<li>\u30aa\u30fc\u30c8\u30ed\u30fc\u30c7\u30a3\u30f3\u30b0\u3068\u306e\u89aa\u548c\u6027\uff1aPSR-4\u306a\u3069\u306e\u6a19\u6e96\u306b\u5408\u308f\u305b\u305f\u69cb\u9020\u5316\u304c\u5bb9\u6613<\/li>\n<\/ol>\n\n\n\n<p>\u9069\u5207\u306a\u30b9\u30b3\u30fc\u30d7\u3067\u5b9a\u6570\u3092\u5b9a\u7fa9\u3059\u308b\u3053\u3068\u3067\u3001\u30b3\u30fc\u30c9\u306e\u53ef\u8aad\u6027\u3068\u4fdd\u5b88\u6027\u3092\u5411\u4e0a\u3055\u305b\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002\u30b0\u30ed\u30fc\u30d0\u30eb\u5b9a\u6570\u306f\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u5168\u4f53\u306e\u8a2d\u5b9a\u306b\u3001\u30af\u30e9\u30b9\u5b9a\u6570\u306f\u30af\u30e9\u30b9\u56fa\u6709\u306e\u5024\u306b\u3001\u305d\u3057\u3066\u540d\u524d\u7a7a\u9593\u3092\u6d3b\u7528\u3057\u3066\u3053\u308c\u3089\u3092\u8ad6\u7406\u7684\u306b\u6574\u7406\u3059\u308b\u3053\u3068\u3067\u3001\u3088\u308a\u5805\u7262\u306aPHP\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u3092\u69cb\u7bc9\u3067\u304d\u308b\u3067\u3057\u3087\u3046\u3002<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"i-12\">PHP\u5b9a\u6570\u306e\u547d\u540d\u898f\u5247\u3068\u30d9\u30b9\u30c8\u30d7\u30e9\u30af\u30c6\u30a3\u30b9<\/h2>\n\n\n\n<p>\u5b9a\u6570\u306f\u3001\u30b3\u30fc\u30c9\u5168\u4f53\u3067\u4e00\u8cab\u6027\u306e\u3042\u308b\u5024\u3092\u7dad\u6301\u3059\u308b\u305f\u3081\u306e\u91cd\u8981\u306a\u8981\u7d20\u3067\u3059\u3002\u3057\u304b\u3057\u3001\u5b9a\u6570\u306e\u771f\u306e\u4fa1\u5024\u3092\u5f15\u304d\u51fa\u3059\u306b\u306f\u3001\u9069\u5207\u306a\u547d\u540d\u898f\u5247\u3068\u7ba1\u7406\u624b\u6cd5\u304c\u4e0d\u53ef\u6b20\u3067\u3059\u3002\u3053\u306e\u7ae0\u3067\u306f\u3001PHP\u5b9a\u6570\u306e\u547d\u540d\u898f\u5247\u3068\u5b9f\u969b\u306e\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u3067\u5f79\u7acb\u3064\u30d9\u30b9\u30c8\u30d7\u30e9\u30af\u30c6\u30a3\u30b9\u306b\u3064\u3044\u3066\u8a73\u3057\u304f\u89e3\u8aac\u3057\u307e\u3059\u3002<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-13\">\u30d7\u30ed\u304c\u5b9f\u8df5\u3059\u308b\u5b9a\u6570\u306e\u547d\u540d\u898f\u5247<\/h3>\n\n\n\n<p>PHP\u306b\u304a\u3051\u308b\u5b9a\u6570\u306e\u547d\u540d\u306f\u3001\u30b3\u30fc\u30c9\u306e\u53ef\u8aad\u6027\u3068\u4fdd\u5b88\u6027\u306b\u76f4\u63a5\u5f71\u97ff\u3057\u307e\u3059\u3002\u4ee5\u4e0b\u306b\u3001\u30d7\u30ed\u30d5\u30a7\u30c3\u30b7\u30e7\u30ca\u30eb\u306a\u958b\u767a\u8005\u304c\u5b9f\u8df5\u3057\u3066\u3044\u308b\u547d\u540d\u898f\u5247\u3092\u7d39\u4ecb\u3057\u307e\u3059\u3002<\/p>\n\n\n\n<p><strong>1. \u57fa\u672c\u7684\u306a\u547d\u540d\u898f\u5247\uff1a\u5927\u6587\u5b57\u3068\u30a2\u30f3\u30c0\u30fc\u30b9\u30b3\u30a2<\/strong><\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">\/\/ \u63a8\u5968\u3055\u308c\u308b\u547d\u540d\u898f\u5247\nconst MAX_LOGIN_ATTEMPTS = 5;\nconst API_BASE_URL = 'https:\/\/api.example.com';\nconst DEFAULT_TIMEOUT = 30;\n\n\/\/ \u907f\u3051\u308b\u3079\u304d\u547d\u540d\n\/\/ const maxLoginAttempts = 5; \/\/ \u5c0f\u6587\u5b57\u3084\u6df7\u5408\u30b1\u30fc\u30b9\u306f\u907f\u3051\u308b\n\/\/ const Max_Login_Attempts = 5; \/\/ \u5148\u982d\u306e\u5927\u6587\u5b57\u304c\u6df7\u5728\u3059\u308b\u306e\u306f\u907f\u3051\u308b\n<\/pre>\n\n\n\n<p>\u3053\u306e\u547d\u540d\u898f\u5247\uff08\u3059\u3079\u3066\u5927\u6587\u5b57\u3067\u30b9\u30cd\u30fc\u30af\u30b1\u30fc\u30b9\uff09\u304c\u5e83\u304f\u63a1\u7528\u3055\u308c\u308b\u7406\u7531\u306f\u4ee5\u4e0b\u306e\u901a\u308a\u3067\u3059\uff1a<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>\u8996\u899a\u7684\u533a\u5225<\/strong>: \u30b3\u30fc\u30c9\u5185\u3067\u5909\u6570\u3068\u5b9a\u6570\u3092\u4e00\u76ee\u3067\u533a\u5225\u3067\u304d\u308b<\/li>\n\n\n\n<li><strong>\u4e00\u8cab\u6027<\/strong>: \u9577\u5e74\u306e\u30d7\u30ed\u30b0\u30e9\u30df\u30f3\u30b0\u6163\u7fd2\u3068\u3057\u3066\u78ba\u7acb\u3055\u308c\u3066\u3044\u308b<\/li>\n\n\n\n<li><strong>\u53ef\u8aad\u6027<\/strong>: \u5358\u8a9e\u9593\u306e\u533a\u5207\u308a\u304c\u660e\u78ba\u3067\u8aad\u307f\u3084\u3059\u3044<\/li>\n<\/ul>\n\n\n\n<p><strong>2. \u30d7\u30ec\u30d5\u30a3\u30c3\u30af\u30b9\u3068\u30b5\u30d5\u30a3\u30c3\u30af\u30b9\u306e\u6d3b\u7528<\/strong><\/p>\n\n\n\n<p>\u5927\u898f\u6a21\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u3084\u30d5\u30ec\u30fc\u30e0\u30ef\u30fc\u30af\u3067\u306f\u3001\u5b9a\u6570\u306e\u7a2e\u985e\u3084\u6240\u5c5e\u3092\u793a\u3059\u30d7\u30ec\u30d5\u30a3\u30c3\u30af\u30b9\u3084\u30b5\u30d5\u30a3\u30c3\u30af\u30b9\u304c\u5f79\u7acb\u3061\u307e\u3059\u3002<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">\/\/ \u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u306e\u8a2d\u5b9a\u95a2\u9023\nconst APP_NAME = 'Dexall CMS';\nconst APP_VERSION = '2.5.1';\n\n\/\/ \u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u95a2\u9023\nconst DB_HOST = 'localhost';\nconst DB_USER = 'admin';\n\n\/\/ \u30a8\u30e9\u30fc\u30b3\u30fc\u30c9\nconst ERR_FILE_NOT_FOUND = 404;\nconst ERR_UNAUTHORIZED = 401;\n\n\/\/ \u6a5f\u80fd\u30d5\u30e9\u30b0\nconst FLAG_ENABLE_CACHE = true;\nconst FLAG_DEBUG_MODE = false;\n<\/pre>\n\n\n\n<p><strong>3. \u30af\u30e9\u30b9\u5b9a\u6570\u306e\u547d\u540d<\/strong><\/p>\n\n\n\n<p>\u30af\u30e9\u30b9\u5b9a\u6570\u3082\u57fa\u672c\u7684\u306b\u5168\u3066\u5927\u6587\u5b57\u3092\u4f7f\u7528\u3057\u307e\u3059\u304c\u3001\u3088\u308a\u5177\u4f53\u7684\u306a\u30b3\u30f3\u30c6\u30ad\u30b9\u30c8\u3092\u6301\u305f\u305b\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">class User {\n    \/\/ \u30b9\u30c6\u30fc\u30bf\u30b9\u95a2\u9023\n    const STATUS_ACTIVE = 1;\n    const STATUS_PENDING = 2;\n    const STATUS_SUSPENDED = 3;\n    \n    \/\/ \u6a29\u9650\u30ec\u30d9\u30eb\n    const ROLE_ADMIN = 100;\n    const ROLE_EDITOR = 50;\n    const ROLE_USER = 10;\n    \n    \/\/ \u30af\u30e9\u30b9\u56fa\u6709\u306e\u8a2d\u5b9a\n    const MAX_PROFILE_IMAGE_SIZE = 1048576; \/\/ 1MB\n}\n<\/pre>\n\n\n\n<p><strong>4. \u5217\u6319\u578b\u306e\u3088\u3046\u306a\u95a2\u9023\u5b9a\u6570\u306e\u30b0\u30eb\u30fc\u30d7\u5316<\/strong><\/p>\n\n\n\n<p>PHP 8.1\u3088\u308a\u524d\u3067\u306f\u3001\u5217\u6319\u578b\uff08Enum\uff09\u306e\u4ee3\u308f\u308a\u306b\u5b9a\u6570\u30b0\u30eb\u30fc\u30d7\u3092\u4f7f\u7528\u3059\u308b\u306e\u304c\u4e00\u822c\u7684\u3067\u3057\u305f\u3002<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">class PaymentStatus {\n    const PENDING = 'pending';\n    const PROCESSING = 'processing';\n    const COMPLETED = 'completed';\n    const FAILED = 'failed';\n    const REFUNDED = 'refunded';\n    \n    \/\/ \u6709\u52b9\u306a\u30b9\u30c6\u30fc\u30bf\u30b9\u304b\u30c1\u30a7\u30c3\u30af\u3059\u308b\u30d8\u30eb\u30d1\u30fc\u30e1\u30bd\u30c3\u30c9\n    public static function isValid($status) {\n        return in_array($status, [\n            self::PENDING,\n            self::PROCESSING,\n            self::COMPLETED,\n            self::FAILED,\n            self::REFUNDED\n        ]);\n    }\n}\n\n\/\/ PHP 8.1\u4ee5\u964d\u3067\u306fEnum\u578b\u304c\u4f7f\u7528\u53ef\u80fd\n\/\/ enum PaymentStatus {\n\/\/     case PENDING;\n\/\/     case PROCESSING;\n\/\/     case COMPLETED;\n\/\/     case FAILED;\n\/\/     case REFUNDED;\n\/\/ }\n<\/pre>\n\n\n\n<p><strong>\u547d\u540d\u898f\u5247\u306e\u30d9\u30b9\u30c8\u30d7\u30e9\u30af\u30c6\u30a3\u30b9\uff1a<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u30c1\u30fc\u30e0\u5185\u3067\u547d\u540d\u898f\u5247\u3092\u7d71\u4e00\u3057\u3001\u30c9\u30ad\u30e5\u30e1\u30f3\u30c8\u5316\u3059\u308b<\/li>\n\n\n\n<li>\u4e00\u8cab\u6027\u3092\u4fdd\u3061\u3001\u4f8b\u5916\u3092\u4f5c\u3089\u306a\u3044<\/li>\n\n\n\n<li>\u5b9a\u6570\u540d\u3067\u5024\u306e\u610f\u5473\u3084\u7528\u9014\u3092\u660e\u78ba\u306b\u8868\u73fe\u3059\u308b<\/li>\n\n\n\n<li>\u540d\u524d\u306e\u885d\u7a81\u3092\u907f\u3051\u308b\u305f\u3081\u3001\u9069\u5207\u306a\u30b9\u30b3\u30fc\u30d7\u3092\u9078\u629e\u3059\u308b<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-14\">\u5b9a\u6570\u306b\u683c\u7d0d\u3059\u3079\u304d\u5024\u306e\u7a2e\u985e<\/h3>\n\n\n\n<p>\u3059\u3079\u3066\u306e\u5024\u3092\u5b9a\u6570\u3068\u3057\u3066\u5b9a\u7fa9\u3059\u3079\u304d\u3067\u306f\u3042\u308a\u307e\u305b\u3093\u3002\u4ee5\u4e0b\u306b\u3001\u5b9a\u6570\u306b\u9069\u3057\u305f\u5024\u306e\u7a2e\u985e\u3092\u793a\u3057\u307e\u3059\u3002<\/p>\n\n\n\n<p><strong>1. \u4e0d\u5909\u306e\u8a2d\u5b9a\u5024<\/strong><\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">\/\/ \u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u60c5\u5831\nconst APP_NAME = 'Dexall CMS';\nconst COPYRIGHT_YEAR = '2025';\n\n\/\/ \u30b7\u30b9\u30c6\u30e0\u5236\u9650\u5024\nconst MAX_UPLOAD_SIZE = 10485760; \/\/ 10MB\nconst SESSION_LIFETIME = 3600; \/\/ 1\u6642\u9593\uff08\u79d2\uff09\n<\/pre>\n\n\n\n<p><strong>2. \u6570\u5b66\u7684\u30fb\u7269\u7406\u7684\u5b9a\u6570<\/strong><\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">const PI = 3.14159265359;\nconst EARTH_RADIUS_KM = 6371;\nconst GRAVITY_ACCELERATION = 9.81; \/\/ m\/s\u00b2\n<\/pre>\n\n\n\n<p><strong>3. \u30a8\u30e9\u30fc\u30b3\u30fc\u30c9\u3068\u72b6\u614b\u30d5\u30e9\u30b0<\/strong><\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">const ERROR_NONE = 0;\nconst ERROR_INVALID_INPUT = 1001;\nconst ERROR_DATABASE = 2001;\n\nconst STATUS_SUCCESS = 'success';\nconst STATUS_WARNING = 'warning';\nconst STATUS_ERROR = 'error';\n<\/pre>\n\n\n\n<p><strong>4. \u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u30fbAPI\u95a2\u9023<\/strong><\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">const DB_TABLE_USERS = 'users';\nconst DB_FIELD_EMAIL = 'email_address';\n\nconst API_ENDPOINT_USERS = '\/api\/v1\/users';\n<\/pre>\n\n\n\n<p><strong>5. \u6b63\u898f\u8868\u73fe\u30d1\u30bf\u30fc\u30f3<\/strong><\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">const REGEX_EMAIL = '\/^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\\.[a-zA-Z]{2,}$\/';\nconst REGEX_ZIPCODE_JP = '\/^\\d{3}-\\d{4}$\/';\n<\/pre>\n\n\n\n<p><strong>\u5b9a\u6570\u306b\u4e0d\u9069\u5207\u306a\u5024\uff1a<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u983b\u7e41\u306b\u5909\u66f4\u3055\u308c\u308b\u5024<\/li>\n\n\n\n<li>\u30e6\u30fc\u30b6\u30fc\u5165\u529b\u306b\u4f9d\u5b58\u3059\u308b\u5024<\/li>\n\n\n\n<li>\u30bb\u30c3\u30b7\u30e7\u30f3\u3054\u3068\u306b\u7570\u306a\u308b\u5024<\/li>\n\n\n\n<li>\u7d14\u7c8b\u306b\u5b9f\u88c5\u8a73\u7d30\u306e\u4e00\u90e8\u3067\u3042\u308b\u4e00\u6642\u7684\u306a\u5024<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-15\">\u8907\u6570\u74b0\u5883\u3067\u306e\u5b9a\u6570\u7ba1\u7406\u30c6\u30af\u30cb\u30c3\u30af<\/h3>\n\n\n\n<p>\u5b9f\u969b\u306e\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u3067\u306f\u3001\u958b\u767a\u74b0\u5883\u3001\u30c6\u30b9\u30c8\u74b0\u5883\u3001\u672c\u756a\u74b0\u5883\u306a\u3069\u8907\u6570\u306e\u74b0\u5883\u3067\u7570\u306a\u308b\u5b9a\u6570\u5024\u3092\u7ba1\u7406\u3059\u308b\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059\u3002\u4ee5\u4e0b\u306b\u3001\u52b9\u7387\u7684\u306a\u7ba1\u7406\u30c6\u30af\u30cb\u30c3\u30af\u3092\u7d39\u4ecb\u3057\u307e\u3059\u3002<\/p>\n\n\n\n<p><strong>1. \u74b0\u5883\u5909\u6570\u3092\u6d3b\u7528\u3057\u305f\u5b9a\u6570\u5b9a\u7fa9<\/strong><\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">\/\/ .env \u30d5\u30a1\u30a4\u30eb\uff08\u74b0\u5883\u3054\u3068\u306b\u7570\u306a\u308b\uff09\n\/\/ DB_HOST=localhost\n\/\/ DB_USER=root\n\/\/ APP_DEBUG=true\n\n\/\/ config.php\nconst DB_HOST = $_ENV['DB_HOST'] ?? 'localhost';\nconst DB_USER = $_ENV['DB_USER'] ?? 'root';\nconst APP_DEBUG = (bool)($_ENV['APP_DEBUG'] ?? false);\n<\/pre>\n\n\n\n<p><strong>2. \u74b0\u5883\u56fa\u6709\u306e\u8a2d\u5b9a\u30d5\u30a1\u30a4\u30eb<\/strong><\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">\/\/ \u57fa\u672c\u8a2d\u5b9a\uff08\u5171\u901a\uff09\nrequire_once 'config\/config.common.php';\n\n\/\/ \u74b0\u5883\u56fa\u6709\u306e\u8a2d\u5b9a\u3092\u8aad\u307f\u8fbc\u3080\n$env = getenv('APP_ENV') ?: 'development';\nif (file_exists(\"config\/config.{$env}.php\")) {\n    require_once \"config\/config.{$env}.php\";\n}\n<\/pre>\n\n\n\n<p><strong>3. \u30af\u30e9\u30b9\u30d9\u30fc\u30b9\u306e\u8a2d\u5b9a\u7ba1\u7406<\/strong><\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">abstract class Config {\n    \/\/ \u5171\u901a\u306e\u8a2d\u5b9a\n    const APP_NAME = 'Dexall App';\n    const VERSION = '1.0.0';\n    \n    \/\/ \u74b0\u5883\u3054\u3068\u306b\u30aa\u30fc\u30d0\u30fc\u30e9\u30a4\u30c9\u3055\u308c\u308b\u8a2d\u5b9a\n    const DEBUG = false;\n    const LOG_LEVEL = 'error';\n    const DB_CONFIG = [\n        'host' =&gt; 'localhost',\n        'name' =&gt; 'app_db',\n        'user' =&gt; 'app_user',\n    ];\n}\n\n\/\/ \u958b\u767a\u74b0\u5883\u7528\u306e\u8a2d\u5b9a\nclass DevelopmentConfig extends Config {\n    const DEBUG = true;\n    const LOG_LEVEL = 'debug';\n    const DB_CONFIG = [\n        'host' =&gt; 'localhost',\n        'name' =&gt; 'app_dev_db',\n        'user' =&gt; 'root',\n    ];\n}\n\n\/\/ \u672c\u756a\u74b0\u5883\u7528\u306e\u8a2d\u5b9a\nclass ProductionConfig extends Config {\n    const DEBUG = false;\n    const LOG_LEVEL = 'error';\n    const DB_CONFIG = [\n        'host' =&gt; 'db.example.com',\n        'name' =&gt; 'app_prod_db',\n        'user' =&gt; 'app_prod_user',\n    ];\n}\n\n\/\/ \u74b0\u5883\u306b\u5fdc\u3058\u305f\u8a2d\u5b9a\u30af\u30e9\u30b9\u3092\u9078\u629e\n$env = getenv('APP_ENV') ?: 'development';\n$configClass = $env === 'production' ? ProductionConfig::class : DevelopmentConfig::class;\n\n\/\/ \u4f7f\u7528\u4f8b\necho $configClass::APP_NAME; \/\/ Dexall App\necho $configClass::DEBUG ? '\u30c7\u30d0\u30c3\u30b0\u30e2\u30fc\u30c9' : '\u672c\u756a\u30e2\u30fc\u30c9';\n<\/pre>\n\n\n\n<p><strong>4. \u8a2d\u5b9a\u30d5\u30a1\u30a4\u30eb\u3068\u30ad\u30e3\u30c3\u30b7\u30e5\u306e\u7d44\u307f\u5408\u308f\u305b<\/strong><\/p>\n\n\n\n<p>\u5927\u898f\u6a21\u306a\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u3067\u306f\u3001\u8a2d\u5b9a\u3092\u4e00\u5ea6\u8aad\u307f\u8fbc\u3093\u3067\u30ad\u30e3\u30c3\u30b7\u30e5\u3059\u308b\u3053\u3068\u3067\u30d1\u30d5\u30a9\u30fc\u30de\u30f3\u30b9\u3092\u5411\u4e0a\u3055\u305b\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">\/\/ \u8a2d\u5b9a\u3092\u30ad\u30e3\u30c3\u30b7\u30e5\u304b\u3089\u8aad\u307f\u8fbc\u3080\u304b\u3001\u306a\u3051\u308c\u3070\u751f\u6210\u3057\u3066\u30ad\u30e3\u30c3\u30b7\u30e5\u3059\u308b\nfunction loadConfig() {\n    $cacheFile = __DIR__ . '\/cache\/config.cache.php';\n    \n    \/\/ \u30ad\u30e3\u30c3\u30b7\u30e5\u304c\u6709\u52b9\u306a\u5834\u5408\u306f\u30ad\u30e3\u30c3\u30b7\u30e5\u304b\u3089\u8aad\u307f\u8fbc\u3080\n    if (file_exists($cacheFile) &amp;&amp; !isDebugMode()) {\n        return require $cacheFile;\n    }\n    \n    \/\/ \u74b0\u5883\u5909\u6570\u304b\u3089\u8a2d\u5b9a\u3092\u751f\u6210\n    $config = [\n        'app' =&gt; [\n            'name' =&gt; getenv('APP_NAME') ?: 'Dexall App',\n            'debug' =&gt; (bool)(getenv('APP_DEBUG') ?: false),\n        ],\n        'database' =&gt; [\n            'host' =&gt; getenv('DB_HOST') ?: 'localhost',\n            'name' =&gt; getenv('DB_NAME') ?: 'app_db',\n        ],\n        \/\/ \u305d\u306e\u4ed6\u306e\u8a2d\u5b9a...\n    ];\n    \n    \/\/ \u30c7\u30d0\u30c3\u30b0\u30e2\u30fc\u30c9\u3067\u306a\u3051\u308c\u3070\u30ad\u30e3\u30c3\u30b7\u30e5\u306b\u4fdd\u5b58\n    if (!isDebugMode()) {\n        file_put_contents(\n            $cacheFile,\n            '&lt;?php return ' . var_export($config, true) . ';'\n        );\n    }\n    \n    return $config;\n}\n\n$config = loadConfig();\n\/\/ \u4e00\u5b9a\u306e\u5024\u3092\u5b9a\u6570\u3068\u3057\u3066\u5b9a\u7fa9\ndefine('APP_NAME', $config['app']['name']);\ndefine('APP_DEBUG', $config['app']['debug']);\n<\/pre>\n\n\n\n<p><strong>\u74b0\u5883\u8a2d\u5b9a\u306b\u95a2\u3059\u308b\u30d9\u30b9\u30c8\u30d7\u30e9\u30af\u30c6\u30a3\u30b9\uff1a<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u74b0\u5883\u56fa\u6709\u306e\u5024\u306f <code>.env<\/code> \u30d5\u30a1\u30a4\u30eb\u3084\u74b0\u5883\u5909\u6570\u3067\u7ba1\u7406\u3057\u3001git\u306a\u3069\u306e\u30d0\u30fc\u30b8\u30e7\u30f3\u7ba1\u7406\u304b\u3089\u9664\u5916<\/li>\n\n\n\n<li>\u6a5f\u5bc6\u60c5\u5831\uff08API\u30ad\u30fc\u3001\u30d1\u30b9\u30ef\u30fc\u30c9\u306a\u3069\uff09\u306f\u30b3\u30fc\u30c9\u5185\u306b\u76f4\u63a5\u8a18\u8ff0\u3057\u306a\u3044<\/li>\n\n\n\n<li>\u74b0\u5883\u3054\u3068\u306e\u5dee\u7570\u3092\u6700\u5c0f\u9650\u306b\u6291\u3048\u3001\u5171\u901a\u306e\u8a2d\u5b9a\u306f\u4e00\u5143\u7ba1\u7406<\/li>\n\n\n\n<li>\u8a2d\u5b9a\u306e\u5909\u66f4\u304c\u5fc5\u8981\u306a\u5834\u5408\u306f\u3001\u30b3\u30fc\u30c9\u306e\u5909\u66f4\u306a\u3057\u3067\u5bfe\u5fdc\u3067\u304d\u308b\u3088\u3046\u306b\u8a2d\u8a08<\/li>\n<\/ul>\n\n\n\n<p>\u9069\u5207\u306a\u547d\u540d\u898f\u5247\u3068\u7ba1\u7406\u624b\u6cd5\u3092\u63a1\u7528\u3059\u308b\u3053\u3068\u3067\u3001PHP\u306e\u5b9a\u6570\u306f\u5358\u306a\u308b\u5024\u306e\u4fdd\u5b58\u5834\u6240\u304b\u3089\u3001\u30b3\u30fc\u30c9\u5168\u4f53\u306e\u54c1\u8cea\u3092\u5411\u4e0a\u3055\u305b\u308b\u5f37\u529b\u306a\u30c4\u30fc\u30eb\u3078\u3068\u9032\u5316\u3057\u307e\u3059\u3002\u6b21\u7ae0\u3067\u306f\u3001PHP\u306e\u5b9a\u6570\u3092\u3055\u3089\u306b\u767a\u5c55\u3055\u305b\u305f\u9ad8\u5ea6\u306a\u6d3b\u7528\u30c6\u30af\u30cb\u30c3\u30af\u306b\u3064\u3044\u3066\u89e3\u8aac\u3057\u307e\u3059\u3002<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"i-16\">PHP\u5b9a\u6570\u306e\u9ad8\u5ea6\u306a\u6d3b\u7528\u30c6\u30af\u30cb\u30c3\u30af<\/h2>\n\n\n\n<p>PHP\u306e\u5b9a\u6570\u306f\u3001\u57fa\u672c\u7684\u306a\u4f7f\u3044\u65b9\u3092\u8d85\u3048\u3066\u3001\u3088\u308a\u9ad8\u5ea6\u306a\u30d7\u30ed\u30b0\u30e9\u30df\u30f3\u30b0\u30c6\u30af\u30cb\u30c3\u30af\u306e\u4e2d\u3067\u3082\u91cd\u8981\u306a\u5f79\u5272\u3092\u679c\u305f\u3057\u307e\u3059\u3002\u7279\u306b\u8fd1\u5e74\u306ePHP\u306e\u30d0\u30fc\u30b8\u30e7\u30f3\u30a2\u30c3\u30d7\u3067\u8ffd\u52a0\u3055\u308c\u305f\u6a5f\u80fd\u3092\u6d3b\u7528\u3059\u308b\u3053\u3068\u3067\u3001\u3088\u308a\u5805\u7262\u3067\u30e1\u30f3\u30c6\u30ca\u30f3\u30b9\u6027\u306e\u9ad8\u3044\u30b3\u30fc\u30c9\u3092\u5b9f\u73fe\u3067\u304d\u307e\u3059\u3002\u3053\u306e\u7ae0\u3067\u306f\u3001\u5b9a\u6570\u306e\u9ad8\u5ea6\u306a\u6d3b\u7528\u30c6\u30af\u30cb\u30c3\u30af\u306b\u3064\u3044\u3066\u89e3\u8aac\u3057\u307e\u3059\u3002<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-17\">PHP 5.6\u4ee5\u964d\u3067\u306e\u914d\u5217\u5b9a\u6570\u306e\u6d3b\u7528\u6cd5<\/h3>\n\n\n\n<p>PHP 5.6\u4ee5\u524d\u3067\u306f\u3001\u914d\u5217\u3092\u5b9a\u6570\u3068\u3057\u3066\u5b9a\u7fa9\u3059\u308b\u3053\u3068\u306f\u3067\u304d\u307e\u305b\u3093\u3067\u3057\u305f\u3002\u3057\u304b\u3057\u3001PHP 5.6\u4ee5\u964d\u3067\u306f <code>const<\/code> \u30ad\u30fc\u30ef\u30fc\u30c9\u3092\u4f7f\u7528\u3057\u3066\u914d\u5217\u5b9a\u6570\u3092\u5b9a\u7fa9\u3067\u304d\u308b\u3088\u3046\u306b\u306a\u308a\u3001\u3055\u3089\u306bPHP 7.0\u304b\u3089\u306f <code>define()<\/code> \u95a2\u6570\u3067\u3082\u914d\u5217\u5b9a\u6570\u304c\u30b5\u30dd\u30fc\u30c8\u3055\u308c\u307e\u3057\u305f\u3002<\/p>\n\n\n\n<p><strong>\u57fa\u672c\u7684\u306a\u914d\u5217\u5b9a\u6570\u306e\u5b9a\u7fa9\uff1a<\/strong><\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">\/\/ PHP 5.6\u4ee5\u964d\u3067\u53ef\u80fd\u306b\u306a\u3063\u305f\u914d\u5217\u5b9a\u6570\uff08const\u30ad\u30fc\u30ef\u30fc\u30c9\uff09\nconst ALLOWED_DOMAINS = [\n    'example.com',\n    'example.org',\n    'example.net'\n];\n\n\/\/ PHP 7.0\u4ee5\u964d\u3067\u30b5\u30dd\u30fc\u30c8\uff08define\u95a2\u6570\uff09\ndefine('HTTP_STATUS_CODES', [\n    'OK' =&gt; 200,\n    'NOT_FOUND' =&gt; 404,\n    'SERVER_ERROR' =&gt; 500\n]);\n\n\/\/ \u4f7f\u7528\u4f8b\nif (in_array($domain, ALLOWED_DOMAINS)) {\n    \/\/ \u8a31\u53ef\u3055\u308c\u305f\u30c9\u30e1\u30a4\u30f3\n}\n\necho \"\u30b9\u30c6\u30fc\u30bf\u30b9\u30b3\u30fc\u30c9: \" . HTTP_STATUS_CODES['NOT_FOUND']; \/\/ 404\n<\/pre>\n\n\n\n<p><strong>\u591a\u6b21\u5143\u914d\u5217\u5b9a\u6570\u306e\u6d3b\u7528\uff1a<\/strong><\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">\/\/ \u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u8a2d\u5b9a\u306e\u4e00\u5143\u7ba1\u7406\nconst APP_CONFIG = [\n    'database' =&gt; [\n        'host' =&gt; 'localhost',\n        'name' =&gt; 'app_db',\n        'user' =&gt; 'app_user',\n        'charset' =&gt; 'utf8mb4'\n    ],\n    'mail' =&gt; [\n        'from' =&gt; 'no-reply@example.com',\n        'name' =&gt; 'System Notification',\n        'smtp' =&gt; [\n            'host' =&gt; 'smtp.example.com',\n            'port' =&gt; 587,\n            'encryption' =&gt; 'tls'\n        ]\n    ],\n    'paths' =&gt; [\n        'uploads' =&gt; '\/var\/www\/uploads',\n        'temp' =&gt; '\/var\/www\/temp',\n        'logs' =&gt; '\/var\/log\/app'\n    ]\n];\n\n\/\/ \u4f7f\u7528\u4f8b\n$dbConfig = APP_CONFIG['database'];\n$logPath = APP_CONFIG['paths']['logs'];\n<\/pre>\n\n\n\n<p><strong>\u914d\u5217\u5b9a\u6570\u306e\u5b9f\u7528\u7684\u306a\u6d3b\u7528\u30d1\u30bf\u30fc\u30f3\uff1a<\/strong><\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u30d0\u30ea\u30c7\u30fc\u30b7\u30e7\u30f3\u30eb\u30fc\u30eb\u306e\u4e00\u5143\u7ba1\u7406<\/strong><\/li>\n<\/ol>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">const VALIDATION_RULES = [\n    'username' =&gt; [\n        'required' =&gt; true,\n        'min_length' =&gt; 3,\n        'max_length' =&gt; 20,\n        'pattern' =&gt; '\/^[a-zA-Z0-9_]+$\/'\n    ],\n    'email' =&gt; [\n        'required' =&gt; true,\n        'max_length' =&gt; 255,\n        'pattern' =&gt; '\/^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\\.[a-zA-Z]{2,}$\/'\n    ],\n    'password' =&gt; [\n        'required' =&gt; true,\n        'min_length' =&gt; 8,\n        'has_uppercase' =&gt; true,\n        'has_number' =&gt; true\n    ]\n];\n\n\/\/ \u30d0\u30ea\u30c7\u30fc\u30b7\u30e7\u30f3\u51e6\u7406\u5185\u3067\u4f7f\u7528\nfunction validate($field, $value) {\n    if (!isset(VALIDATION_RULES[$field])) {\n        return true; \/\/ \u30eb\u30fc\u30eb\u304c\u306a\u3044\u5834\u5408\u306f\u30d0\u30ea\u30c7\u30fc\u30b7\u30e7\u30f3\u901a\u904e\n    }\n    \n    $rules = VALIDATION_RULES[$field];\n    \n    \/\/ \u5fc5\u9808\u30c1\u30a7\u30c3\u30af\n    if ($rules['required'] &amp;&amp; empty($value)) {\n        return false;\n    }\n    \n    \/\/ \u6587\u5b57\u6570\u30c1\u30a7\u30c3\u30af\n    if (isset($rules['min_length']) &amp;&amp; strlen($value) &lt; $rules['min_length']) {\n        return false;\n    }\n    \n    \/\/ \u305d\u306e\u4ed6\u306e\u30eb\u30fc\u30eb\u3082\u540c\u69d8\u306b\u691c\u8a3c...\n    return true;\n}\n<\/pre>\n\n\n\n<ol start=\"2\" class=\"wp-block-list\">\n<li><strong>\u5730\u57df\u3084\u8a00\u8a9e\u306b\u95a2\u3059\u308b\u60c5\u5831\u306e\u7ba1\u7406<\/strong><\/li>\n<\/ol>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">const COUNTRIES = [\n    'JP' =&gt; [\n        'name' =&gt; '\u65e5\u672c',\n        'currency' =&gt; 'JPY',\n        'phone_code' =&gt; '+81'\n    ],\n    'US' =&gt; [\n        'name' =&gt; '\u30a2\u30e1\u30ea\u30ab\u5408\u8846\u56fd',\n        'currency' =&gt; 'USD',\n        'phone_code' =&gt; '+1'\n    ],\n    'GB' =&gt; [\n        'name' =&gt; '\u30a4\u30ae\u30ea\u30b9',\n        'currency' =&gt; 'GBP',\n        'phone_code' =&gt; '+44'\n    ]\n];\n\n\/\/ \u4f7f\u7528\u4f8b\nfunction formatPhoneNumber($countryCode, $number) {\n    if (!isset(COUNTRIES[$countryCode])) {\n        return $number;\n    }\n    return COUNTRIES[$countryCode]['phone_code'] . ' ' . $number;\n}\n<\/pre>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-18\">\u9b54\u8853\u5b9a\u6570(__CLASS__\u306a\u3069)\u306e\u52b9\u679c\u7684\u306a\u4f7f\u3044\u65b9<\/h3>\n\n\n\n<p>PHP\u306b\u306f\u3001\u30b3\u30f3\u30c6\u30ad\u30b9\u30c8\u306b\u5fdc\u3058\u3066\u7570\u306a\u308b\u5024\u3092\u6301\u3064\u7279\u6b8a\u306a\u300c\u9b54\u8853\u5b9a\u6570\u300d\u304c\u7528\u610f\u3055\u308c\u3066\u3044\u307e\u3059\u3002\u3053\u308c\u3089\u306f\u901a\u5e38\u306e\u5b9a\u6570\u3068\u306f\u7570\u306a\u308a\u3001\u958b\u767a\u8005\u304c\u5b9a\u7fa9\u3059\u308b\u306e\u3067\u306f\u306a\u304fPHP\u306b\u3088\u3063\u3066\u81ea\u52d5\u7684\u306b\u5024\u304c\u8a2d\u5b9a\u3055\u308c\u307e\u3059\u3002<\/p>\n\n\n\n<p><strong>\u4e3b\u8981\u306a\u9b54\u8853\u5b9a\u6570\u4e00\u89a7\uff1a<\/strong><\/p>\n\n\n<div id=\"id-c747a241-8b9f-4cb3-8483-fd76ba43416e\">\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>\u9b54\u8853\u5b9a\u6570<\/th><th>\u8aac\u660e<\/th><th>\u4f8b<\/th><\/tr><\/thead><tbody><tr><td><code>__LINE__<\/code><\/td><td>\u73fe\u5728\u306e\u30d5\u30a1\u30a4\u30eb\u306e\u884c\u756a\u53f7<\/td><td><code>echo __LINE__; \/\/ \u4f8b: 42<\/code><\/td><\/tr><tr><td><code>__FILE__<\/code><\/td><td>\u73fe\u5728\u306e\u30d5\u30a1\u30a4\u30eb\u306e\u30d5\u30eb\u30d1\u30b9<\/td><td><code>echo __FILE__; \/\/ \u4f8b: \/var\/www\/app\/index.php<\/code><\/td><\/tr><tr><td><code>__DIR__<\/code><\/td><td>\u73fe\u5728\u306e\u30d5\u30a1\u30a4\u30eb\u306e\u30c7\u30a3\u30ec\u30af\u30c8\u30ea<\/td><td><code>echo __DIR__; \/\/ \u4f8b: \/var\/www\/app<\/code><\/td><\/tr><tr><td><code>__FUNCTION__<\/code><\/td><td>\u73fe\u5728\u306e\u95a2\u6570\u540d<\/td><td><code>function test() { echo __FUNCTION__; } \/\/ \u51fa\u529b: test<\/code><\/td><\/tr><tr><td><code>__CLASS__<\/code><\/td><td>\u73fe\u5728\u306e\u30af\u30e9\u30b9\u540d<\/td><td><code>echo __CLASS__; \/\/ \u4f8b: App\\User<\/code><\/td><\/tr><tr><td><code>__TRAIT__<\/code><\/td><td>\u73fe\u5728\u306e\u30c8\u30ec\u30a4\u30c8\u540d<\/td><td><code>echo __TRAIT__; \/\/ \u4f8b: App\\Traits\\Loggable<\/code><\/td><\/tr><tr><td><code>__METHOD__<\/code><\/td><td>\u73fe\u5728\u306e\u30af\u30e9\u30b9\u30e1\u30bd\u30c3\u30c9\u540d<\/td><td><code>echo __METHOD__; \/\/ \u4f8b: App\\User::login<\/code><\/td><\/tr><tr><td><code>__NAMESPACE__<\/code><\/td><td>\u73fe\u5728\u306e\u540d\u524d\u7a7a\u9593<\/td><td><code>echo __NAMESPACE__; \/\/ \u4f8b: App\\Services<\/code><\/td><\/tr><\/tbody><\/table><\/figure>\n<\/div>\n\n\n<p><strong>\u9b54\u8853\u5b9a\u6570\u306e\u6d3b\u7528\u4f8b\uff1a<\/strong><\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u30ed\u30ae\u30f3\u30b0\u306e\u5f37\u5316<\/strong><\/li>\n<\/ol>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">class UserService {\n    private function log($message) {\n        $logger = new Logger();\n        $logger-&gt;info(\n            sprintf(\n                '[%s::%s] %s',\n                __CLASS__,\n                debug_backtrace()[1]['function'],\n                $message\n            )\n        );\n    }\n    \n    public function registerUser($userData) {\n        $this-&gt;log('\u30e6\u30fc\u30b6\u30fc\u767b\u9332\u958b\u59cb');\n        \/\/ \u51e6\u7406...\n        $this-&gt;log('\u30e6\u30fc\u30b6\u30fc\u767b\u9332\u5b8c\u4e86');\n    }\n}\n\/\/ \u30ed\u30b0\u51fa\u529b\u4f8b: [UserService::registerUser] \u30e6\u30fc\u30b6\u30fc\u767b\u9332\u958b\u59cb\n<\/pre>\n\n\n\n<ol start=\"2\" class=\"wp-block-list\">\n<li><strong>\u30d5\u30a1\u30a4\u30eb\u30d1\u30b9\u306e\u52d5\u7684\u306a\u69cb\u7bc9<\/strong><\/li>\n<\/ol>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">\/\/ \u8a2d\u5b9a\u30d5\u30a1\u30a4\u30eb\u306e\u30ed\u30fc\u30c9\n$configFile = __DIR__ . '\/..\/config\/app.php';\nif (file_exists($configFile)) {\n    $config = require $configFile;\n}\n\n\/\/ \u30c6\u30f3\u30d7\u30ec\u30fc\u30c8\u306e\u8aad\u307f\u8fbc\u307f\nfunction renderTemplate($templateName) {\n    $templatePath = __DIR__ . '\/templates\/' . $templateName . '.php';\n    if (file_exists($templatePath)) {\n        include $templatePath;\n    } else {\n        throw new Exception('Template not found: ' . $templateName);\n    }\n}\n<\/pre>\n\n\n\n<ol start=\"3\" class=\"wp-block-list\">\n<li><strong>\u81ea\u52d5\u30ed\u30fc\u30c0\u30fc\u3067\u306e\u6d3b\u7528<\/strong><\/li>\n<\/ol>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">\/\/ \u30b7\u30f3\u30d7\u30eb\u306a\u30aa\u30fc\u30c8\u30ed\u30fc\u30c0\u30fc\u306e\u5b9f\u88c5\nspl_autoload_register(function ($className) {\n    \/\/ \u540d\u524d\u7a7a\u9593\u306e\u30bb\u30d1\u30ec\u30fc\u30bf\u3092\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u30bb\u30d1\u30ec\u30fc\u30bf\u306b\u5909\u63db\n    $path = str_replace('\\\\', DIRECTORY_SEPARATOR, $className);\n    \n    \/\/ \u30af\u30e9\u30b9\u30d5\u30a1\u30a4\u30eb\u306e\u30d1\u30b9\u3092\u751f\u6210\n    $file = __DIR__ . '\/src\/' . $path . '.php';\n    \n    \/\/ \u30d5\u30a1\u30a4\u30eb\u304c\u5b58\u5728\u3059\u308c\u3070\u8aad\u307f\u8fbc\u3080\n    if (file_exists($file)) {\n        require_once $file;\n        return true;\n    }\n    \n    return false;\n});\n<\/pre>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-19\">\u30af\u30e9\u30b9\u7d99\u627f\u306b\u304a\u3051\u308b\u5b9a\u6570\u306e\u632f\u308b\u821e\u3044<\/h3>\n\n\n\n<p>\u30af\u30e9\u30b9\u7d99\u627f\u6642\u306e\u5b9a\u6570\u306e\u632f\u308b\u821e\u3044\u3092\u7406\u89e3\u3059\u308b\u3053\u3068\u3067\u3001\u3088\u308a\u67d4\u8edf\u306a\u30b3\u30fc\u30c9\u8a2d\u8a08\u304c\u53ef\u80fd\u306b\u306a\u308a\u307e\u3059\u3002<\/p>\n\n\n\n<p><strong>\u5b9a\u6570\u306e\u30aa\u30fc\u30d0\u30fc\u30e9\u30a4\u30c9\uff1a<\/strong><\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">class BaseController {\n    const DEFAULT_VIEW_PATH = 'views\/default';\n    const MAX_ITEMS_PER_PAGE = 10;\n    \n    public function getViewPath() {\n        return static::DEFAULT_VIEW_PATH;\n    }\n    \n    public function getMaxItems() {\n        return static::MAX_ITEMS_PER_PAGE;\n    }\n}\n\nclass UserController extends BaseController {\n    const DEFAULT_VIEW_PATH = 'views\/users';\n    const MAX_ITEMS_PER_PAGE = 20;\n}\n\n$controller = new UserController();\necho $controller-&gt;getViewPath(); \/\/ \u51fa\u529b: views\/users\necho $controller-&gt;getMaxItems(); \/\/ \u51fa\u529b: 20\n\n\/\/ static:: \u304c\u9045\u5ef6\u9759\u7684\u675f\u7e1b\uff08Late Static Binding\uff09\u3092\u4f7f\u7528\n\/\/ self:: \u3092\u4f7f\u7528\u3057\u305f\u5834\u5408\u306f\u89aa\u30af\u30e9\u30b9\u306e\u5024\u304c\u4f7f\u308f\u308c\u308b\n\nclass AdminController extends BaseController {\n    const DEFAULT_VIEW_PATH = 'views\/admin';\n    \n    \/\/ self::\u3092\u4f7f\u7528\u3057\u305f\u5834\u5408\n    public function getSelfViewPath() {\n        return self::DEFAULT_VIEW_PATH; \/\/ \u5e38\u306b\u73fe\u5728\u306e\u30af\u30e9\u30b9\u306e\u5b9a\u6570\u3092\u53c2\u7167\n    }\n}\n\n$admin = new AdminController();\necho $admin-&gt;getViewPath(); \/\/ \u51fa\u529b: views\/admin (static::\u3092\u4f7f\u7528)\necho $admin-&gt;getSelfViewPath(); \/\/ \u51fa\u529b: views\/admin (self::\u3092\u4f7f\u7528)\n<\/pre>\n\n\n\n<p><strong>\u30a4\u30f3\u30bf\u30fc\u30d5\u30a7\u30fc\u30b9\u3067\u306e\u5b9a\u6570\u5b9a\u7fa9\uff1a<\/strong><\/p>\n\n\n\n<p>\u30a4\u30f3\u30bf\u30fc\u30d5\u30a7\u30fc\u30b9\u3092\u4f7f\u7528\u3057\u3066\u3001\u5b9f\u88c5\u30af\u30e9\u30b9\u9593\u3067\u5171\u6709\u3055\u308c\u308b\u5b9a\u6570\u3092\u5b9a\u7fa9\u3059\u308b\u3053\u3068\u3082\u53ef\u80fd\u3067\u3059\u3002<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">interface PaymentGateway {\n    const STATUS_SUCCESS = 'success';\n    const STATUS_FAILED = 'failed';\n    const STATUS_PENDING = 'pending';\n    \n    public function processPayment($amount);\n    public function getTransactionStatus($transactionId);\n}\n\nclass StripeGateway implements PaymentGateway {\n    public function processPayment($amount) {\n        \/\/ Stripe API\u3092\u4f7f\u7528\u3057\u305f\u5b9f\u88c5\n        return ['status' =&gt; self::STATUS_SUCCESS, 'transaction_id' =&gt; 'tx_123'];\n    }\n    \n    public function getTransactionStatus($transactionId) {\n        \/\/ \u30c8\u30e9\u30f3\u30b6\u30af\u30b7\u30e7\u30f3\u72b6\u614b\u306e\u53d6\u5f97\u51e6\u7406\n        return self::STATUS_PENDING;\n    }\n}\n\nclass PayPalGateway implements PaymentGateway {\n    public function processPayment($amount) {\n        \/\/ PayPal API\u3092\u4f7f\u7528\u3057\u305f\u5b9f\u88c5\n        return ['status' =&gt; self::STATUS_SUCCESS, 'transaction_id' =&gt; 'PP123456'];\n    }\n    \n    public function getTransactionStatus($transactionId) {\n        \/\/ \u30c8\u30e9\u30f3\u30b6\u30af\u30b7\u30e7\u30f3\u72b6\u614b\u306e\u53d6\u5f97\u51e6\u7406\n        return self::STATUS_SUCCESS;\n    }\n}\n\n\/\/ \u30a4\u30f3\u30bf\u30fc\u30d5\u30a7\u30fc\u30b9\u7d4c\u7531\u3067\u306e\u5b9a\u6570\u30a2\u30af\u30bb\u30b9\necho PaymentGateway::STATUS_SUCCESS; \/\/ \u51fa\u529b: success\n\n\/\/ \u5b9f\u88c5\u30af\u30e9\u30b9\u7d4c\u7531\u3067\u3082\u540c\u3058\u5b9a\u6570\u306b\u30a2\u30af\u30bb\u30b9\u53ef\u80fd\necho StripeGateway::STATUS_FAILED; \/\/ \u51fa\u529b: failed\n<\/pre>\n\n\n\n<p><strong>\u30c8\u30ec\u30a4\u30c8\u3067\u306e\u5b9a\u6570\u306e\u4f7f\u7528\uff1a<\/strong><\/p>\n\n\n\n<p>PHP 5.4\u4ee5\u964d\u3067\u5c0e\u5165\u3055\u308c\u305f\u30c8\u30ec\u30a4\u30c8\u3092\u4f7f\u7528\u3059\u308b\u3068\u3001\u8907\u6570\u306e\u30af\u30e9\u30b9\u3067\u5b9a\u6570\u3092\u542b\u3080\u5171\u901a\u306e\u30b3\u30fc\u30c9\u3092\u518d\u5229\u7528\u3067\u304d\u307e\u3059\u3002<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">trait Loggable {\n    \/\/ \u30c8\u30ec\u30a4\u30c8\u5185\u3067\u306e\u5b9a\u6570\u5b9a\u7fa9\uff08PHP 8.2\u4ee5\u964d\u3067\u30b5\u30dd\u30fc\u30c8\uff09\n    \/\/ PHP 8.2\u3088\u308a\u524d\u3067\u306f\u30c8\u30ec\u30a4\u30c8\u5185\u3067\u5b9a\u6570\u3092\u5b9a\u7fa9\u3067\u304d\u306a\u3044\n    public const LOG_LEVEL_DEBUG = 1;\n    public const LOG_LEVEL_INFO = 2;\n    public const LOG_LEVEL_ERROR = 3;\n    \n    protected function log($message, $level = self::LOG_LEVEL_INFO) {\n        $levelName = match($level) {\n            self::LOG_LEVEL_DEBUG =&gt; 'DEBUG',\n            self::LOG_LEVEL_INFO =&gt; 'INFO',\n            self::LOG_LEVEL_ERROR =&gt; 'ERROR',\n            default =&gt; 'UNKNOWN'\n        };\n        \n        echo \"[$levelName] $message in \" . __CLASS__;\n    }\n}\n\nclass UserRepository {\n    use Loggable;\n    \n    public function findById($id) {\n        $this-&gt;log(\"Finding user with ID: $id\", self::LOG_LEVEL_DEBUG);\n        \/\/ \u30e6\u30fc\u30b6\u30fc\u691c\u7d22\u30ed\u30b8\u30c3\u30af\n    }\n}\n<\/pre>\n\n\n\n<p>PHP\u306e\u5b9a\u6570\u3092\u9ad8\u5ea6\u306b\u6d3b\u7528\u3059\u308b\u3053\u3068\u3067\u3001\u30b3\u30fc\u30c9\u306e\u4fdd\u5b88\u6027\u3068\u4e00\u8cab\u6027\u3092\u5927\u5e45\u306b\u5411\u4e0a\u3055\u305b\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002\u7279\u306b\u6700\u65b0\u306ePHP\u30d0\u30fc\u30b8\u30e7\u30f3\u3067\u8ffd\u52a0\u3055\u308c\u305f\u6a5f\u80fd\u3092\u6d3b\u7528\u3059\u308b\u3053\u3068\u3067\u3001\u3088\u308a\u52b9\u7387\u7684\u3067\u5805\u7262\u306a\u30b3\u30fc\u30c9\u3092\u66f8\u304f\u3053\u3068\u304c\u3067\u304d\u308b\u3067\u3057\u3087\u3046\u3002\u6b21\u7ae0\u3067\u306f\u3001\u5b9f\u969b\u306e\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u306b\u304a\u3051\u308b\u5b9a\u6570\u306e\u5177\u4f53\u7684\u306a\u6d3b\u7528\u4f8b\u3092\u898b\u3066\u3044\u304d\u307e\u3059\u3002<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"i-20\">\u5b9f\u969b\u306e\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u3067\u5f79\u7acb\u3064PHP\u5b9a\u6570\u306e\u6d3b\u7528\u4f8b<\/h2>\n\n\n\n<p>\u3053\u308c\u307e\u3067\u7406\u8ad6\u7684\u306a\u5074\u9762\u304b\u3089 PHP \u306e\u5b9a\u6570\u306b\u3064\u3044\u3066\u89e3\u8aac\u3057\u3066\u304d\u307e\u3057\u305f\u304c\u3001\u3053\u3053\u304b\u3089\u306f\u5b9f\u969b\u306e\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u306b\u304a\u3051\u308b\u5177\u4f53\u7684\u306a\u6d3b\u7528\u4f8b\u3092\u898b\u3066\u3044\u304d\u307e\u3057\u3087\u3046\u3002\u5b9a\u6570\u306e\u9069\u5207\u306a\u6d3b\u7528\u306f\u3001\u30b3\u30fc\u30c9\u306e\u4fdd\u5b88\u6027\u3001\u5b89\u5168\u6027\u3001\u62e1\u5f35\u6027\u3092\u5927\u5e45\u306b\u5411\u4e0a\u3055\u305b\u307e\u3059\u3002<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-21\">\u8a2d\u5b9a\u60c5\u5831\u306e\u4e00\u5143\u7ba1\u7406\u306b\u3088\u308b\u4fdd\u5b88\u6027\u306e\u5411\u4e0a<\/h3>\n\n\n\n<p>\u5927\u898f\u6a21\u306a\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u3067\u306f\u3001\u8a2d\u5b9a\u60c5\u5831\u304c\u6563\u5728\u3059\u308b\u3068\u4fdd\u5b88\u304c\u56f0\u96e3\u306b\u306a\u308a\u307e\u3059\u3002\u5b9a\u6570\u3092\u4f7f\u3063\u305f\u8a2d\u5b9a\u306e\u4e00\u5143\u7ba1\u7406\u306f\u3001\u3053\u306e\u554f\u984c\u3092\u89e3\u6c7a\u3059\u308b\u52b9\u679c\u7684\u306a\u65b9\u6cd5\u3067\u3059\u3002<\/p>\n\n\n\n<p><strong>1. \u968e\u5c64\u7684\u306a\u8a2d\u5b9a\u30af\u30e9\u30b9\u306b\u3088\u308b\u7ba1\u7406<\/strong><\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">\/\/ config\/AppConfig.php\nclass AppConfig {\n    \/\/ \u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u5168\u4f53\u306e\u8a2d\u5b9a\n    const NAME = 'Dexall CMS';\n    const VERSION = '2.5.0';\n    const BASE_URL = 'https:\/\/example.com';\n    \n    \/\/ \u74b0\u5883\u8a2d\u5b9a\n    const ENVIRONMENTS = [\n        'development' =&gt; 'dev',\n        'testing' =&gt; 'test',\n        'staging' =&gt; 'stage',\n        'production' =&gt; 'prod'\n    ];\n    \n    \/\/ \u73fe\u5728\u306e\u74b0\u5883\u3092\u53d6\u5f97\n    public static function getEnvironment() {\n        $env = getenv('APP_ENV') ?: 'development';\n        return self::ENVIRONMENTS[$env] ?? self::ENVIRONMENTS['development'];\n    }\n    \n    \/\/ \u74b0\u5883\u306b\u5fdc\u3058\u305f\u8a2d\u5b9a\u5024\u3092\u53d6\u5f97\n    public static function isDevelopment() {\n        return self::getEnvironment() === self::ENVIRONMENTS['development'];\n    }\n    \n    public static function isProduction() {\n        return self::getEnvironment() === self::ENVIRONMENTS['production'];\n    }\n}\n\n\/\/ config\/DatabaseConfig.php\nclass DatabaseConfig {\n    \/\/ \u30c7\u30d5\u30a9\u30eb\u30c8\u8a2d\u5b9a\n    const DEFAULT_HOST = 'localhost';\n    const DEFAULT_PORT = 3306;\n    const DEFAULT_CHARSET = 'utf8mb4';\n    \n    \/\/ \u74b0\u5883\u3054\u3068\u306e\u8a2d\u5b9a\n    const CONNECTIONS = [\n        'development' =&gt; [\n            'host' =&gt; 'localhost',\n            'database' =&gt; 'app_dev',\n            'username' =&gt; 'dev_user',\n            'password' =&gt; 'dev_pass',\n        ],\n        'production' =&gt; [\n            'host' =&gt; 'db.example.com',\n            'database' =&gt; 'app_prod',\n            'username' =&gt; 'prod_user',\n            'password' =&gt; '', \/\/ \u74b0\u5883\u5909\u6570\u304b\u3089\u53d6\u5f97\n        ]\n    ];\n    \n    \/\/ \u73fe\u5728\u306e\u74b0\u5883\u306e\u63a5\u7d9a\u60c5\u5831\u3092\u53d6\u5f97\n    public static function getConnection() {\n        $env = AppConfig::getEnvironment();\n        $connection = self::CONNECTIONS[$env] ?? self::CONNECTIONS['development'];\n        \n        \/\/ \u672c\u756a\u74b0\u5883\u3067\u306f\u30d1\u30b9\u30ef\u30fc\u30c9\u3092\u74b0\u5883\u5909\u6570\u304b\u3089\u53d6\u5f97\n        if (AppConfig::isProduction()) {\n            $connection['password'] = getenv('DB_PASSWORD');\n        }\n        \n        return $connection;\n    }\n}\n<\/pre>\n\n\n\n<p><strong>\u4f7f\u7528\u4f8b\uff1a<\/strong><\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">\/\/ \u3069\u3053\u304b\u3089\u3067\u3082\u7c21\u5358\u306b\u30a2\u30af\u30bb\u30b9\u53ef\u80fd\necho \"\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u540d: \" . AppConfig::NAME;\n\n\/\/ \u74b0\u5883\u306b\u5fdc\u3058\u305f\u63a5\u7d9a\u60c5\u5831\u306e\u53d6\u5f97\n$dbConfig = DatabaseConfig::getConnection();\n$db = new Database(\n    $dbConfig['host'],\n    $dbConfig['database'],\n    $dbConfig['username'],\n    $dbConfig['password']\n);\n\n\/\/ \u958b\u767a\u74b0\u5883\u3067\u306e\u307f\u8a73\u7d30\u306a\u30a8\u30e9\u30fc\u8868\u793a\nif (AppConfig::isDevelopment()) {\n    ini_set('display_errors', 1);\n    error_reporting(E_ALL);\n}\n<\/pre>\n\n\n\n<p><strong>2. \u30e2\u30b8\u30e5\u30fc\u30eb\u5f0f\u306e\u8a2d\u5b9a\u7ba1\u7406<\/strong><\/p>\n\n\n\n<p>\u5927\u898f\u6a21\u306a\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u3067\u306f\u3001\u6a5f\u80fd\u3054\u3068\u306b\u8a2d\u5b9a\u3092\u5206\u5272\u3059\u308b\u3068\u7ba1\u7406\u304c\u5bb9\u6613\u306b\u306a\u308a\u307e\u3059\u3002<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">\/\/ \u57fa\u672c\u8a2d\u5b9a\u30af\u30e9\u30b9\nabstract class Config {\n    \/\/ \u5171\u901a\u306e\u30e6\u30fc\u30c6\u30a3\u30ea\u30c6\u30a3\u30e1\u30bd\u30c3\u30c9\n    protected static function getEnvOr($key, $default) {\n        $value = getenv($key);\n        return $value !== false ? $value : $default;\n    }\n}\n\n\/\/ \u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u8a2d\u5b9a\nclass AppConfig extends Config {\n    const VERSION = '1.0.0';\n    const DEBUG = true;\n    const CACHE_TTL = 3600;\n}\n\n\/\/ \u30e1\u30fc\u30eb\u8a2d\u5b9a\nclass MailConfig extends Config {\n    const DRIVER = 'smtp';\n    const HOST = 'smtp.example.com';\n    const PORT = 587;\n    const FROM_ADDRESS = 'noreply@example.com';\n    const FROM_NAME = 'System Notification';\n    \n    \/\/ \u74b0\u5883\u5909\u6570\u304b\u3089\u6a5f\u5bc6\u60c5\u5831\u3092\u53d6\u5f97\n    public static function getCredentials() {\n        return [\n            'username' =&gt; self::getEnvOr('MAIL_USERNAME', ''),\n            'password' =&gt; self::getEnvOr('MAIL_PASSWORD', '')\n        ];\n    }\n}\n\n\/\/ API\u8a2d\u5b9a\nclass ApiConfig extends Config {\n    const BASE_URL = 'https:\/\/api.example.com\/v1';\n    const TIMEOUT = 30;\n    const RETRY_ATTEMPTS = 3;\n    \n    \/\/ API\u30a8\u30f3\u30c9\u30dd\u30a4\u30f3\u30c8\n    const ENDPOINTS = [\n        'users' =&gt; '\/users',\n        'products' =&gt; '\/products',\n        'orders' =&gt; '\/orders'\n    ];\n}\n<\/pre>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-22\">\u30bb\u30ad\u30e5\u30ea\u30c6\u30a3\u5f37\u5316\u306e\u305f\u3081\u306e\u8a8d\u8a3c\u60c5\u5831\u7ba1\u7406<\/h3>\n\n\n\n<p>\u30bb\u30ad\u30e5\u30ea\u30c6\u30a3\u60c5\u5831\u306f\u3001\u30bd\u30fc\u30b9\u30b3\u30fc\u30c9\u306b\u76f4\u63a5\u66f8\u304d\u8fbc\u3080\u3079\u304d\u3067\u306f\u3042\u308a\u307e\u305b\u3093\u3002\u5b9a\u6570\u3092\u9069\u5207\u306b\u6d3b\u7528\u3059\u308b\u3053\u3068\u3067\u3001\u5b89\u5168\u6027\u3092\u9ad8\u3081\u3064\u3064\u4f7f\u3044\u3084\u3059\u3044\u30a4\u30f3\u30bf\u30fc\u30d5\u30a7\u30fc\u30b9\u3092\u63d0\u4f9b\u3067\u304d\u307e\u3059\u3002<\/p>\n\n\n\n<p><strong>1. \u74b0\u5883\u5909\u6570\u3068\u5b9a\u6570\u306e\u9023\u643a<\/strong><\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">\/\/ Security.php\nclass Security {\n    \/\/ \u76f4\u63a5\u8a18\u8ff0\u3057\u306a\u3044\u6a5f\u5bc6\u60c5\u5831\n    const API_KEY = self::getApiKey();\n    const JWT_SECRET = self::getJwtSecret();\n    \n    \/\/ \u56fa\u5b9a\u5024\u306e\u5b9a\u6570\n    const PASSWORD_MIN_LENGTH = 8;\n    const PASSWORD_HASH_ALGO = PASSWORD_BCRYPT;\n    const PASSWORD_HASH_OPTIONS = ['cost' =&gt; 12];\n    \n    \/\/ \u30c8\u30fc\u30af\u30f3\u8a2d\u5b9a\n    const TOKEN_EXPIRY = 3600; \/\/ 1\u6642\u9593\uff08\u79d2\uff09\n    \n    \/\/ \u74b0\u5883\u5909\u6570\u304b\u3089\u5b89\u5168\u306b\u6a5f\u5bc6\u60c5\u5831\u3092\u53d6\u5f97\n    private static function getApiKey() {\n        $key = getenv('API_KEY');\n        if (!$key) {\n            throw new RuntimeException('API key not configured');\n        }\n        return $key;\n    }\n    \n    private static function getJwtSecret() {\n        $secret = getenv('JWT_SECRET');\n        if (!$secret) {\n            \/\/ \u958b\u767a\u74b0\u5883\u7528\u306e\u30d5\u30a9\u30fc\u30eb\u30d0\u30c3\u30af\n            if (getenv('APP_ENV') === 'development') {\n                return 'dev_secret_key_do_not_use_in_production';\n            }\n            throw new RuntimeException('JWT secret not configured');\n        }\n        return $secret;\n    }\n    \n    \/\/ \u5b89\u5168\u306a\u30d1\u30b9\u30ef\u30fc\u30c9\u30cf\u30c3\u30b7\u30e5\u3092\u751f\u6210\n    public static function hashPassword($password) {\n        if (strlen($password) &lt; self::PASSWORD_MIN_LENGTH) {\n            throw new InvalidArgumentException(\n                'Password must be at least ' . self::PASSWORD_MIN_LENGTH . ' characters'\n            );\n        }\n        return password_hash($password, self::PASSWORD_HASH_ALGO, self::PASSWORD_HASH_OPTIONS);\n    }\n    \n    \/\/ \u30c8\u30fc\u30af\u30f3\u3092\u691c\u8a3c\n    public static function verifyToken($token) {\n        try {\n            \/\/ JWT\u691c\u8a3c\u30ed\u30b8\u30c3\u30af\n            \/\/ ...\n        } catch (Exception $e) {\n            return false;\n        }\n    }\n}\n<\/pre>\n\n\n\n<p><strong>2. \u74b0\u5883\u3054\u3068\u306e\u8a2d\u5b9a\u30d5\u30a1\u30a4\u30eb\u3068\u5b9a\u6570\u306e\u6d3b\u7528<\/strong><\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">\/\/ config\/credentials.php (\u30d0\u30fc\u30b8\u30e7\u30f3\u7ba1\u7406\u5bfe\u8c61\u5916)\nreturn [\n    'api_keys' =&gt; [\n        'stripe' =&gt; getenv('STRIPE_API_KEY'),\n        'mailchimp' =&gt; getenv('MAILCHIMP_API_KEY'),\n        'google_maps' =&gt; getenv('GOOGLE_MAPS_API_KEY')\n    ],\n    'database' =&gt; [\n        'password' =&gt; getenv('DB_PASSWORD')\n    ]\n];\n\n\/\/ Credentials.php\nclass Credentials {\n    private static $credentials = null;\n    \n    \/\/ \u8a2d\u5b9a\u30d5\u30a1\u30a4\u30eb\u304b\u3089\u8a8d\u8a3c\u60c5\u5831\u3092\u4e00\u5ea6\u3060\u3051\u30ed\u30fc\u30c9\n    private static function load() {\n        if (self::$credentials === null) {\n            $file = __DIR__ . '\/..\/config\/credentials.php';\n            if (!file_exists($file)) {\n                throw new RuntimeException('Credentials file not found');\n            }\n            self::$credentials = require $file;\n        }\n        return self::$credentials;\n    }\n    \n    \/\/ API\u30ad\u30fc\u3092\u53d6\u5f97\n    public static function getApiKey($service) {\n        $credentials = self::load();\n        if (!isset($credentials['api_keys'][$service])) {\n            throw new InvalidArgumentException(\"API key for '$service' not found\");\n        }\n        return $credentials['api_keys'][$service];\n    }\n    \n    \/\/ \u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u30d1\u30b9\u30ef\u30fc\u30c9\u3092\u53d6\u5f97\n    public static function getDatabasePassword() {\n        $credentials = self::load();\n        return $credentials['database']['password'];\n    }\n}\n\n\/\/ \u4f7f\u7528\u4f8b\n$stripeApiKey = Credentials::getApiKey('stripe');\n$dbPassword = Credentials::getDatabasePassword();\n<\/pre>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-23\">\u591a\u8a00\u8a9e\u5bfe\u5fdc\u30b5\u30a4\u30c8\u3067\u306e\u5b9a\u6570\u6d3b\u7528\u6cd5<\/h3>\n\n\n\n<p>\u56fd\u969b\u5316\uff08i18n\uff09\u5bfe\u5fdc\u306e\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u3067\u306f\u3001\u8a00\u8a9e\u30ea\u30bd\u30fc\u30b9\u306e\u7ba1\u7406\u304c\u91cd\u8981\u3067\u3059\u3002\u5b9a\u6570\u3092\u6d3b\u7528\u3059\u308b\u3053\u3068\u3067\u3001\u52b9\u7387\u7684\u306a\u591a\u8a00\u8a9e\u5bfe\u5fdc\u3092\u5b9f\u73fe\u3067\u304d\u307e\u3059\u3002<\/p>\n\n\n\n<p><strong>1. \u8a00\u8a9e\u30d5\u30a1\u30a4\u30eb\u3068\u5b9a\u6570\u306e\u9023\u643a<\/strong><\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">\/\/ LanguageManager.php\nclass LanguageManager {\n    \/\/ \u5bfe\u5fdc\u8a00\u8a9e\n    const SUPPORTED_LANGUAGES = [\n        'ja' =&gt; '\u65e5\u672c\u8a9e',\n        'en' =&gt; 'English',\n        'es' =&gt; 'Espa\u00f1ol',\n        'fr' =&gt; 'Fran\u00e7ais'\n    ];\n    \n    \/\/ \u30c7\u30d5\u30a9\u30eb\u30c8\u8a00\u8a9e\n    const DEFAULT_LANGUAGE = 'ja';\n    \n    \/\/ \u8a00\u8a9e\u30ea\u30bd\u30fc\u30b9\u30ad\u30e3\u30c3\u30b7\u30e5\n    private static $resources = [];\n    \n    \/\/ \u73fe\u5728\u306e\u8a00\u8a9e\u3092\u53d6\u5f97\n    public static function getCurrentLanguage() {\n        $lang = $_GET['lang'] ?? $_SESSION['lang'] ?? self::DEFAULT_LANGUAGE;\n        return isset(self::SUPPORTED_LANGUAGES[$lang]) ? $lang : self::DEFAULT_LANGUAGE;\n    }\n    \n    \/\/ \u8a00\u8a9e\u30ea\u30bd\u30fc\u30b9\u3092\u53d6\u5f97\n    public static function getResource($key, $lang = null) {\n        $lang = $lang ?? self::getCurrentLanguage();\n        \n        \/\/ \u30ea\u30bd\u30fc\u30b9\u304c\u307e\u3060\u30ed\u30fc\u30c9\u3055\u308c\u3066\u3044\u306a\u3051\u308c\u3070\u30ed\u30fc\u30c9\n        if (!isset(self::$resources[$lang])) {\n            self::loadLanguageResources($lang);\n        }\n        \n        return self::$resources[$lang][$key] ?? $key;\n    }\n    \n    \/\/ \u8a00\u8a9e\u30ea\u30bd\u30fc\u30b9\u30d5\u30a1\u30a4\u30eb\u3092\u30ed\u30fc\u30c9\n    private static function loadLanguageResources($lang) {\n        $file = __DIR__ . \"\/languages\/{$lang}.php\";\n        if (file_exists($file)) {\n            self::$resources[$lang] = require $file;\n        } else {\n            \/\/ \u30d5\u30a9\u30fc\u30eb\u30d0\u30c3\u30af\n            self::$resources[$lang] = require __DIR__ . \"\/languages\/\" . self::DEFAULT_LANGUAGE . \".php\";\n        }\n    }\n    \n    \/\/ \u77ed\u7e2e\u5f62\uff08\u7ffb\u8a33\u30d8\u30eb\u30d1\u30fc\u95a2\u6570\uff09\n    public static function t($key, $lang = null) {\n        return self::getResource($key, $lang);\n    }\n}\n\n\/\/ languages\/ja.php\nreturn [\n    'welcome' =&gt; '\u3088\u3046\u3053\u305d',\n    'login' =&gt; '\u30ed\u30b0\u30a4\u30f3',\n    'register' =&gt; '\u767b\u9332',\n    'email' =&gt; '\u30e1\u30fc\u30eb\u30a2\u30c9\u30ec\u30b9',\n    'password' =&gt; '\u30d1\u30b9\u30ef\u30fc\u30c9',\n    \/\/ ...\n];\n\n\/\/ languages\/en.php\nreturn [\n    'welcome' =&gt; 'Welcome',\n    'login' =&gt; 'Login',\n    'register' =&gt; 'Register',\n    'email' =&gt; 'Email',\n    'password' =&gt; 'Password',\n    \/\/ ...\n];\n<\/pre>\n\n\n\n<p><strong>\u4f7f\u7528\u4f8b\uff1a<\/strong><\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">\/\/ \u30c6\u30f3\u30d7\u30ec\u30fc\u30c8\u5185\u3067\u306e\u4f7f\u7528\n&lt;h1&gt;&lt;?= LanguageManager::t('welcome') ?&gt;&lt;\/h1&gt;\n&lt;form&gt;\n    &lt;label for=\"email\"&gt;&lt;?= LanguageManager::t('email') ?&gt;&lt;\/label&gt;\n    &lt;input type=\"email\" id=\"email\" name=\"email\"&gt;\n    \n    &lt;label for=\"password\"&gt;&lt;?= LanguageManager::t('password') ?&gt;&lt;\/label&gt;\n    &lt;input type=\"password\" id=\"password\" name=\"password\"&gt;\n    \n    &lt;button type=\"submit\"&gt;&lt;?= LanguageManager::t('login') ?&gt;&lt;\/button&gt;\n&lt;\/form&gt;\n\n\/\/ \u8a00\u8a9e\u5207\u308a\u66ff\u3048\u30ea\u30f3\u30af\n&lt;?php foreach (LanguageManager::SUPPORTED_LANGUAGES as $code =&gt; $name): ?&gt;\n    &lt;a href=\"?lang=&lt;?= $code ?&gt;\"&gt;&lt;?= $name ?&gt;&lt;\/a&gt;\n&lt;?php endforeach; ?&gt;\n<\/pre>\n\n\n\n<p><strong>2. \u8a00\u8a9e\u56fa\u6709\u306e\u5b9a\u6570\u306e\u7ba1\u7406<\/strong><\/p>\n\n\n\n<p>\u56fd\u3054\u3068\u306b\u7570\u306a\u308b\u5024\uff08\u65e5\u4ed8\u5f62\u5f0f\u3001\u901a\u8ca8\u8a18\u53f7\u306a\u3069\uff09\u3082\u5b9a\u6570\u3067\u7ba1\u7406\u3067\u304d\u307e\u3059\u3002<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">\/\/ LocalizationConfig.php\nclass LocalizationConfig {\n    \/\/ \u65e5\u4ed8\u30d5\u30a9\u30fc\u30de\u30c3\u30c8\n    const DATE_FORMATS = [\n        'ja' =&gt; 'Y\u5e74m\u6708d\u65e5',\n        'en' =&gt; 'Y-m-d',\n        'fr' =&gt; 'd\/m\/Y',\n        'de' =&gt; 'd.m.Y'\n    ];\n    \n    \/\/ \u901a\u8ca8\u30d5\u30a9\u30fc\u30de\u30c3\u30c8\n    const CURRENCY_FORMATS = [\n        'ja' =&gt; ['symbol' =&gt; '\u00a5', 'position' =&gt; 'before', 'thousands_sep' =&gt; ',', 'decimal_sep' =&gt; '.'],\n        'en' =&gt; ['symbol' =&gt; '$', 'position' =&gt; 'before', 'thousands_sep' =&gt; ',', 'decimal_sep' =&gt; '.'],\n        'fr' =&gt; ['symbol' =&gt; '\u20ac', 'position' =&gt; 'after', 'thousands_sep' =&gt; ' ', 'decimal_sep' =&gt; ','],\n        'de' =&gt; ['symbol' =&gt; '\u20ac', 'position' =&gt; 'after', 'thousands_sep' =&gt; '.', 'decimal_sep' =&gt; ',']\n    ];\n    \n    \/\/ \u73fe\u5728\u306e\u30ed\u30b1\u30fc\u30eb\u306e\u65e5\u4ed8\u30d5\u30a9\u30fc\u30de\u30c3\u30c8\u3092\u53d6\u5f97\n    public static function getDateFormat($lang = null) {\n        $lang = $lang ?? LanguageManager::getCurrentLanguage();\n        return self::DATE_FORMATS[$lang] ?? self::DATE_FORMATS[LanguageManager::DEFAULT_LANGUAGE];\n    }\n    \n    \/\/ \u73fe\u5728\u306e\u30ed\u30b1\u30fc\u30eb\u3067\u65e5\u4ed8\u3092\u30d5\u30a9\u30fc\u30de\u30c3\u30c8\n    public static function formatDate($timestamp, $lang = null) {\n        return date(self::getDateFormat($lang), $timestamp);\n    }\n    \n    \/\/ \u91d1\u984d\u3092\u30d5\u30a9\u30fc\u30de\u30c3\u30c8\n    public static function formatCurrency($amount, $lang = null) {\n        $lang = $lang ?? LanguageManager::getCurrentLanguage();\n        $format = self::CURRENCY_FORMATS[$lang] ?? self::CURRENCY_FORMATS[LanguageManager::DEFAULT_LANGUAGE];\n        \n        $formatted = number_format(\n            $amount,\n            2,\n            $format['decimal_sep'],\n            $format['thousands_sep']\n        );\n        \n        if ($format['position'] === 'before') {\n            return $format['symbol'] . $formatted;\n        } else {\n            return $formatted . ' ' . $format['symbol'];\n        }\n    }\n}\n\n\/\/ \u4f7f\u7528\u4f8b\necho LocalizationConfig::formatDate(time()); \/\/ \u65e5\u672c\u8a9e\u306a\u3089\u300c2025\u5e7404\u670811\u65e5\u300d\necho LocalizationConfig::formatCurrency(1234.56); \/\/ \u65e5\u672c\u8a9e\u306a\u3089\u300c\u00a51,234.56\u300d\n<\/pre>\n\n\n\n<p><strong>3. \u591a\u8a00\u8a9e\u5bfe\u5fdc\u30d5\u30a9\u30fc\u30e0\u30d0\u30ea\u30c7\u30fc\u30b7\u30e7\u30f3\u30e1\u30c3\u30bb\u30fc\u30b8<\/strong><\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">\/\/ ValidationMessages.php\nclass ValidationMessages {\n    const MESSAGES = [\n        'ja' =&gt; [\n            'required' =&gt; '{field}\u306f\u5fc5\u9808\u9805\u76ee\u3067\u3059',\n            'email' =&gt; '{field}\u306f\u6709\u52b9\u306a\u30e1\u30fc\u30eb\u30a2\u30c9\u30ec\u30b9\u3067\u3042\u308b\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059',\n            'min_length' =&gt; '{field}\u306f{param}\u6587\u5b57\u4ee5\u4e0a\u3067\u3042\u308b\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059',\n            'max_length' =&gt; '{field}\u306f{param}\u6587\u5b57\u4ee5\u4e0b\u3067\u3042\u308b\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059',\n            'numeric' =&gt; '{field}\u306f\u6570\u5024\u3067\u3042\u308b\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059',\n            'alpha' =&gt; '{field}\u306f\u30a2\u30eb\u30d5\u30a1\u30d9\u30c3\u30c8\u306e\u307f\u4f7f\u7528\u3067\u304d\u307e\u3059',\n            'alpha_numeric' =&gt; '{field}\u306f\u82f1\u6570\u5b57\u306e\u307f\u4f7f\u7528\u3067\u304d\u307e\u3059',\n            'match' =&gt; '{field}\u304c\u4e00\u81f4\u3057\u307e\u305b\u3093'\n        ],\n        'en' =&gt; [\n            'required' =&gt; '{field} is required',\n            'email' =&gt; '{field} must be a valid email address',\n            'min_length' =&gt; '{field} must be at least {param} characters',\n            'max_length' =&gt; '{field} must not exceed {param} characters',\n            'numeric' =&gt; '{field} must be numeric',\n            'alpha' =&gt; '{field} must contain only alphabetic characters',\n            'alpha_numeric' =&gt; '{field} must contain only alpha-numeric characters',\n            'match' =&gt; '{field} does not match'\n        ]\n    ];\n    \n    \/\/ \u30d5\u30a3\u30fc\u30eb\u30c9\u540d\u306e\u7ffb\u8a33\n    const FIELD_NAMES = [\n        'ja' =&gt; [\n            'name' =&gt; '\u540d\u524d',\n            'email' =&gt; '\u30e1\u30fc\u30eb\u30a2\u30c9\u30ec\u30b9',\n            'password' =&gt; '\u30d1\u30b9\u30ef\u30fc\u30c9',\n            'password_confirm' =&gt; '\u30d1\u30b9\u30ef\u30fc\u30c9\uff08\u78ba\u8a8d\uff09',\n            'address' =&gt; '\u4f4f\u6240',\n            'phone' =&gt; '\u96fb\u8a71\u756a\u53f7'\n        ],\n        'en' =&gt; [\n            'name' =&gt; 'Name',\n            'email' =&gt; 'Email',\n            'password' =&gt; 'Password',\n            'password_confirm' =&gt; 'Password Confirmation',\n            'address' =&gt; 'Address',\n            'phone' =&gt; 'Phone Number'\n        ]\n    ];\n    \n    \/\/ \u30a8\u30e9\u30fc\u30e1\u30c3\u30bb\u30fc\u30b8\u3092\u53d6\u5f97\n    public static function get($rule, $field, $param = null, $lang = null) {\n        $lang = $lang ?? LanguageManager::getCurrentLanguage();\n        $messages = self::MESSAGES[$lang] ?? self::MESSAGES[LanguageManager::DEFAULT_LANGUAGE];\n        $fieldNames = self::FIELD_NAMES[$lang] ?? self::FIELD_NAMES[LanguageManager::DEFAULT_LANGUAGE];\n        \n        $message = $messages[$rule] ?? 'Validation error';\n        $fieldName = $fieldNames[$field] ?? $field;\n        \n        $message = str_replace('{field}', $fieldName, $message);\n        \n        if ($param !== null) {\n            $message = str_replace('{param}', $param, $message);\n        }\n        \n        return $message;\n    }\n}\n\n\/\/ \u4f7f\u7528\u4f8b\n$validator = new Validator();\n$validator-&gt;required('email')-&gt;email('email')-&gt;min_length('password', 8);\n\nif (!$validator-&gt;validate($_POST)) {\n    $errors = $validator-&gt;getErrors();\n    foreach ($errors as $field =&gt; $error) {\n        echo ValidationMessages::get($error['rule'], $field, $error['param']);\n    }\n}\n<\/pre>\n\n\n\n<p>\u3053\u306e\u3088\u3046\u306b\u3001PHP\u306e\u5b9a\u6570\u3092\u6d3b\u7528\u3059\u308b\u3053\u3068\u3067\u3001\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u306e\u8a2d\u5b9a\u7ba1\u7406\u3001\u30bb\u30ad\u30e5\u30ea\u30c6\u30a3\u3001\u591a\u8a00\u8a9e\u5bfe\u5fdc\u306a\u3069\u3001\u69d8\u3005\u306a\u5074\u9762\u3067\u4fdd\u5b88\u6027\u3068\u5b89\u5168\u6027\u3092\u5411\u4e0a\u3055\u305b\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002\u5b9f\u969b\u306e\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u3067\u306f\u3001\u3053\u308c\u3089\u306e\u4f8b\u3092\u53c2\u8003\u306b\u3001\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u306e\u8981\u4ef6\u306b\u5408\u308f\u305b\u305f\u30ab\u30b9\u30bf\u30de\u30a4\u30ba\u3092\u884c\u3046\u3053\u3068\u3067\u3001\u3088\u308a\u52b9\u7387\u7684\u306a\u958b\u767a\u304c\u53ef\u80fd\u306b\u306a\u308a\u307e\u3059\u3002<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"i-24\">PHP\u5b9a\u6570\u306e\u30d1\u30d5\u30a9\u30fc\u30de\u30f3\u30b9\u3068\u6700\u9069\u5316\u306e\u79d8\u8a23<\/h2>\n\n\n\n<p>\u5b9a\u6570\u306f\u5024\u306e\u5909\u66f4\u304c\u4e0d\u53ef\u80fd\u3068\u3044\u3046\u7279\u6027\u4ee5\u5916\u306b\u3001\u30d1\u30d5\u30a9\u30fc\u30de\u30f3\u30b9\u9762\u3067\u3082\u5909\u6570\u3068\u7570\u306a\u308b\u632f\u308b\u821e\u3044\u3092\u793a\u3057\u307e\u3059\u3002\u7279\u306b\u5927\u898f\u6a21\u306a\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u3067\u306f\u3001\u5b9a\u6570\u306e\u6d3b\u7528\u65b9\u6cd5\u306b\u3088\u3063\u3066\u30d1\u30d5\u30a9\u30fc\u30de\u30f3\u30b9\u306b\u5927\u304d\u306a\u5dee\u304c\u751f\u3058\u308b\u3053\u3068\u304c\u3042\u308a\u307e\u3059\u3002\u3053\u306e\u7ae0\u3067\u306f\u3001PHP\u306e\u5b9a\u6570\u306b\u95a2\u3059\u308b\u30d1\u30d5\u30a9\u30fc\u30de\u30f3\u30b9\u306e\u5074\u9762\u3068\u6700\u9069\u5316\u30c6\u30af\u30cb\u30c3\u30af\u306b\u3064\u3044\u3066\u89e3\u8aac\u3057\u307e\u3059\u3002<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-25\">\u5b9a\u6570\u3068\u5909\u6570\u306e\u30d1\u30d5\u30a9\u30fc\u30de\u30f3\u30b9\u6bd4\u8f03\u691c\u8a3c<\/h3>\n\n\n\n<p>\u5b9a\u6570\u3068\u5909\u6570\u306fPHP\u30a8\u30f3\u30b8\u30f3\u5185\u90e8\u3067\u7570\u306a\u308b\u51e6\u7406\u304c\u306a\u3055\u308c\u308b\u305f\u3081\u3001\u30d1\u30d5\u30a9\u30fc\u30de\u30f3\u30b9\u7279\u6027\u306b\u3082\u9055\u3044\u304c\u3042\u308a\u307e\u3059\u3002\u5b9f\u969b\u306e\u30d9\u30f3\u30c1\u30de\u30fc\u30af\u3092\u901a\u3058\u3066\u3001\u3053\u308c\u3089\u306e\u9055\u3044\u3092\u691c\u8a3c\u3057\u3066\u307f\u307e\u3057\u3087\u3046\u3002<\/p>\n\n\n\n<p><strong>1. \u30e1\u30e2\u30ea\u4f7f\u7528\u91cf\u306e\u6bd4\u8f03<\/strong><\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">\/\/ \u30e1\u30e2\u30ea\u4f7f\u7528\u91cf\u8a08\u6e2c\u7528\u306e\u95a2\u6570\nfunction getMemoryUsage() {\n    return memory_get_usage(true);\n}\n\n\/\/ \u8a08\u6e2c\u958b\u59cb\n$startMemory = getMemoryUsage();\n\n\/\/ 1000\u500b\u306e\u5909\u6570\u3092\u5b9a\u7fa9\nfor ($i = 0; $i &lt; 1000; $i++) {\n    ${\"var_$i\"} = \"value_$i\";\n}\n\n$variablesMemory = getMemoryUsage() - $startMemory;\necho \"1000\u500b\u306e\u5909\u6570\u3092\u5b9a\u7fa9\u3057\u305f\u5f8c\u306e\u30e1\u30e2\u30ea\u4f7f\u7528\u91cf: \" . ($variablesMemory \/ 1024) . \" KB\\n\";\n\n\/\/ \u30e1\u30e2\u30ea\u3092\u30ea\u30bb\u30c3\u30c8\uff08\u6e2c\u5b9a\u7cbe\u5ea6\u5411\u4e0a\u306e\u305f\u3081\uff09\nfor ($i = 0; $i &lt; 1000; $i++) {\n    unset(${\"var_$i\"});\n}\n\n\/\/ \u5b9a\u6570\u5b9a\u7fa9\u306e\u8a08\u6e2c\u958b\u59cb\n$startMemory = getMemoryUsage();\n\n\/\/ 1000\u500b\u306e\u5b9a\u6570\u3092\u5b9a\u7fa9\nfor ($i = 0; $i &lt; 1000; $i++) {\n    define(\"CONST_$i\", \"value_$i\");\n}\n\n$constantsMemory = getMemoryUsage() - $startMemory;\necho \"1000\u500b\u306e\u5b9a\u6570\u3092\u5b9a\u7fa9\u3057\u305f\u5f8c\u306e\u30e1\u30e2\u30ea\u4f7f\u7528\u91cf: \" . ($constantsMemory \/ 1024) . \" KB\\n\";\n\necho \"\u5dee\u5206: \" . (($variablesMemory - $constantsMemory) \/ 1024) . \" KB\\n\";\n<\/pre>\n\n\n\n<p>\u4e0a\u8a18\u306e\u30d9\u30f3\u30c1\u30de\u30fc\u30af\u3067\u306f\u30011000\u500b\u306e\u5909\u6570\u30681000\u500b\u306e\u5b9a\u6570\u3092\u5b9a\u7fa9\u3057\u305f\u5834\u5408\u306e\u30e1\u30e2\u30ea\u4f7f\u7528\u91cf\u3092\u6bd4\u8f03\u3057\u3066\u3044\u307e\u3059\u3002\u7d50\u679c\u306f\u74b0\u5883\u306b\u3088\u3063\u3066\u7570\u306a\u308a\u307e\u3059\u304c\u3001\u4e00\u822c\u7684\u306b\u5b9a\u6570\u306e\u65b9\u304c\u30e1\u30e2\u30ea\u4f7f\u7528\u91cf\u304c\u5c11\u306a\u3044\u50be\u5411\u304c\u3042\u308a\u307e\u3059\u3002<\/p>\n\n\n\n<p><strong>\u5b9f\u884c\u7d50\u679c\u4f8b\uff1a<\/strong><\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">1000\u500b\u306e\u5909\u6570\u3092\u5b9a\u7fa9\u3057\u305f\u5f8c\u306e\u30e1\u30e2\u30ea\u4f7f\u7528\u91cf: 128.0 KB\n1000\u500b\u306e\u5b9a\u6570\u3092\u5b9a\u7fa9\u3057\u305f\u5f8c\u306e\u30e1\u30e2\u30ea\u4f7f\u7528\u91cf: 96.0 KB\n\u5dee\u5206: 32.0 KB\n<\/pre>\n\n\n\n<p><strong>2. \u30a2\u30af\u30bb\u30b9\u901f\u5ea6\u306e\u6bd4\u8f03<\/strong><\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">\/\/ \u5b9a\u6570\u3068\u5909\u6570\u306e\u30a2\u30af\u30bb\u30b9\u901f\u5ea6\u6bd4\u8f03\ndefine('TEST_CONSTANT', 'constant_value');\n$test_variable = 'variable_value';\n\n\/\/ \u30d9\u30f3\u30c1\u30de\u30fc\u30af\u56de\u6570\n$iterations = 10000000;\n\n\/\/ \u5909\u6570\u30a2\u30af\u30bb\u30b9\u306e\u30d9\u30f3\u30c1\u30de\u30fc\u30af\n$start = microtime(true);\nfor ($i = 0; $i &lt; $iterations; $i++) {\n    $dummy = $test_variable;\n}\n$variableTime = microtime(true) - $start;\necho \"\u5909\u6570\u3078\u306e\u30a2\u30af\u30bb\u30b9 {$iterations}\u56de\u306e\u5b9f\u884c\u6642\u9593: \" . ($variableTime) . \" \u79d2\\n\";\n\n\/\/ \u5b9a\u6570\u30a2\u30af\u30bb\u30b9\u306e\u30d9\u30f3\u30c1\u30de\u30fc\u30af\n$start = microtime(true);\nfor ($i = 0; $i &lt; $iterations; $i++) {\n    $dummy = TEST_CONSTANT;\n}\n$constantTime = microtime(true) - $start;\necho \"\u5b9a\u6570\u3078\u306e\u30a2\u30af\u30bb\u30b9 {$iterations}\u56de\u306e\u5b9f\u884c\u6642\u9593: \" . ($constantTime) . \" \u79d2\\n\";\n\necho \"\u5b9a\u6570\u306f\u5909\u6570\u3088\u308a\u3082 \" . (($variableTime \/ $constantTime - 1) * 100) . \"% \u9ad8\u901f\\n\";\n<\/pre>\n\n\n\n<p>\u3053\u306e\u8a08\u6e2c\u3067\u3082\u3001\u74b0\u5883\u3084PHP\u306e\u30d0\u30fc\u30b8\u30e7\u30f3\u306b\u3088\u3063\u3066\u7d50\u679c\u306f\u7570\u306a\u308a\u307e\u3059\u304c\u3001\u4e00\u822c\u7684\u306b\u5b9a\u6570\u3078\u306e\u30a2\u30af\u30bb\u30b9\u306f\u5909\u6570\u3078\u306e\u30a2\u30af\u30bb\u30b9\u3088\u308a\u3082\u82e5\u5e72\u9ad8\u901f\u3067\u3059\u3002<\/p>\n\n\n\n<p><strong>\u5b9f\u884c\u7d50\u679c\u4f8b\uff1a<\/strong><\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">\u5909\u6570\u3078\u306e\u30a2\u30af\u30bb\u30b9 10000000\u56de\u306e\u5b9f\u884c\u6642\u9593: 0.1523 \u79d2\n\u5b9a\u6570\u3078\u306e\u30a2\u30af\u30bb\u30b9 10000000\u56de\u306e\u5b9f\u884c\u6642\u9593: 0.1287 \u79d2\n\u5b9a\u6570\u306f\u5909\u6570\u3088\u308a\u3082 18.34% \u9ad8\u901f\n<\/pre>\n\n\n\n<p><strong>3. define() vs const \u306e\u30d1\u30d5\u30a9\u30fc\u30de\u30f3\u30b9\u6bd4\u8f03<\/strong><\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">\/\/ define()\u3068const\u306e\u30d1\u30d5\u30a9\u30fc\u30de\u30f3\u30b9\u6bd4\u8f03\n$iterations = 1000;\n\n\/\/ define()\u306e\u30d9\u30f3\u30c1\u30de\u30fc\u30af\n$start = microtime(true);\nfor ($i = 0; $i &lt; $iterations; $i++) {\n    define(\"DEFINE_CONST_{$i}\", \"value_{$i}\");\n}\n$defineTime = microtime(true) - $start;\necho \"define()\u3067{$iterations}\u500b\u306e\u5b9a\u6570\u3092\u5b9a\u7fa9\u3059\u308b\u6642\u9593: \" . ($defineTime) . \" \u79d2\\n\";\n\n\/\/ const\u306e\u30d9\u30f3\u30c1\u30de\u30fc\u30af\uff08\u30af\u30e9\u30b9\u5185\u3067\u5b9a\u7fa9\uff09\n$start = microtime(true);\n$code = \"class ConstTest {\\n\";\nfor ($i = 0; $i &lt; $iterations; $i++) {\n    $code .= \"    const CONST_{$i} = 'value_{$i}';\\n\";\n}\n$code .= \"}\\n\";\neval($code);\n$constTime = microtime(true) - $start;\necho \"const\u3067{$iterations}\u500b\u306e\u5b9a\u6570\u3092\u5b9a\u7fa9\u3059\u308b\u6642\u9593: \" . ($constTime) . \" \u79d2\\n\";\n\necho \"const\u3068define()\u306e\u6642\u9593\u6bd4: \" . ($constTime \/ $defineTime) . \"\\n\";\n<\/pre>\n\n\n\n<p>\u3053\u306e\u6e2c\u5b9a\u7d50\u679c\u3082\u74b0\u5883\u306b\u3088\u3063\u3066\u7570\u306a\u308a\u307e\u3059\u304c\u3001\u4e00\u822c\u7684\u306b\u5c11\u6570\u306e\u5b9a\u6570\u3092\u5b9a\u7fa9\u3059\u308b\u5834\u5408\u306f <code>const<\/code> \u30ad\u30fc\u30ef\u30fc\u30c9\u306e\u65b9\u304c\u9ad8\u901f\u3067\u3001\u5927\u91cf\u306e\u5b9a\u6570\u3092\u52d5\u7684\u306b\u5b9a\u7fa9\u3059\u308b\u5fc5\u8981\u304c\u3042\u308b\u5834\u5408\u306f <code>define()<\/code> \u95a2\u6570\u304c\u9069\u3057\u3066\u3044\u307e\u3059\u3002<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-26\">\u30e1\u30e2\u30ea\u4f7f\u7528\u91cf\u3092\u6700\u9069\u5316\u3059\u308b\u30c6\u30af\u30cb\u30c3\u30af<\/h3>\n\n\n\n<p>\u5927\u898f\u6a21\u306a\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u3067\u306f\u3001\u5b9a\u6570\u306e\u6700\u9069\u306a\u4f7f\u7528\u306b\u3088\u3063\u3066\u30e1\u30e2\u30ea\u4f7f\u7528\u91cf\u3092\u524a\u6e1b\u3067\u304d\u307e\u3059\u3002<\/p>\n\n\n\n<p><strong>1. \u540d\u524d\u7a7a\u9593\u3092\u6d3b\u7528\u3057\u305f\u5b9a\u6570\u306e\u30b0\u30eb\u30fc\u30d7\u5316<\/strong><\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">\/\/ \u975e\u52b9\u7387\u306a\u30a2\u30d7\u30ed\u30fc\u30c1\uff08\u30b0\u30ed\u30fc\u30d0\u30eb\u540d\u524d\u7a7a\u9593\u3092\u6c5a\u67d3\uff09\ndefine('DB_HOST', 'localhost');\ndefine('DB_USER', 'root');\ndefine('DB_PASS', 'password');\ndefine('DB_NAME', 'myapp');\ndefine('REDIS_HOST', 'localhost');\ndefine('REDIS_PORT', 6379);\ndefine('MAIL_HOST', 'smtp.example.com');\ndefine('MAIL_PORT', 587);\n\n\/\/ \u52b9\u7387\u7684\u306a\u30a2\u30d7\u30ed\u30fc\u30c1\uff08\u540d\u524d\u7a7a\u9593\u3067\u6574\u7406\uff09\nnamespace App\\Config;\n\nclass Database {\n    const HOST = 'localhost';\n    const USER = 'root';\n    const PASS = 'password';\n    const NAME = 'myapp';\n}\n\nclass Redis {\n    const HOST = 'localhost';\n    const PORT = 6379;\n}\n\nclass Mail {\n    const HOST = 'smtp.example.com';\n    const PORT = 587;\n}\n\n\/\/ \u4f7f\u7528\u4f8b\nuse App\\Config\\Database;\necho Database::HOST; \/\/ localhost\n<\/pre>\n\n\n\n<p>\u540d\u524d\u7a7a\u9593\u3068\u30af\u30e9\u30b9\u3092\u4f7f\u3063\u3066\u5b9a\u6570\u3092\u30b0\u30eb\u30fc\u30d7\u5316\u3059\u308b\u3053\u3068\u3067\u3001\u30b0\u30ed\u30fc\u30d0\u30eb\u540d\u524d\u7a7a\u9593\u306e\u6c5a\u67d3\u3092\u9632\u304e\u3001\u95a2\u9023\u3059\u308b\u5b9a\u6570\u3092\u8ad6\u7406\u7684\u306b\u6574\u7406\u3067\u304d\u307e\u3059\u3002\u3053\u308c\u306b\u3088\u308a\u30e1\u30e2\u30ea\u30de\u30c3\u30d7\u304c\u3088\u308a\u30b3\u30f3\u30d1\u30af\u30c8\u306b\u306a\u308b\u50be\u5411\u304c\u3042\u308a\u307e\u3059\u3002<\/p>\n\n\n\n<p><strong>2. \u914d\u5217\u5b9a\u6570\u306e\u6d3b\u7528<\/strong><\/p>\n\n\n\n<p>PHP 5.6\u4ee5\u964d\u3067\u306f\u3001\u8907\u6570\u306e\u95a2\u9023\u3059\u308b\u5024\u3092\u500b\u5225\u306e\u5b9a\u6570\u3067\u306f\u306a\u304f\u3001\u914d\u5217\u5b9a\u6570\u3068\u3057\u3066\u5b9a\u7fa9\u3059\u308b\u3053\u3068\u3067\u30e1\u30e2\u30ea\u4f7f\u7528\u91cf\u3092\u524a\u6e1b\u3067\u304d\u307e\u3059\u3002<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">\/\/ \u975e\u52b9\u7387\u306a\u30a2\u30d7\u30ed\u30fc\u30c1\uff08\u591a\u6570\u306e\u500b\u5225\u5b9a\u6570\uff09\nconst ERROR_NOT_FOUND = 404;\nconst ERROR_SERVER = 500;\nconst ERROR_FORBIDDEN = 403;\nconst ERROR_UNAUTHORIZED = 401;\nconst ERROR_BAD_REQUEST = 400;\n\n\/\/ \u52b9\u7387\u7684\u306a\u30a2\u30d7\u30ed\u30fc\u30c1\uff08\u914d\u5217\u5b9a\u6570\uff09\nconst HTTP_ERRORS = [\n    'NOT_FOUND' =&gt; 404,\n    'SERVER' =&gt; 500,\n    'FORBIDDEN' =&gt; 403,\n    'UNAUTHORIZED' =&gt; 401,\n    'BAD_REQUEST' =&gt; 400\n];\n\n\/\/ \u4f7f\u7528\u4f8b\necho HTTP_ERRORS['NOT_FOUND']; \/\/ 404\n<\/pre>\n\n\n\n<p><strong>3. \u9045\u5ef6\u30ed\u30fc\u30c9\u3068\u6761\u4ef6\u4ed8\u304d\u30ed\u30fc\u30c9<\/strong><\/p>\n\n\n\n<p>\u5168\u3066\u306e\u5b9a\u6570\u3092\u5e38\u306b\u30ed\u30fc\u30c9\u3059\u308b\u306e\u3067\u306f\u306a\u304f\u3001\u5fc5\u8981\u306a\u6642\u306b\u5fc5\u8981\u306a\u5b9a\u6570\u3060\u3051\u3092\u30ed\u30fc\u30c9\u3059\u308b\u3053\u3068\u3067\u3001\u30e1\u30e2\u30ea\u4f7f\u7528\u91cf\u3092\u6700\u9069\u5316\u3067\u304d\u307e\u3059\u3002<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">\/\/ config\/constants.php\nreturn [\n    'app' =&gt; [\n        'name' =&gt; 'Dexall CMS',\n        'version' =&gt; '2.5.0',\n        'debug' =&gt; true\n    ],\n    'database' =&gt; [\n        'host' =&gt; 'localhost',\n        'name' =&gt; 'myapp'\n    ],\n    'api' =&gt; [\n        'url' =&gt; 'https:\/\/api.example.com',\n        'timeout' =&gt; 30\n    ]\n];\n\n\/\/ Constants.php\nclass Constants {\n    private static $constants = null;\n    private static $loadedSections = [];\n    \n    private static function loadAll() {\n        if (self::$constants === null) {\n            self::$constants = require __DIR__ . '\/config\/constants.php';\n        }\n        return self::$constants;\n    }\n    \n    public static function get($section, $key = null) {\n        if (!isset(self::$loadedSections[$section])) {\n            $constants = self::loadAll();\n            if (!isset($constants[$section])) {\n                throw new InvalidArgumentException(\"Undefined constant section: $section\");\n            }\n            self::$loadedSections[$section] = $constants[$section];\n        }\n        \n        if ($key === null) {\n            return self::$loadedSections[$section];\n        }\n        \n        if (!isset(self::$loadedSections[$section][$key])) {\n            throw new InvalidArgumentException(\"Undefined constant key: $section.$key\");\n        }\n        \n        return self::$loadedSections[$section][$key];\n    }\n}\n\n\/\/ \u4f7f\u7528\u4f8b\necho Constants::get('app', 'name'); \/\/ Dexall CMS\n$dbConfig = Constants::get('database'); \/\/ ['host' =&gt; 'localhost', 'name' =&gt; 'myapp']\n<\/pre>\n\n\n\n<p>\u3053\u306e\u65b9\u6cd5\u3067\u306f\u3001\u5b9f\u969b\u306b\u4f7f\u7528\u3059\u308b\u5b9a\u6570\u30bb\u30af\u30b7\u30e7\u30f3\u3060\u3051\u304c\u30e1\u30e2\u30ea\u306b\u30ed\u30fc\u30c9\u3055\u308c\u3001\u4e0d\u8981\u306a\u5b9a\u6570\u306b\u3088\u308b\u30e1\u30e2\u30ea\u6d88\u8cbb\u3092\u6291\u3048\u3089\u308c\u307e\u3059\u3002<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-27\">\u30ad\u30e3\u30c3\u30b7\u30e5\u3068\u7d44\u307f\u5408\u308f\u305b\u305f\u9ad8\u901f\u5316\u624b\u6cd5<\/h3>\n\n\n\n<p>\u5b9a\u6570\u306e\u5b9a\u7fa9\u3084\u30ed\u30fc\u30c9\u51e6\u7406\u3092\u6700\u9069\u5316\u3059\u308b\u305f\u3081\u306b\u3001\u30ad\u30e3\u30c3\u30b7\u30e5\u3092\u6d3b\u7528\u3059\u308b\u65b9\u6cd5\u304c\u3042\u308a\u307e\u3059\u3002<\/p>\n\n\n\n<p><strong>1. \u5b9a\u6570\u5b9a\u7fa9\u306e\u30ad\u30e3\u30c3\u30b7\u30f3\u30b0<\/strong><\/p>\n\n\n\n<p>\u5b9a\u6570\u306e\u5b9a\u7fa9\u3001\u7279\u306b\u5916\u90e8\u30bd\u30fc\u30b9\uff08\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u3001\u8a2d\u5b9a\u30d5\u30a1\u30a4\u30eb\u306a\u3069\uff09\u304b\u3089\u53d6\u5f97\u3059\u308b\u5024\u3092\u30ad\u30e3\u30c3\u30b7\u30e5\u3059\u308b\u3053\u3068\u3067\u3001\u521d\u671f\u5316\u6642\u9593\u3092\u77ed\u7e2e\u3067\u304d\u307e\u3059\u3002<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">\/\/ \u5b9a\u6570\u306e\u30ad\u30e3\u30c3\u30b7\u30f3\u30b0\u5b9f\u88c5\u4f8b\nclass ConfigCache {\n    const CACHE_FILE = __DIR__ . '\/cache\/config.cache.php';\n    const CACHE_TTL = 3600; \/\/ 1\u6642\u9593\uff08\u79d2\uff09\n    \n    public static function getConstants() {\n        \/\/ \u30ad\u30e3\u30c3\u30b7\u30e5\u304c\u6709\u52b9\u304b\u30c1\u30a7\u30c3\u30af\n        if (self::isCacheValid()) {\n            return require self::CACHE_FILE;\n        }\n        \n        \/\/ \u8a2d\u5b9a\u3092\u751f\u6210\uff08\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u3084\u74b0\u5883\u5909\u6570\u304b\u3089\u53d6\u5f97\uff09\n        $constants = self::generateConstants();\n        \n        \/\/ \u30ad\u30e3\u30c3\u30b7\u30e5\u306b\u4fdd\u5b58\n        self::saveCache($constants);\n        \n        return $constants;\n    }\n    \n    private static function isCacheValid() {\n        if (!file_exists(self::CACHE_FILE)) {\n            return false;\n        }\n        \n        \/\/ \u958b\u767a\u74b0\u5883\u3067\u306f\u30ad\u30e3\u30c3\u30b7\u30e5\u3092\u4f7f\u7528\u3057\u306a\u3044\n        if (getenv('APP_ENV') === 'development') {\n            return false;\n        }\n        \n        \/\/ \u30ad\u30e3\u30c3\u30b7\u30e5\u304c\u53e4\u3044\u304b\u30c1\u30a7\u30c3\u30af\n        if (filemtime(self::CACHE_FILE) &lt; (time() - self::CACHE_TTL)) {\n            return false;\n        }\n        \n        return true;\n    }\n    \n    private static function generateConstants() {\n        \/\/ \u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u304b\u3089\u8a2d\u5b9a\u3092\u53d6\u5f97\u3059\u308b\u4f8b\n        $db = new Database();\n        $result = $db-&gt;query(\"SELECT * FROM settings\");\n        \n        $constants = [\n            'database' =&gt; [\n                'host' =&gt; getenv('DB_HOST') ?: 'localhost',\n                'name' =&gt; getenv('DB_NAME') ?: 'myapp'\n            ],\n            'settings' =&gt; []\n        ];\n        \n        foreach ($result as $row) {\n            $constants['settings'][$row['key']] = $row['value'];\n        }\n        \n        return $constants;\n    }\n    \n    private static function saveCache($constants) {\n        $dir = dirname(self::CACHE_FILE);\n        if (!is_dir($dir)) {\n            mkdir($dir, 0755, true);\n        }\n        \n        file_put_contents(\n            self::CACHE_FILE,\n            '&lt;?php return ' . var_export($constants, true) . ';'\n        );\n    }\n}\n\n\/\/ \u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u8d77\u52d5\u6642\n$constants = ConfigCache::getConstants();\n\n\/\/ \u5b9a\u6570\u3068\u3057\u3066\u5b9a\u7fa9\nforeach ($constants['settings'] as $key =&gt; $value) {\n    if (!defined($key)) {\n        define($key, $value);\n    }\n}\n<\/pre>\n\n\n\n<p><strong>2. OPcache\u3068\u306e\u9023\u643a<\/strong><\/p>\n\n\n\n<p>PHP 5.5\u4ee5\u964d\u3067\u5c0e\u5165\u3055\u308c\u305fOPcache\u306f\u3001PHP\u30b9\u30af\u30ea\u30d7\u30c8\u3092\u30b3\u30f3\u30d1\u30a4\u30eb\u3057\u3066\u30ad\u30e3\u30c3\u30b7\u30e5\u3059\u308b\u6a5f\u80fd\u3092\u6301\u3061\u307e\u3059\u3002\u5b9a\u6570\u5b9a\u7fa9\u3082\u542b\u3081\u305fPHP\u30b3\u30fc\u30c9\u3092OPcache\u3067\u6700\u9069\u5316\u3059\u308b\u3053\u3068\u3067\u3001\u30d1\u30d5\u30a9\u30fc\u30de\u30f3\u30b9\u304c\u5411\u4e0a\u3057\u307e\u3059\u3002<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">\/\/ OPcache\u306e\u8a2d\u5b9a\u4f8b\uff08php.ini\uff09\nopcache.enable=1\nopcache.memory_consumption=128\nopcache.interned_strings_buffer=8\nopcache.max_accelerated_files=4000\nopcache.validate_timestamps=0\nopcache.save_comments=1\nopcache.fast_shutdown=1\n\n\/\/ \u30ad\u30e3\u30c3\u30b7\u30e5\u60c5\u5831\u306e\u78ba\u8a8d\n&lt;?php\nvar_dump(opcache_get_status());\n<\/pre>\n\n\n\n<p>OPcache\u3092\u6709\u52b9\u306b\u3059\u308b\u3068\u3001\u5b9a\u6570\u3078\u306e\u30a2\u30af\u30bb\u30b9\u3092\u542b\u3080\u3059\u3079\u3066\u306ePHP\u64cd\u4f5c\u304c\u9ad8\u901f\u5316\u3055\u308c\u307e\u3059\u3002\u7279\u306b <code>const<\/code> \u30ad\u30fc\u30ef\u30fc\u30c9\u3067\u5b9a\u7fa9\u3055\u308c\u305f\u5b9a\u6570\u306f\u3001\u30b3\u30f3\u30d1\u30a4\u30eb\u6642\u306b\u6700\u9069\u5316\u3055\u308c\u308b\u305f\u3081\u3001OPcache\u3068\u306e\u76f8\u6027\u304c\u826f\u3044\u3067\u3059\u3002<\/p>\n\n\n\n<p><strong>3. \u30af\u30e9\u30b9\u5b9a\u6570\u306e\u30d7\u30ea\u30ed\u30fc\u30c9\uff08PHP 7.4\u4ee5\u964d\uff09<\/strong><\/p>\n\n\n\n<p>PHP 7.4\u4ee5\u964d\u3067\u306f\u3001\u30d7\u30ea\u30ed\u30fc\u30c7\u30a3\u30f3\u30b0\u6a5f\u80fd\u3092\u4f7f\u7528\u3057\u3066\u3001\u3088\u304f\u4f7f\u7528\u3055\u308c\u308b\u30af\u30e9\u30b9\u3068\u305d\u306e\u5b9a\u6570\u3092\u4e8b\u524d\u306b\u30ed\u30fc\u30c9\u3059\u308b\u3053\u3068\u3067\u3001\u30ea\u30af\u30a8\u30b9\u30c8\u51e6\u7406\u306e\u9ad8\u901f\u5316\u304c\u53ef\u80fd\u3067\u3059\u3002<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">\/\/ preload.php\n&lt;?php\n\/\/ \u983b\u7e41\u306b\u4f7f\u7528\u3059\u308b\u30af\u30e9\u30b9\u3092\u30d7\u30ea\u30ed\u30fc\u30c9\nrequire_once __DIR__ . '\/vendor\/autoload.php';\n\n\/\/ \u8a2d\u5b9a\u30af\u30e9\u30b9\u3092\u30d7\u30ea\u30ed\u30fc\u30c9\nrequire_once __DIR__ . '\/app\/Config\/AppConfig.php';\nrequire_once __DIR__ . '\/app\/Config\/DatabaseConfig.php';\nrequire_once __DIR__ . '\/app\/Config\/SecurityConfig.php';\n\n\/\/ \u30af\u30e9\u30b9\u306e\u30a4\u30f3\u30b9\u30bf\u30f3\u30b9\u5316\u3084\u30e1\u30bd\u30c3\u30c9\u547c\u3073\u51fa\u3057\u3082\u53ef\u80fd\n$config = new AppConfig();\n<\/pre>\n\n\n\n<p>\u30d7\u30ea\u30ed\u30fc\u30c7\u30a3\u30f3\u30b0\u3092\u4f7f\u7528\u3059\u308b\u306b\u306f\u3001php.ini\u306b\u4ee5\u4e0b\u306e\u8a2d\u5b9a\u3092\u8ffd\u52a0\u3057\u307e\u3059\uff1a<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">opcache.preload=\/path\/to\/preload.php\nopcache.preload_user=www-data\n<\/pre>\n\n\n\n<p>\u3053\u308c\u306b\u3088\u308a\u3001\u983b\u7e41\u306b\u30a2\u30af\u30bb\u30b9\u3055\u308c\u308b\u5b9a\u6570\u3092\u542b\u3080\u30af\u30e9\u30b9\u304c\u4e8b\u524d\u306b\u30ed\u30fc\u30c9\u3055\u308c\u3001\u30ea\u30af\u30a8\u30b9\u30c8\u51e6\u7406\u6642\u306e\u30aa\u30fc\u30d0\u30fc\u30d8\u30c3\u30c9\u304c\u524a\u6e1b\u3055\u308c\u307e\u3059\u3002<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-28\">\u30d1\u30d5\u30a9\u30fc\u30de\u30f3\u30b9\u6700\u9069\u5316\u306e\u305f\u3081\u306e\u5b9f\u8df5\u7684\u306a\u30d2\u30f3\u30c8<\/h3>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u4f7f\u7528\u983b\u5ea6\u306e\u9ad8\u3044\u5024\u306b\u5b9a\u6570\u3092\u4f7f\u7528\u3059\u308b<\/strong> \u983b\u7e41\u306b\u30a2\u30af\u30bb\u30b9\u3055\u308c\u308b\u5024\u306f\u3001\u5909\u6570\u3067\u306f\u306a\u304f\u5b9a\u6570\u3068\u3057\u3066\u5b9a\u7fa9\u3059\u308b\u3053\u3068\u3067\u3001\u308f\u305a\u304b\u306a\u304c\u3089\u30d1\u30d5\u30a9\u30fc\u30de\u30f3\u30b9\u304c\u5411\u4e0a\u3057\u307e\u3059\u3002<\/li>\n\n\n\n<li><strong>\u30af\u30e9\u30b9\u5b9a\u6570\u3092\u9069\u5207\u306b\u4f7f\u3044\u5206\u3051\u308b<\/strong> \u30af\u30e9\u30b9\u306e\u30d7\u30ed\u30d1\u30c6\u30a3\u3068\u3057\u3066\u5b9a\u7fa9\u3059\u3079\u304d\u5024\u3068\u3001\u30af\u30e9\u30b9\u5b9a\u6570\u3068\u3057\u3066\u5b9a\u7fa9\u3059\u3079\u304d\u5024\u3092\u660e\u78ba\u306b\u533a\u5225\u3057\u307e\u3059\u3002\u30a4\u30f3\u30b9\u30bf\u30f3\u30b9\u3054\u3068\u306b\u5909\u308f\u3089\u306a\u3044\u5024\u306f\u5b9a\u6570\u3068\u3057\u3066\u5b9a\u7fa9\u3059\u308b\u3053\u3068\u3067\u3001\u30e1\u30e2\u30ea\u4f7f\u7528\u91cf\u3092\u524a\u6e1b\u3067\u304d\u307e\u3059\u3002<\/li>\n\n\n\n<li><strong>const\u30ad\u30fc\u30ef\u30fc\u30c9\u3068define\u95a2\u6570\u306e\u4f7f\u3044\u5206\u3051<\/strong> \u9759\u7684\u306a\u5024\u3084\u5c11\u6570\u306e\u5b9a\u6570\u306b\u306f <code>const<\/code> \u30ad\u30fc\u30ef\u30fc\u30c9\u3092\u3001\u52d5\u7684\u306a\u5024\u3084\u6761\u4ef6\u4ed8\u304d\u3067\u5b9a\u7fa9\u3059\u308b\u5b9a\u6570\u306b\u306f <code>define()<\/code> \u95a2\u6570\u3092\u4f7f\u7528\u3057\u307e\u3059\u3002<\/li>\n\n\n\n<li><strong>\u5b9a\u6570\u540d\u306e\u9577\u3055\u306b\u6ce8\u610f<\/strong> \u5b9a\u6570\u540d\u304c\u9577\u3059\u304e\u308b\u3068\u3001\u5b9a\u7fa9\u6642\u3068\u30a2\u30af\u30bb\u30b9\u6642\u306e\u30aa\u30fc\u30d0\u30fc\u30d8\u30c3\u30c9\u304c\u5897\u52a0\u3057\u307e\u3059\u3002\u660e\u78ba\u3055\u3092\u640d\u306a\u308f\u306a\u3044\u7bc4\u56f2\u3067\u3001\u7c21\u6f54\u306a\u540d\u524d\u3092\u9078\u3073\u307e\u3059\u3002<\/li>\n\n\n\n<li><strong>\u4e0d\u8981\u306a\u5b9a\u6570\u3092\u907f\u3051\u308b<\/strong> \u4f7f\u7528\u3055\u308c\u306a\u3044\u5b9a\u6570\u3084\u3001\u4e00\u5ea6\u3057\u304b\u4f7f\u7528\u3055\u308c\u306a\u3044\u5024\u306f\u5b9a\u6570\u3068\u3057\u3066\u5b9a\u7fa9\u305b\u305a\u3001\u76f4\u63a5\u5024\u3092\u4f7f\u7528\u3059\u308b\u304b\u5909\u6570\u3068\u3057\u3066\u5b9a\u7fa9\u3057\u307e\u3059\u3002<\/li>\n\n\n\n<li><strong>\u30b0\u30ed\u30fc\u30d0\u30eb\u5909\u6570\u3088\u308a\u3082\u5b9a\u6570\u3092\u512a\u5148<\/strong> \u30b0\u30ed\u30fc\u30d0\u30eb\u5909\u6570\u3088\u308a\u3082\u5b9a\u6570\u306e\u65b9\u304c\u30d1\u30d5\u30a9\u30fc\u30de\u30f3\u30b9\u304c\u826f\u304f\u3001\u4e88\u671f\u3057\u306a\u3044\u5909\u66f4\u3082\u9632\u3052\u307e\u3059\u3002<\/li>\n<\/ol>\n\n\n\n<p>PHP\u306e\u5b9a\u6570\u3092\u9069\u5207\u306b\u6d3b\u7528\u3057\u3001\u30d1\u30d5\u30a9\u30fc\u30de\u30f3\u30b9\u3092\u610f\u8b58\u3057\u305f\u8a2d\u8a08\u3092\u884c\u3046\u3053\u3068\u3067\u3001\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u5168\u4f53\u306e\u52b9\u7387\u3092\u5411\u4e0a\u3055\u305b\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002\u5c0f\u898f\u6a21\u306a\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u3067\u306f\u52b9\u679c\u304c\u5fae\u5c0f\u304b\u3082\u3057\u308c\u307e\u305b\u3093\u304c\u3001\u5927\u898f\u6a21\u306a\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u3067\u306f\u3001\u3053\u308c\u3089\u306e\u6700\u9069\u5316\u304c\u7a4d\u307f\u91cd\u306a\u3063\u3066\u6709\u610f\u7fa9\u306a\u5dee\u3068\u306a\u308a\u307e\u3059\u3002<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Warning: Undefined array key &#8220;is_admin&#8221; in \/home\/xs392991\/dexall.co.jp\/public_html\/articles\/wp-content\/themes\/ &#8230; <\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[12,63],"tags":[],"class_list":{"0":"post-3685","1":"post","2":"type-post","3":"status-publish","4":"format-standard","6":"category-php","7":"category-php-syntax","8":"nothumb"},"_links":{"self":[{"href":"https:\/\/dexall.co.jp\/articles\/index.php?rest_route=\/wp\/v2\/posts\/3685","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/dexall.co.jp\/articles\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/dexall.co.jp\/articles\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/dexall.co.jp\/articles\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/dexall.co.jp\/articles\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=3685"}],"version-history":[{"count":2,"href":"https:\/\/dexall.co.jp\/articles\/index.php?rest_route=\/wp\/v2\/posts\/3685\/revisions"}],"predecessor-version":[{"id":3687,"href":"https:\/\/dexall.co.jp\/articles\/index.php?rest_route=\/wp\/v2\/posts\/3685\/revisions\/3687"}],"wp:attachment":[{"href":"https:\/\/dexall.co.jp\/articles\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=3685"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/dexall.co.jp\/articles\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=3685"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/dexall.co.jp\/articles\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=3685"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}