تعداد بازدید: 1992

متغیر ها در php قسمت دوم

مباحثی که در این مقاله در رابطه با متغیر ها قصد بررسی شون رو داریم :

  • Type Juggling
  • Variable Funcions
  • Predefined Variables

تبدیل نوع متغیر – Type Casding

علی رغم این که در php ما پس از مقدار دهی به متغیر نوع آن را تعیین می کنیم باز هم متغیر ها در php از انواع مشخصی برخوردارند که گاها نیاز پیدا می کنیم تا آن ها را به هم تبدیل کنیم. مثلا در تابعی نیاز هست تا پارامتر ورودی به int داده بشه حال اگر به اشتباه کاربر به جای عدد 25 رشته “25” رو به تابع داده باشه ما نیاز پیدا می کنیم تا برای جلوگیری از خطا این مقدار رو تبدیل کنیم.

نکته : عملیات های ریاضی روی داده هایی از نوع int انجام می شود.

نکته : مرتب سازی بر اساس داده عددی نیاز به نوع int دارد و اگر به صورت رشته ای داده شود این عملیات انجام پذیر نخواهد بود. مثال عدد 99 از 100 کمتره ولی از نظر کد اسکی رشته “99” بزرگتر از رشته “100” است.

تبدیل نوع با استفاده از تعریف نوع متغیر :

برای این نوع تبدیل زمانی که متغیر رو داریم از مقادیر زیر برای تبدیل به نوع مورد نظر خودمون استفاده می کنیم. مثلا رشته “22” تبدیل به عدد 22 :

<?php
$num_str = "1";  // $foo is string (ASCII 49)
$num_int = (int) $num_str; //1

دیدید که چطور با چه فرمتی مقدار رشته ای “1” را به مقدار عددی 1 تبدیل کردیم. برای متغیر های دیگر از همین نوع از مقادیر زیر استفاده کنید :

  • (int), (integer) – تبدیل نوع به int
  • (bool), (boolean) – تبدیل نوع به boolean
  • (float), (double), (real) – تبدیل نوع به float
  • (string) – تبدیل نوع به string
  • (array) – تبدیل نوع به array
  • (object) – تبدیل نوع به object
  • (unset) – تبدیل نوع به NULL

توابع مربوط به تبدیل نوع متغیر

gettype : این تابع ورودی متغیر می گیرد و خروجی نوع آن را مشخص می کند.

<?php
$data = array(1, 1., NULL, new stdClass, 'foo');
foreach ($data as $value) {
    echo gettype($value), "\n";
}
/*
integer
double
NULL
object
string
*/

خروجی های این تابع به شرح زیر است :

  • “boolean”
  • “integer”
  • “double”
  • “string”
  • “array”
  • “object”
  • “resource”
  • “resource (closed)” در ورژن PHP 7.2.0
  • “NULL”
  • “unknown type”

♣ در این زمینه ما توابعی داریم که تشخیص میده که متغیر ورودی ما از نوع خاصی هست یا خیر ورودی این سری از توابع متغیر هست و خروجی اون با توجه به نوع تابع و نوع متغیر ورودی true یا false است :

  • is_​array :‌ آیا متغیر از نوع آرایه است.
  • is_​bool : آیا متغیر از نوع boolean است.
  • is_​float : آیا متغیر از نوع اعشاری یا float است.
  • is_​int : آیا متغیر از نوع عدد صحیح یا integer است.
  • is_​null : آیا مقدار متغیر از نوع NULL است . این تابع برعکس تابع isset است.
  • is_​numeric : آیا مقدار متغیر عددی است . حال این عدد از هر نوع (عدد صحیح ، منفی ، اعشاری … ) می تواند باشد.
  • is_​object : آیا متغیر ما حاوی یک شی است.
  • is_​string : آیا متغیر از نوع رشته ای است.

settype : برای تغییر نوع متغیر استفاده می شود. ساختار کلی آن به شکل زیر است :

<?php settype ( &$var , $type ); ?>

پارامتر های این تابع :

  • var : متغیر مربوطه . این متغیر به شکل فراخوانی با ارجاع به تابع داده می شود. یعنی عملیات روی این پارامتر به درستی انجام می شود. البته نیازی نیست در زمان استفاده از این تابع شما علامتی & رو قبل از پارامتر var بزارید و این تابع به صورت پیش فرض این کار رو میکنه.
  • type : نوعی که قراره متغیر به اون تبدیل بشه.

انواع متغیری که به عنوان پارامتر دوم میشه به این تابع داد از قرار زیر هستند:

  • “boolean” or “bool”
  • “integer” or “int”
  • “float” or “double”
  • “string”
  • “array”
  • “object”
  • “null”
<?php
$foo = "5bar"; // string
$bar = true;   // boolean

settype($foo, "integer"); // $foo is now 5   (integer)
settype($bar, "string");  // $bar is now "1" (string)

در مثال بالا نوع داده های متغیر ها را تبدیل کردیم . به مقدار نهایی متغیر ها توجه کنید. خروجی این تابع بنا به موفقیت آمیز بودن عملیات تبدیل true , false خواهد بود.

♣ در این زمینه ما توابع دیگری هم داریم که مستقیما تبدیل نوع را انجام می دهند :

  • intval : بازگشت مقدار با نوع int
  • boolval : بازگشت مقدار از نوع boolean
  • strval : بازگشت مقدار از نوع string

نکته مهم : ورودی این تابع یک متغیر است و خروجی اون مقدار متغیر ورودی با توجه نوع داده ای که تابع تعیین می کنه هست. نکته ای که وجود داره اینه که این با فراخوانی با مقدار است و بعد اجرای تابع مقدار متغیر ورودی تغییری نمی کنه.

<?php
echo intval(42);                      // 42
echo floatval('122.34343The');  // 122.34343

نکته مهم : ما به وسیله تلفیقی از تابع array_map و توابع تبدیل نوع تمامی اعضای یک آرایه را به نوع دلخواه تبدیل کنیم.

<?php 
$array_str = array("1","2","3","4");
$array_int = array_map('intval',$array_str);

مثلا در مقدار بالا ما در متغیر array_int آرایه array_str را ریختیم به شکلی که تمامی اعضای آن از نوع int بودند. ( با تلفیق تابع array_map و intval )

سایر توابع مربوط به متغیر

empty : این تابع پر کاربرد چک می کند که مقدار متغیر شما خالی است یا خیر .

<?php
if (empty($var)) {
    echo '$var is either 0, empty, or not set at all';
}

نکته : از این تابع معمولا در ساختار های شرطی استفاده میشه .

نکته : حتما باید به عنوان پارامتر ورودی به این تابع متغیر بدید . اگر مقدار مستقیم یا رشته بدید خطاست.

isset : چک می کنه که آیا مقدار متغیر set شده و همچنین برابر با NULL نباشه. به عنوان پارامتر ورودی باید متغیر بهش بدید و از دادن مقدار مثل رشته خودداری کنید.

unset : مقدار متغیر را برابر با NULL می کند و اصطلاحا متغیر را تخریب می کند.

<?php
$xyz='gnutec';
echo 'Before using unset() the value of $xys is : '. $xyz.'<br>';
unset($xyz);
echo 'After using unset() the value of $xys is : '. $xyz;
/*
Before using unset() the value of $xys is : gnutec
After   using unset() the value of $xys is : 
*/

نکته : عملکرد تابع unset درون توابع تنها در ناحیه محلی تابع عمل می کنه :

<?php
function destroy_foo() 
{
    global $foo;
    unset($foo);
}

$foo = 'bar';
destroy_foo();
echo $foo; //bar

حتی اگر به صورت فراخوانی با ارجاع انجام شده باشه :

<?php
function foo(&$bar) {
    unset($bar);
    $bar = "blah";
}
$bar = 'something';
echo "$bar"; //something

foo($bar);
echo "$bar"; //something

متغیر های از پیش تعریف شده – Predefined Variables

یه سری متغیر از پیش تعریف شده در php داریم که مهم ترین اون ها عبارتست از :

$GLOBALS : تمامی متغیر های جهانی را در خود دارد. متغیر های global در درون یک آرایه انجمنی قرار دارند.

$_POST : این متغیر آرایه ایست از متدهای post شده توسط یک فرم یا وب سرویس در یک صفحه .

$_GET : این متغیر حاوی آرایه انجمنی از متد های ارسال شده توسط get در یک صفحه html.

$_REQUEST : تمامی مقادیر ارسال شده چه با متد post و یا get در یک صفحه در آرایه انجمنی با این نام قرار می گیرند.

$_FILES : متغیر شامل اطلاعات فایل آپلود و ارسال شده توسط یک فرم که شامل مقادیر زیر است :

Array
(
    [file_name] => Array
        (
            [name] => MyFile.jpg
            [type] => image/jpeg
            [tmp_name] => /tmp/php/php6hst32
            [error] => UPLOAD_ERR_OK
            [size] => 98174
        )
)

آرایه بالا ورودی با نام file_name است که شامل مقادیر خاصی از فایل آپلود شده توسط کاربر است که این انتخاب یک فایل است. خروجی در انتخاب چندگانه فایل به شکل زیر است.

Array
(
    [download] => Array
        (
            [name] => Array
                (
                    [file1] => MyFile.txt
                    [file2] => MyFile.jpg
                )

            [type] => Array
                (
                    [file1] => text/plain
                    [file2] => image/jpeg
                )

            [tmp_name] => Array
                (
                    [file1] => /tmp/php/php1h4j1o
                    [file2] => /tmp/php/php6hst32
                )

            [error] => Array
                (
                    [file1] => UPLOAD_ERR_OK
                    [file2] => UPLOAD_ERR_OK
                )

            [size] => Array
                (
                    [file1] => 123
                    [file2] => 98174
                )
        )
)

برای اطلاعات بیشتر به مقاله کار با فایل ها در php مراجعه کنید.

$_SERVER : شامل اطلاعاتی در رابطه با اسکریپت و مسیر و سرور می باشد.

$_SERVER['PHP_SELF'] آدرس فایل مربوطه ای که اسکریپت توی اون اجرا شده. از این برای action فرم هایی استفاده می شه که قراره به همون صفحه post بشه. مثلا ما در فایل index.php اسکرپتمون هست مقدارش میشه از ریشه host مربوطه تا فایل index.php که یه همچین شکلی داره : string(10) "/index.php"
$_SERVER['SERVER_ADDR'] آی پی آدرس سرور . مثلا یه عددی به شکل 185.126.212.69
 $_SERVER['SERVER_NAME']  نام سرور که معمولا با نام آدرس دامنه ای که اسکپریپت توش اجرا شده برابره . مثلا : gnutec.ir
 $_SERVER['REQUEST_SCHEME'] نوع درخواست که میتونه http یا https باشه.
 $_SERVER['HTTP_HOST'] آدرس هاستی که پروژه روش اجرا شده که میتونه آدرس دامنه باشه مثلا :‌ gnutec.net
 $_SERVER['HTTP_USER_AGENT']  اطلاعات مرورگر و سیستم عامل کاربری که درخواست رو به اسکریپت داده . مثلا برای من میشه :
Mozilla/5.0 (Macintosh; Intel Mac OS X 10.13; rv:61.0) Gecko/20100101 Firefox/61.0
 $_SERVER['QUERY_STRING']  query string که به لینک داده شده باشه. مثلا اگر لینک به شکل http://checkip.gnutec.ir/?name=abolfazl باشه مقدارش برابر با name=abolfazl میشه.
$_SERVER['REMOTE_ADDR'] آدرس آی پی کاربر بازدید کننده رو بر میگردونه . مثلا : 188.158.117.137 همون طور که می بینید این آی پی کسی است که remote زده و با آی پی سرور متفاوته.
$_SERVER['REQUEST_URI'] مقداری که بعد از domain میاد . مثلا اگر درخواست برابر https://gnutec.net/contact باشه مقدار این متغیر برابر با contact خواهد بود.

نکته : برای پیدا کردن application directory uri که میشه همون آدرس شروع نرم افزار می تونید از روش زیر استفاد کنید. به طور مثلا نرم افزار من در دامنه gnutec.ir و در دایرکتوری gwa هست .

<?php
$application_directory_uri = (@$_SERVER['HTTPS']) ? 'https://' : 'http://';
$application_directory_uri .= $_SERVER['HTTP_HOST'] . "/gwa";

مطالب مشابه

Apache HTTP Server – htaccess

سرویس دهنده وب یا وب سرور یک نرم افزار است که روی سرور نصب و پیکره بندی می شود. نرم افزارهای زیادی از این نوع وجود دارد...

xml in php , dom document

کار با XML در PHP

XML مخفف (eXtensible Markup Language - زبان نشانه گذاری توسعه پذیر) طراحی شده برای ذخیره و انتقال اطلاعات می باشد. XML...

معماری های MVC/HMVC

معماری MVC یک قالب برای پیاده سازی رفتار نرم افزار می باشد که بر پایه Model و Controller و View می باشد. controller...

اشتراک گذاری :

مدیر وب سایت گنوتک . برنامه نویسی رو با زبان C در هفده سالگی شروع کردم . در حال حاضر به برنامه نویسی php برپایه معماری MVC , HMVC و همچنین سیستم مدیریت محتوای WordPress و فریم ورک محبوب لاراول علاقه مند هستم و دوست دارم اطلاعاتم رو با شما به اشتراک بگذارم.

۰ دیدگاه برای متغیر ها در php قسمت دوم

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

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