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

من موسوعة حسوب
< PHP
ط استبدال النص - 'PHP/Control Structures/include' ب'PHP/include'
ط نقل عبد اللطيف ايمش صفحة PHP/Functions/variable-functions إلى PHP/variable functions: إعادة هيكلة التوثيق
 
(7 مراجعات متوسطة بواسطة نفس المستخدم غير معروضة)
سطر 2: سطر 2:
تدعم PHP مفهوم الدوال المتغيّرة والذي يعني أنّه في حال إلحاق قوسين إلى نهاية اسم أحد المتغيّرات، فإنّ اللغة ستبحث عن دالة تحمل الاسم ذاته، وستحاول تنفيذها. يمكن الاستفادة من هذه الميزة في الاستدعاءات الخلفية callbacks، وجداول الدوال وما إلى ذلك.
تدعم PHP مفهوم الدوال المتغيّرة والذي يعني أنّه في حال إلحاق قوسين إلى نهاية اسم أحد المتغيّرات، فإنّ اللغة ستبحث عن دالة تحمل الاسم ذاته، وستحاول تنفيذها. يمكن الاستفادة من هذه الميزة في الاستدعاءات الخلفية callbacks، وجداول الدوال وما إلى ذلك.


لا تعمل الدوال المتغيرة مع البنى التابعة للغة مثل <code>[[PHP/Function/echo|echo]]</code> و <code>[[PHP/Function/print|print]]</code> و <code>[[PHP/Function/unset|unset()‎]]</code> و <code>[[PHP/Function/isset|isset()]]</code>‎ و <code>[[PHP/Function/empty|empty()]]</code>‎ و <code>[[PHP/include|include]]</code> و <code>[[PHP/Control Structures/require|require]]</code> وما شابهها، ولاستخدام أيّ من هذه الدوال كدوال متغيرة يمكن الاستعانة بدوالّ تغليف.
لا تعمل الدوال المتغيرة مع البنى التابعة للغة مثل <code>[[PHP/echo|echo]]</code> و <code>[[PHP/print|print]]</code> و <code>[[PHP/unset|unset()‎]]</code> و <code>[[PHP/isset|isset()]]</code>‎ و <code>[[PHP/empty|empty()]]</code>‎ و <code>[[PHP/include|include]]</code> و <code>[[PHP/require|require]]</code> وما شابهها، ولاستخدام أيّ من هذه الدوال كدوال متغيرة يمكن الاستعانة بدوالّ تغليف.


المثال 1: مثال على الدوال المتغيرة
المثال 1: مثال على الدوال المتغيرة
سطر 110: سطر 110:
</syntaxhighlight>
</syntaxhighlight>


راجع أيضًا <code>[[PHP/Function/is-callable|is_callable()‎]]</code> و <code>[[PHP/Function/call-user-func|call_user_func()]]</code>‎ و<nowiki/>[[PHP/Variables/variable|المتغيرات المتغيرة]] و <code>[[PHP/Function/function-exists|function_exists()‎]]</code>.
راجع أيضًا <code>[[PHP/is_callable|is_callable()‎]]</code> و <code>[[PHP/call_user_func|call_user_func()]]</code>‎ و<nowiki/>[[PHP/variable variables|المتغيرات المتغيرة]] و <code>[[PHP/function_exists|function_exists()‎]]</code>.


== سجل التغييرات ==
== سجل التغييرات ==

المراجعة الحالية بتاريخ 03:50، 4 أبريل 2018

تدعم PHP مفهوم الدوال المتغيّرة والذي يعني أنّه في حال إلحاق قوسين إلى نهاية اسم أحد المتغيّرات، فإنّ اللغة ستبحث عن دالة تحمل الاسم ذاته، وستحاول تنفيذها. يمكن الاستفادة من هذه الميزة في الاستدعاءات الخلفية callbacks، وجداول الدوال وما إلى ذلك.

لا تعمل الدوال المتغيرة مع البنى التابعة للغة مثل echo و print و unset()‎ و isset()‎ و empty()‎ و include و require وما شابهها، ولاستخدام أيّ من هذه الدوال كدوال متغيرة يمكن الاستعانة بدوالّ تغليف.

المثال 1: مثال على الدوال المتغيرة

<?php
function foo() {
    echo "In foo()<br />\n";
}

function bar($arg = '')
{
    echo "In bar(); argument was '$arg'.<br />\n";
}

// مثال على دالة تغليف
function echoit($string)
{
    echo $string;
}

$func = 'foo';
$func();        // This calls foo()

$func = 'bar';
$func('test');  // This calls bar()

$func = 'echoit';
$func('test');  // This calls echoit()
?>

يمكن استدعاء توابع الكائنات بنفس الصيغة المتبعة لاستدعاء الدوال المتغيرة.

المثال 2: مثال على تابع متغيّر

<?php
class Foo
{
    function Variable()
    {
        $name = 'Bar';
        $this->$name(); // This calls the Bar() method
    }
    
    function Bar()
    {
        echo "This is Bar";
    }
}

$foo = new Foo();
$funcname = "Variable";
$foo->$funcname();  // This calls $foo->Variable()

?>

عند استدعاء توابع ساكنة، يكون استدعاء الدالة أقوى من عامل الخاصية الساكنة static property:

المثال 3: مثال عن تابع متغيّر مع خاصية ساكنة

<?php
class Foo
{
    static $variable = 'static property';
    static function Variable()
    {
        echo 'Method Variable called';
    }
}

echo Foo::$variable; // This prints 'static property'. It does need a $variable in this scope.
$variable = "Variable";
Foo::$variable();  // This calls $foo->Variable() reading $variable in this scope.

?>

أصبح بالإمكان منذ الإصدار 5.4.0 من اللغة استدعاء أي قيمة قابلة للاستدعاء ومخزَّنة في متغير.

المثال 4: قيم معقدة قابلة للاستدعاء

<?php
class Foo
{
    static function bar()
    {
        echo "bar\n";
    }
    function baz()
    {
        echo "baz\n";
    }
}

$func = array("Foo", "bar");
$func(); // prints "bar"
$func = array(new Foo, "baz");
$func(); // prints "baz"
$func = "Foo::bar";
$func(); // prints "bar" as of PHP 7.0.0; prior, it raised a fatal error
?>

راجع أيضًا is_callable()‎ و call_user_func()‎ والمتغيرات المتغيرة و function_exists()‎.

سجل التغييرات

الإصدار الوصف
7.0.0 أصبح بالإمكان استخدام الصيغة "ClassName::methodName" كدالة متغيرة.
5.4.0 أصبح بالإمكان استخدام المصفوفات - وهي قابلة للاستدعاء - كدوال متغيرة.

مصادر