شرح صفوف ومحتوى الفقرة
في PHP، إذا كان المتغير يحمل اسماً نصياً لدالة وأتبعته بقوسين $fn()، يقوم PHP بالبحث عن تلك الدالة وتنفيذها ديناميكياً.
- تحقق دائماً من وجود الدالة باستخدام
function_exists($fn)أوis_callable($fn)قبل استدعائها عبر$fn(). - بنى اللغة الأساسية مثل
echoوissetوemptyوunsetوincludeليست دوال ولا يمكن استدعاؤها كدوال متغيرة. - لا تنفذ أبداً نصاً قادماً من المستخدم كدالة متغيرة مباشرة؛ بل احصر الاستدعاءات في قائمة بيضاء محددة مسبقاً.
تتحقق function_exists($operation) من توفر الدالة strtoupper قبل أن يستدعيها التعبير $operation($input) ديناميكياً.
PHP
<?php
$operation = "strtoupper";
$input = "closetag php 8.4";
if (function_exists($operation)) {
echo "Result: " . $operation($input) . "\n";
}
echo "mb_strlen available? " . (function_exists("mb_strlen") ? "Yes" : "No") . "\n";