الدالة unset()‎ في PHP

من موسوعة حسوب
< PHP
مراجعة 10:02، 18 أبريل 2018 بواسطة Kinan-mawed (نقاش | مساهمات)
(فرق) → مراجعة أقدم | المراجعة الحالية (فرق) | مراجعة أحدث ← (فرق)

(PHP 4, PHP 5, PHP 7)

تُزيل البنية unset()‎‎ تعيين المتغيّر المُعطى.

الوصف

void unset ( mixed $var [, mixed $... ] )

تُدمِّر البنية unset()‎‎ المتغيّرات المحددة.

يختلف سلوك الدالّة unset()‎ عند استدعائها داخل دالّة أخرى اعتمادًا على نوع المُتغيّر الذي تُحاول تدميره.

فإذا أزلنا تعيين مُتغيّر عام (global) بداخل دالّة ما فسيدمّر المُتغيّر المحلّي فقط، أمّا المُتغيّر الذي يملك نفس الاسم في المكان الذي نستدعي فيه هذه الدالّة سيحافظ على نفس قيمته كما كانت قبل استدعائها، كما في المثال التالي:

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

$foo = 'bar';
destroy_foo();
echo $foo;
?>

وسيكون ناتج المثال السابق هو:

bar

لإزالة تعيين مُتغيّر عام بداخل دالّة فاستخدم المصفوفة GLOBALS‎$ لفعل ذلك:

<?php
function foo() 
{
    unset($GLOBALS['bar']);
}

$bar = "something";
foo();
?>

إن أزلنا تعيين متغيّر مُمرَّر عبر مرجع (Reference) بداخل دالة، فسيُدمَّر المتغيّر المحلّي فقط، أمّا المُتغيّر الذي يملك نفس الاسم في المكان الذي نستدعي فيه هذه الدالّة سيحافظ على نفس قيمته كما كانت قبل استدعائها:

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

$bar = 'something';
echo "$bar\n";

foo($bar);
echo "$bar\n";
?>

ينتج عن المثال السّابق ما يلي:

something
something

إن أزلنا تعيين متغيّر ثابت (static) بداخل دالة ما، فستُدمِّر البنية unset()‎ هذا المتغيّر فقط ضمن بقيّة هذه الدالة، وستستعيد الاستدعاءات التالية القيمة السابقة لهذا المتغيّر.

<?php
function foo()
{
    static $bar;
    $bar++;
    echo "Before unset: $bar, ";
    unset($bar);
    $bar = 23;
    echo "after unset: $bar\n";
}

foo();
foo();
foo();
?>

ينتج عن المثال السّابق ما يلي:

Before unset: 1, after unset: 23
Before unset: 2, after unset: 23
Before unset: 3, after unset: 23

المعاملات

var

المتغيّر المطلوب إزالة تعيينه.

متغيّر آخر.

القيم المعادة

لا تُعاد أي قيمة.

أمثلة

المثال 1: مثال على البنية unset()‎

<?php

// تدمير متغيّر واحد
unset($foo);

// تدمير عنصر واحد من المصفوفة
unset($bar['quux']);

// تدمير أكثر من متغيّر
unset($foo1, $foo2, $foo3);
?>

المثال 2: استخدام unset كتحويل للأنواع (casting) تلتبس unset عند استخدامها لتحويل الأنواع مع البنية unset()‎، إذ تخدم unset فقط للتحويل إلى النوع NULL، فهي لا تُبدِّل المتغيّر الذي تقلب نوعه، أُزيلت unset لتحويل الأنواع بدءًا من إصدار PHP 7.2.0:

<?php
$name = 'Felipe';

var_dump((unset) $name);
var_dump($name);
?>

ينتج عن المثال السّابق ما يلي:

NULL
string(6) "Felipe"

ملاحظات

لمّا كانت هذه البنية هي من البنى التابعة للغة فلا يُمكِن استخدامها مع الدوال المتغيّرة.

من الممكن إزالة تعيين خصائص الكائنات المرئيّة ضمن السّياق الحالي.

من غير الممكن إزالة تعيين المتغيّر this$ بداخل تابع كائن بدءًا من إصدار PHP 5.

عند استخدام البنية unset()‎ على خصائص الكائن غير القابلة للوصول، فسيُستدعى التابع unset()‎__ إن كان مُعرَّفًا.

انظر أيضًا

  • الدالة isset()‎: معرفة إذا ما كان المتغيّر مُعرَّفًا وقيمته ليست NULL.
  • الدالة empty()‎: معرفة إذا ما كان المتغيّر فارغًا.
  • التحميل الزائد للدالة unset()‎__.
  • الدالة array_splice()‎: إزالة جزء من المصفوفة واستبداله بشيء آخر.

مصادر