الفرق بين المراجعتين لصفحة: «PHP/variable variables»
لا ملخص تعديل |
ط استبدال النص - '\[\[تصنيف:(.*)\]\]' ب'{{SUBPAGENAME}}' |
||
سطر 72: | سطر 72: | ||
== مصادر == | == مصادر == | ||
* [http://php.net/manual/en/language.variables.variable.php صفحة Variables variables في توثيق PHP الرسمي.] | * [http://php.net/manual/en/language.variables.variable.php صفحة Variables variables في توثيق PHP الرسمي.] | ||
[[تصنيف:PHP]] | [[تصنيف:PHP|{{SUBPAGENAME}}]] | ||
[[تصنيف:PHP Variables]] | [[تصنيف:PHP Variables|{{SUBPAGENAME}}]] |
مراجعة 15:41، 28 يناير 2018
قد تحتاج في بعض الأحيان إلى استخدام أسماء متغيّرة للمتغيرات، بمعنى أن تعيين اسم المتغيّر واستخدامه يكون بصورة ديناميكية. لتعريف المتغيرات العادية نستخدم الصيغة التالية:
<?php
$a = 'hello';
?>
أما المتغيّر المتغير (variable variable) فيأخذ قيمة متغيّر معين ويستخدمه كاسم لمتغير آخر. في المثال السابق يمكن استخدام الكلمة hello
كاسم لمتغير آخر وذلك باستخدام علامتي $
عند التعبير عن المتغير:
<?php
$$a = 'world';
?>
في هذه النقطة هناك متغيّران معرّفان ومخزنان في شجرة رموز PHP (أي PHP symbol tree): الأول هو $a
وقيمته "hello"
والثاني هو $hello
وقيمته "world"
. وهكذا تكون مخرجات العبارة التالية:
<?php
echo "$a ${$a}";
?>
مشابهة تمامًا لمخرجات العبارة:
<?php
echo "$a $hello";
?>
بمعنى أنّ النتيجة هي: hello world.
يمكن استخدام المتغيرات المتغيرة مع المصفوفات، ولكن سيحصل التباس في هذه الحالة، فعند كتابة $$a[1]
يجب على مفسّر اللغة معرفة ما إذا كان المقصود هو استخدام $a[1]
كمتغير، أو أن المطلوب هو استخدام $$a
كمتغير ثم [1] كفهرس (مفتاح) لذلك المتغير. ولرفع هذا الالتباس تكون صيغة التعبير للحالة الأولى هي ${$a[1]}
، وللحالة الثانية ${$a}[1]
.
يمكن الوصول إلى خصائص الأصناف بواسطة أسماء خصائص متغيرة (variable property names). وسيحلّل اسم الخاصية المتغير ضمن النطاق الذي حصل فيه الاستدعاء. على سبيل المثال، عند استخدام تعبير مثل $foo->$bar
يجرى فحص النطاق المحلي بحثًا عن المتغير $bar
وستُستخدم قيمته كاسم للخاصية $foo
. ما سبق ينطبق كذلك في حال كون $bar
معامل وصول إلى مصفوفة.
تنبيه: في حال كون الخاصّية المتغيّرة على هيئة مصفوفة فإن الاستمرار في إلغاء مرجعيتها يتطلب استخدام صيغ مختلفة بين الإصدارين الخامس والسابع من PHP. يتضمن دليل الانتقال إلى الإصدار 7.0 من PHP تفاصيل إضافية عن التغييرات الحاصلة على التعبيرات، وكيفية استخدام الأقواس المعقوفة ({}
) لرفع الالتباس.
يمكن استخدام الأقواس المعقوفة لتعيين حدود اسم الخاصية. وتتجلّى فائدة الأقواس المعقوفة عند الحاجة للوصول إلى قيم تابعة لخاصية تحتوي على مصفوفة، أو عندما يتكوّن اسم الخاصّية من أجزاء متعددة، أو عندما يتضمن اسم الخاصية أحرفًا غير مسموح بها في سياقات أخرى (مثال: من json_decode()
أو SimpleXML
).
المثال 1: مثال على خاصّية متغيرة
<?php
class foo {
var $bar = 'I am bar.';
var $arr = array('I am A.', 'I am B.', 'I am C.');
var $r = 'I am r.';
}
$foo = new foo();
$bar = 'bar';
$baz = array('foo', 'bar', 'baz', 'quux');
echo $foo->$bar . "\n";
echo $foo->{$baz[1]} . "\n";
$start = 'b';
$end = 'ar';
echo $foo->{$start . $end} . "\n";
$arr = 'arr';
echo $foo->{$arr[1]} . "\n";
?>
مخرجات المثال السابق هي:
I am bar.
I am bar.
I am bar.
I am r.
تحذير: يرجى الانتباه إلى عدم إمكانية استخدام المتغيرات المتغيرة في المصفوفات ذوات النطاق العام العالي (superglobal arrays) ضمن الدوال أو توابع الأصناف. كذلك الأمر بالنسبة للمتغيّر $this
، فهو متغيّر خاص ولا يمكن الإشارة إليه ديناميكيًا.