php

جلسه ۷: ثابت ها (Constants) در php

در این جلسه در مورد تمامی بخش های ثابت ها (Constants) مانند تعریف آنها، بررسی اینکه آیا تعریف شده اند و نحوه استفاده از آنها در برنامه های PHP صحبت خواهیم کرد.

سرفصل مباحث این جلسه به شرح زیر می باشد:

  • تعریف ثابت ها (Constants)
  • نام های رزرو شده
  • بررسی اینکه آیا ثابت (Constants) تعریف شده است؟
  • دریافت تمامی ثابت های (Constants) تعریف شده
  • استفاده از ثابت ها (Constants)

تعریف ثابت ها (Constants)

ثابت ها در تعریف، متغیر هایی هستند که در طول اجرای اسکریپت نمی توانیم تغییری در آنها ایجاد کنیم. این متغیر ها توسط دستور const و یا تابع define ایجاد می شوند.

قرارداد: در زبان PHP برای نام ثابت ها، از حروف بزرگ استفاده می کنیم. (مانند A_CONSTANT)

قطعه کد زیر نحوه ایجاد ثابت ها را نمایش می دهد:

<?php
const PI = 3.14; // float
define("EARTH_IS_FLAT", false); // boolean
const UNKNOWN = null; // null
define("APP_ENV", "dev"); // string
const MAX_SESSION_TIME = 60 * 60; // integer, using (scalar) expressions is ok
const APP_LANGUAGES = ["de", "en"]; // arrays
define("BETTER_APP_LANGUAGES", ["lu", "de"]); // arrays
?>

پس از تعریف یک ثابت (Constant)، می توانید ثابت دیگری را بر اساس آن تعریف کنید:

<?php
const TAU = PI * 2;
define("EARTH_IS_ROUND", !EARTH_IS_FLAT);
define("MORE_UNKNOWN", UNKNOWN);
define("APP_ENV_UPPERCASE", strtoupper(APP_ENV)); // string manipulation is ok too
define("MAX_SESSION_TIME_IN_MINUTES", MAX_SESSION_TIME / 60);
const APP_FUTURE_LANGUAGES = [-1 => "es"] + APP_LANGUAGES; // array manipulations
define("APP_BETTER_FUTURE_LANGUAGES", array_merge(["fr"],BETTER_APP_LANGUAGES));
?>

توجه: به یاد داشته باشید که نمی توانید از یک ثابت برای فراخوانی تابعی مانند مثال زیر، استفاده کنید:

<?php
const TIME = time(); // fails with a fatal error! 
?>

نام های رزرو شده

برخی از نام های ثابت ها (Constants) توسط PHP رزرو شده است و ما نمی توانیم دوباره آنها را تعریف کنیم. سعی کنید مقادیر ثابت های تعریف شده در بخش زیر را چاپ کنید. در این صورت مشاهده می کنید که مقادیری که ما به آن اختصاص دادیم چاپ نمی شود.

<?php
define("true", false); // internal constant
define("false", true); // internal constant
define("CURLOPT_AUTOREFERER", "something"); // will fail if curl extension is loaded
// echo true;
// echo false;
// echo CURLOPT_AUTOREFERER;
?>

بررسی اینکه آیا ثابت (Constants) تعریف شده است؟

برای بررسی اینکه آیا ثابت تعریف شده است ، از تابع defined استفاده می کنیم.

نکته: تابع defined به مقدار ثابت اهمیتی نمی دهد و تنها بخش مهم برای آن، این است که ثابت وجود دارد یا خیر. حتی اگر مقدار ثابت null یا غلط(false) باشد، این تابع همچنان مقدار true را بر می گرداند.

در کد زیر می خواهیم با استفاده از تابع defined، وجود ثابت های GOOD و AWESOME را بررسی کنیم. در حال حاضر از لغات کلیدی if و else چشم پوشی کنید. در جلسات بعد در مورد آنها صحبت خواهیم کرد. در حال حاضر تنها چیزی که نیاز است بدانید این است که if و else، برای تشخیص اینکه آیا بخشی از کد باید اجرا شود یا خیر، استفاده می شود.

<?php
define("GOOD", false);
if (defined("GOOD")) {
  echo "GOOD is defined.\n" ; // prints "GOOD is defined"

  if (GOOD)
    echo "GOOD is true." ; // does not print anything, since GOOD is false
  else 
    echo "GOOD is false.";
}

if (!defined("AWESOME")) {
  define("AWESOME", true); // awesome was not defined. Now we have defined it
}
?>

دریافت تمامی ثابت های (Constants) تعریف شده

برای دریافت تمامی ثابت های تعریف شده از جمله ثابت هایی که توسط خود PHP ساخته شده است، از تابع PHP به نام get_defined_constants استفاده می کنیم. قطعه کد زیر نحوه انجام این کار را نمایش می دهد.

<?php
$constants = get_defined_constants();
var_dump($constants); // prints a very large list
?>

برای اینکه فقط لیست ثابت هایی که در برنامه خود تعریف کرده اید را ببینید، این تابع را در ابتدا و انتهای اسکریپت خود فراخوانی کنید (به طور معمول بعد از فرآیند bootstrap). برای درک بهتر موضوع به قطعه کد زیر دقت فرمایید:

<?php
$constants = get_defined_constants();
define("HELLO", "hello");
define("WORLD", "world");
$new_constants = get_defined_constants();
$myconstants = array_diff_assoc($new_constants, $constants); //compares array keys and values, and returns the differences.
var_export($myconstants); //return the structured value of $myconstants 
?>

در خط ۵ ام کد بالا، ما از تابع PHP به نام array_diff_assoc استفاده می کنیم. این تابع دو پارامتر را دریافت کرده و کلید ها و مقادیر آنها را با هم مقایسه می کند، سپس اختلاف آنها را بر می گرداند که در اینجا باعث می شود تمامی ثابت هایی که به تازگی تعریف شده اند برگردانده شوند.

استفاده از ثابت ها (Constants)

برای استفاده از ثابت ها، همانطور که در بخش پایینی مشاهده می کنید تنها کافیست از نام آن استفاده کنید

<?php
//definition
define("EARTH_IS_FLAT", false); // boolean
define("APP_ENV_UPPERCASE", "DEV"); // string

//usage
if (EARTH_IS_FLAT)
  echo "Earth is flat.\n";
else
  echo "Earth is round.\n";

echo APP_ENV_UPPERCASE;
?>

اگر نام ثابت را نمی دانید از تابع constant استفاده کنید.

<?php
//definition
define("EARTH_IS_FLAT", false); // boolean
define("APP_ENV_UPPERCASE", "DEV"); // string

$const1 = "EARTH_IS_FLAT";
$const2 = "APP_ENV_UPPERCASE";
if (constant($const1)) 
  echo "Earth is flat.\n";
else
  echo "Earth is round.\n";

echo constant($const2);
?>

برای درک بهتر این مفاهیم، سعی کنید تا تمرین جلسه بعد را حل کنید.

نوشته های مشابه

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

دکمه بازگشت به بالا