طراحی وب سایت کتابخانه

طراحی وب سایت کتابخانه

توابع متغیر

پنجشنبه, ۲۱ خرداد ۱۳۹۴، ۱۲:۱۷ ب.ظ

زبان پی اچ پی از مفهوم توابع متغیر (variable functions) نیز پشتیبانی می کند. این بدان معنی است که اگر یک نام متغیر دارای پرانتز باشد، پی اچ پی به دنبال یک تابع با نام مشابه می گردد تا متغیر را بر اساس آن ارزیابی نماید، و در نهایت تلاش می کند آن را اجرا کند. علاوه بر کارهای دیگر، از این ویژگی می توان برای اجرای callback، جداول تابع، و چیزهایی شبیه به آن استفاده کرد.

توابع متغیر با ساختارهای زبانی مانند echo, print, unset(), isset(), empty() include, require و چیزهایی شبیه به آن عمل نمی کنند. اگر می خواهید از هر کدام از این ساختار ها به عنوان توابع متغیر استفاده کنید، از توابع پوشش دهنده استفاده نمایید.

مثال اول: مثال تابع متغیر

<?php
function foo() {
    echo "In foo()
\n"; } function bar($arg = '') { echo "In bar(); argument was '$arg'.
\n"; } // This is a wrapper function around echo 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() ?>

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

مثال دوم: مثال متد متغیر

<?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) قوی تر است:

مثال سوم: مثال متد متغیر به همراه ویژگی ایستا

<?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.

?>
موافقین ۱ مخالفین ۰ ۹۴/۰۳/۲۱
مهرداد یوسفی فرد

نظرات (۰)

هیچ نظری هنوز ثبت نشده است

ارسال نظر

ارسال نظر آزاد است، اما اگر قبلا در بیان ثبت نام کرده اید می توانید ابتدا وارد شوید.
شما میتوانید از این تگهای html استفاده کنید:
<b> یا <strong>، <em> یا <i>، <u>، <strike> یا <s>، <sup>، <sub>، <blockquote>، <code>، <pre>، <hr>، <br>، <p>، <a href="" title="">، <span style="">، <div align="">
تجدید کد امنیتی