الفرق بين المراجعتين لصفحة: «PHP/unset»

من موسوعة حسوب
< PHP
أنشأ الصفحة ب'<noinclude>{{DISPLAYTITLE:الدالة <code>unset()</code>‎ في PHP}}</noinclude>'
 
لا ملخص تعديل
 
سطر 1: سطر 1:
<noinclude>{{DISPLAYTITLE:الدالة <code>unset()</code>‎ في PHP}}</noinclude>
<noinclude>{{DISPLAYTITLE:الدالة <code>unset()</code>‎ في PHP}}</noinclude>
(PHP 4, PHP 5, PHP 7)
تُزيل البنية <code>unset()</code>‎‎ تعيين المتغيّر المُعطى.
== الوصف ==
<syntaxhighlight lang="php">
void unset ( mixed $var [, mixed $... ] )
</syntaxhighlight>تُدمِّر البنية <code>unset()‎‎</code> المتغيّرات المحددة.
يختلف سلوك الدالّة <code>unset()</code>‎ عند استدعائها داخل دالّة أخرى اعتمادًا على نوع المُتغيّر الذي تُحاول تدميره.
فإذا أزلنا تعيين مُتغيّر عام (global) بداخل دالّة ما فسيدمّر المُتغيّر المحلّي فقط، أمّا المُتغيّر الذي يملك نفس الاسم في المكان الذي نستدعي فيه هذه الدالّة سيحافظ على نفس قيمته كما كانت قبل استدعائها، كما في المثال التالي:<syntaxhighlight lang="php">
<?php
function destroy_foo()
{
    global $foo;
    unset($foo);
}
$foo = 'bar';
destroy_foo();
echo $foo;
?>
</syntaxhighlight>وسيكون ناتج المثال السابق هو:<syntaxhighlight lang="text">
bar
</syntaxhighlight>لإزالة تعيين مُتغيّر عام بداخل دالّة فاستخدم المصفوفة <code>GLOBALS‎$</code> لفعل ذلك:<syntaxhighlight lang="php">
<?php
function foo()
{
    unset($GLOBALS['bar']);
}
$bar = "something";
foo();
?>
</syntaxhighlight>إن أزلنا تعيين متغيّر مُمرَّر عبر مرجع (Reference) بداخل دالة، فسيُدمَّر المتغيّر المحلّي فقط، أمّا المُتغيّر الذي يملك نفس الاسم في المكان الذي نستدعي فيه هذه الدالّة سيحافظ على نفس قيمته كما كانت قبل استدعائها:<syntaxhighlight lang="php">
<?php
function foo(&$bar)
{
    unset($bar);
    $bar = "blah";
}
$bar = 'something';
echo "$bar\n";
foo($bar);
echo "$bar\n";
?>
</syntaxhighlight>ينتج عن المثال السّابق ما يلي:<syntaxhighlight lang="text">
something
something
</syntaxhighlight>إن أزلنا تعيين متغيّر ثابت (static) بداخل دالة ما، فستُدمِّر البنية <code>unset()</code>‎ هذا المتغيّر فقط ضمن بقيّة هذه الدالة، وستستعيد الاستدعاءات التالية القيمة السابقة لهذا المتغيّر.<syntaxhighlight lang="php">
<?php
function foo()
{
    static $bar;
    $bar++;
    echo "Before unset: $bar, ";
    unset($bar);
    $bar = 23;
    echo "after unset: $bar\n";
}
foo();
foo();
foo();
?>
</syntaxhighlight>ينتج عن المثال السّابق ما يلي:<syntaxhighlight lang="text">
Before unset: 1, after unset: 23
Before unset: 2, after unset: 23
Before unset: 3, after unset: 23
</syntaxhighlight>
== المعاملات ==
=== <code>var</code> ===
المتغيّر المطلوب إزالة تعيينه.
=== <code>…</code> ===
متغيّر آخر.
== القيم المعادة ==
لا تُعاد أي قيمة.
== أمثلة ==
المثال 1: مثال على البنية <code>unset()‎</code><syntaxhighlight lang="php">
<?php
// تدمير متغيّر واحد
unset($foo);
// تدمير عنصر واحد من المصفوفة
unset($bar['quux']);
// تدمير أكثر من متغيّر
unset($foo1, $foo2, $foo3);
?>
</syntaxhighlight>المثال 2: استخدام <code>unset</code> كتحويل للأنواع (casting)
تلتبس <code>unset</code> عند استخدامها لتحويل الأنواع مع البنية <code>unset()‎</code>، إذ تخدم <code>unset</code> فقط للتحويل إلى النوع <code>NULL</code>، فهي لا تُبدِّل المتغيّر الذي تقلب نوعه، أُزيلت <code>unset</code> لتحويل الأنواع بدءًا من إصدار PHP 7.2.0:<syntaxhighlight lang="php">
<?php
$name = 'Felipe';
var_dump((unset) $name);
var_dump($name);
?>
</syntaxhighlight>ينتج عن المثال السّابق ما يلي:<syntaxhighlight lang="text">
NULL
string(6) "Felipe"
</syntaxhighlight>
== ملاحظات ==
لمّا كانت هذه البنية هي من البنى التابعة للغة فلا يُمكِن استخدامها مع [[PHP/variable functions|الدوال المتغيّرة]].
من الممكن إزالة تعيين خصائص الكائنات المرئيّة ضمن السّياق الحالي.
من غير الممكن إزالة تعيين المتغيّر <code>this$</code> بداخل تابع كائن بدءًا من إصدار PHP 5.
عند استخدام البنية <code>unset()‎</code> على خصائص الكائن غير القابلة للوصول، فسيُستدعى التابع <code>[[PHP/overloading#.D8.A7.D9.84.D8.AA.D8.AD.D9.85.D9.8A.D9.84 .D8.A7.D9.84.D8.B2.D8.A7.D8.A6.D8.AF .D9.84.D9.84.D8.AA.D9.88.D8.A7.D8.A8.D8.B9|unset()‎__]]</code> إن كان مُعرَّفًا.
== انظر أيضًا ==
* الدالة <code>[[PHP/isset|isset()]]</code>‎: معرفة إذا ما كان المتغيّر مُعرَّفًا وقيمته ليست NULL.
* الدالة <code>[[PHP/empty|empty()]]</code>‎: معرفة إذا ما كان المتغيّر فارغًا.
* التحميل الزائد للدالة <code>[[PHP/overloading#.D8.A7.D9.84.D8.AA.D8.AD.D9.85.D9.8A.D9.84 .D8.A7.D9.84.D8.B2.D8.A7.D8.A6.D8.AF .D9.84.D9.84.D8.AA.D9.88.D8.A7.D8.A8.D8.B9|unset()‎__]]</code>.
* الدالة <code>[[PHP/array splice|array_splice()]]</code>‎: إزالة جزء من المصفوفة واستبداله بشيء آخر.
== مصادر ==
* [http://php.net/manual/en/function.unset.php صفحة البنية unset في توثيق PHP الرسمي].
[[تصنيف:PHP]]
[[تصنيف:PHP Function]]
[[تصنيف:PHP Variable Handling]]

المراجعة الحالية بتاريخ 10:02، 18 أبريل 2018

(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()‎: إزالة جزء من المصفوفة واستبداله بشيء آخر.

مصادر