شما چیزی در مورد بسته شدن در php می دانید. PHP: توابع ناشناس

ویکی پدیا می گوید که یک تابع ناشناس تابع است که می تواند بدون شناسه وجود داشته باشد. به نظر می رسد بسیار جالب است! در این آموزش ، چند نمونه از نحوه ایجاد و فراخوانی یک تابع با روشهای غیر استاندارد را به شما نشان می دهم.

بیایید بلافاصله با مثال شروع کنیم:

تست عملکرد ($ var) (انعکاس "This is $ var"؛)

این خیلی عملکرد ساده... اکنون ، علاوه بر فراخوان معمول ، می توانیم این تابع را با استفاده از متغیری که نام این تابع را ذخیره می کند اجرا کنیم. چیزی شبیه به این:

$ f = "آزمایش" ؛ $ f ("عملکرد متغیر") ؛

اگر کد را اجرا کنید ، پیغام This is variable function را مشاهده خواهید کرد. برای اطلاع شما ، مدیریت نقل قول های سریعتر از نقل قول های دوگانه سریعتر است.

ما می توانیم از این تکنیک در OOP نیز استفاده کنیم. مثال از php.net:

Class Foo (تابع متغیر () ($ name = "Bar" ؛ $ this -> $ name ()؛ // این روش Bar () را فراخوانی می کند تابع Bar () (انعکاس "این نوار است" ؛)) $ foo = جدید Foo ()؛ $ funcname = "متغیر"؛ $ foo -> $ funcname ()؛ // این فراخوانی $ foo-> متغیر ()

این مفهوم کاملاً جالب است. می توان از آن برای اجرای فراخوانی ها ، جداول عملکردی و غیره استفاده کرد.

اکنون سعی می کنم توابع ناشناس را برای شما توضیح دهم:

$ input = آرایه (1 ، 2 ، 3 ، 4 ، 5) ؛ $ output = array_filter ($ input، function ($ v) (return $ v> 2؛))؛

تابع ($ v) (return $ v> 2؛) یک تابع ناشناس است. همچنین می توانیم آن را به متغیری برای استفاده بعدی اختصاص دهیم.

$ max = تابع ($ v) (بازگشت $ v> 2؛)؛ $ input = آرایه (1 ، 2 ، 3 ، 4 ، 5) ؛ $ output = array_filter ($ input ، $ max) ؛

حالا بیایید با کلمه کلیدی استفاده جدید آشنا شویم. بیایید یک تابع ناشناس دیگر برای این کار بنویسیم (با PHP 5.3 کار می کند):

$ max_comp = تابع ($ max) (عملکرد بازگشت ($ v) استفاده ($ max) (بازگشت $ v> $ max؛)؛)؛ $ input = آرایه (1 ، 2 ، 3 ، 4 ، 5) ؛ $ output = array_filter ($ input، $ max_comp (2))؛

در این مثال ، ما از اثر snapping با کلید واژه use استفاده می کنیم. این تکنیک به یک تابع ناشناس اجازه می دهد تا به متغیرهای خارجی دسترسی پیدا کند. آیا نسبی از برنامه نویسی رویه ای وجود دارد؟

در اینجا مثال ساده تری وجود دارد:

$ string = "سلام جهان!"؛ $ closure = function () use ($ string) (echo $ string؛)؛ $ close ()؛

همانطور که گفتم ، متغیرهایی که ما می خواهیم (از محدوده جهانی) در چنین توابع استفاده کنیم باید از طریق استفاده منتقل شوند. مهم است که توجه داشته باشید که فقط مقدار به طور پیش فرض منتقل می شود ، بنابراین اگر می خواهید محتوای متغیر منتقل شده را تغییر دهید و می خواهید خارج از تابع ناشناس تغییر کند ، مقدار را در:

$ x = 1؛ $ close = تابع () استفاده از (& $ x) (++ $ x؛)؛ پژواک $ x "
"؛ $ closure ()؛ پژواک $ x."
"؛ $ closure ()؛ پژواک $ x."
";

در این مثال ، روش ما هر بار که تابع ناشناس فراخوانی می شود ، محتویات متغیر $ x را تغییر می دهد. اگر آدرس متغیر و خود متغیر را ارسال نکرده بودیم ، سه عدد 1 خروجی داشتیم.

زیبایی واقعی بسته شدن این است که فضای نام تجاری جهانی را به هم نمی ریزد. به محض اینکه عملکرد ناشناس عمل را انجام داد ، تمام متغیرهای مورد استفاده در آن به طور خودکار از بین می روند.

سلام به همگی و امروز در مورد آن صحبت خواهیم کرد توابع ناشناس در php چیست؟و کجا از آنها استفاده کنیم

توابع ناشناس، یا به طریقی دیگر توابع لامبداتوابعی هستند که هیچ نامی ندارند.

نمونه ای از تابع معمولی

تابع FuName ($ txt) (
echo "متن من:". $ txt؛
}

$ func = "FuName"؛
$ func ("متن من") ؛
?>

ما یک تابع داریم که یک پارامتر می گیرد. بعد ، نام تابع را در یک متغیر می نویسیم و آن را فراخوانی می کنیم. هیچ چیز غیر عادی نیست. که در OOPسبک آن توجیه بیشتری خواهد داشت

کلاس MyClass (
نوار عملکرد () (
// کد
}
}

$ class = MyClass جدید ()؛
$ func = "نوار"؛
$ class -> $ func ()؛
?>

توابع ناشناس

اگر با توابع ناشناس از زبان آشنا هستید جاوا اسکریپت، سپس می فهمید که چرا به آنها احتیاج دارد ، و اگر نه ، ادامه مطلب را بخوانید.

برای فراخوانی تابع ناشناس در جایی دیگر در کد برنامه ، می توانیم آن را به یک متغیر اختصاص دهیم

$ func = تابع () (
// کد
};

$ func ()؛
?>

توجه داشته باشید که در انتها وجود دارد ; از آنجا که مقدار متغیر را برابر با تابع اختصاص می دهیم. اما کل موضوع در این نیست ، بلکه در این واقعیت است که ما می توانیم از این توابع به عنوان استفاده کنیم توابع تماس... مثلا:

$ val = array_filter ($ input، function ($ v) (return $ v> 2؛))؛
?>

استفاده از کلمه کلیدی

بازم اگه میدونید جاوا اسکریپتسپس این برای شما مشکلی نخواهد بود کلمه کلیدیاستفاده کنیدبه شما امکان می دهد از تکنیک استفاده کنید بسته شدن، یعنی با کمک آن می توانیم به متغیرهای خارجی برسیم.

$ mx = تابع ($ high_val) (
تابع بازگشت ($ val) استفاده ($ high_val) (
$ val> $ high_val را برگردانید ؛
};
};

$ i = آرایه (1 ، 2 ، 3 ، 4 ، 5 ، 6 ، 7) ؛
$ o = array_filter ($ input ، $ max_comp (2)) ؛
?>

در اینجا ما درون خودمان هستیم توابع لامبدااز متغیر جهانی استفاده کنید ارتفاع_بالا... برای اینکه این امر امکان پذیر باشد ، ما باید بعد از کلمه تابعو پارامترهای داخل پرانتز بنویسید استفاده کنیدو نام متغیر خارجی را که می خواهیم در داخل کد تابع استفاده کنیم ، به آنجا منتقل کنید.

با این حال ، ما نمی توانیم مقدار متغیر جهانی خود را به این طریق تغییر دهیم. برای انجام این کار ، باید علامت را در جلوی نام آن مشخص کنید &

$ name = "برایان"؛
$ setName = تابع ($ n) استفاده (& $ name) (
$ name = $ n؛
};

$ setName ("دیوید")؛
echo $ name؛
?>

نتیجه

بنابراین امروز متوجه شدید توابع ناشناس در php چیست و چگونه از آنها استفاده کنیم... موفق باشید!

یک تابع را می توان به یک متغیر درست مانند یک مقدار معمولی اختصاص داد. برای انجام این کار ، نام تابع باید به عنوان یک رشته به متغیر اختصاص داده شود ، اما بدون پرانتز:

\ n "؛) $ my_func =" foo "؛ // اکنون می توانیم تابع foo () را با استفاده از متغیر $ my_func اجرا کنیم // که نام تابع مشخص شده را به عنوان یک رشته $ my_func ()؛ // // ذخیره می کند تابع foo ()؟>

این مفهوم PHP متغیرهای تابع نامیده می شود. این شامل این واقعیت است که اگر در انتها پرانتز را به متغیر اضافه کنید ، مترجم PHP ابتدا بررسی می کند که آیا یک تابع با نام برابر معنیمتغیر است و اگر چنین تابعی وجود داشته باشد ، آن را اجرا می کند.

بنابراین ، همانطور که در مثال بالا نشان داده شده است ، فقط می توانید با توابع خاص کاربران کار کنید. ساختارها و عملکردهای زبان داخلی مانند echo ، unset () ، isset () و سایر موارد مشابه آنها را نمی توان مستقیماً به متغیرها به همان شیوه اختصاص داد. اما می توانید تابع wrapper خود را بسازید تا ساختارهای زبان داخلی مانند توابع سفارشی کار کنند.

توابع ناشناس

عملکرد ناشناس- عملکردی که نام خاص خود را ندارد ، گاهی اوقات می توانید نام دیگری برای چنین توابع پیدا کنید - عملکرد lambda. توابع ناشناس را می توان به عنوان آرگومان به توابع دیگر منتقل کرد یا به عنوان مقادیر معمولی به متغیرها اختصاص داد:

به مثال توجه کنید ، در انتهای تعریف تابع یک نقطه ویرگول وجود دارد ، زیرا یک تابع ناشناس در اصل یک مقدار است و ما یک مقدار را به یک متغیر اختصاص می دهیم ، سپس در پایان ، همانطور که برای دستورالعمل های معمولی ، یک نقطه ویرگول است قرار دادن.

توابع ناشناس با توابع نامگذاری شده تفاوت دارند زیرا فقط در لحظه ای که اجرا به آنها می رسد ایجاد می شوند ، بنابراین فقط پس از تعریف می توان از آنها استفاده کرد: