سؤال

حسنًا ، أنا أبحث في الاستخدام create_function لما أحتاج إلى القيام به ، ولا أرى طريقة لتحديد قيم المعلمات الافتراضية معها. هل هذا ممكن؟ إذا كان الأمر كذلك ، فما هو أفضل طريقة لإدخال المعاملات في create_function وظيفة في PHP؟ ربما باستخدام addslashes?

حسنًا ، على سبيل المثال ، لدي وظيفة مثل ذلك:

function testing($param1 = 'blah', $param2 = array())
{
    if($param1 == 'blah')
        return $param1;
    else
    {
        $notblah = '';
        if (count($param2) >= 1)
        {
            foreach($param2 as $param)
                $notblah .= $param;

            return $notblah;
        }
        else
            return 'empty';
    }
}

حسنًا ، فكيف يمكنني استخدامه create_function لفعل الشيء نفسه ، إضافة المعلمات وقيمها الافتراضية؟

الشيء هو أن المعلمات تأتي من ملف نصي ، وكذلك الوظيفة نفسها. لذلك ، أتساءل عن أفضل نهج لهذا باستخدام create_function وكيف يجب أن يتم تحليل السلسلة بالضبط.

شكرًا :)

هل كانت مفيدة؟

المحلول

النظر في وظيفة تم إنشاؤها مع create_function من هنا :

$func = create_function('$who', 'echo "Hello, $who!";');

يمكنك تسميتها مثل هذا:

$func('World');

وستحصل على:

Hello, World!


الآن ، وجود قيمة افتراضية للمعلمة ، يمكن أن يبدو الرمز هكذا:

$func = create_function('$who="World"', 'echo "Hello, $who!";');

ملاحظة: لقد أضفت فقط القيمة الافتراضية للمعلمة ، في الوسيطة الأولى التي تم تمريرها إلى Create_Function.

ثم ، استدعاء الوظيفة الجديدة:

$func();

ما زلت أحصل على:

Hello, World!

أي تم استخدام القيمة الافتراضية للمعلمة.


لذلك ، تعمل القيم الافتراضية للمعلمات مع create_function تمامًا كما يفعلون للوظائف الأخرى: عليك فقط وضع القيمة الافتراضية في قائمة المعلمات.

بعد ذلك ، حول كيفية إنشاء السلسلة التي تحتوي على المعلمات وقيمها ... بضع سلسلة من السلسلة ، أفترض ، دون أن ننسى الهروب من ما ينبغي أن يهرب.

نصائح أخرى

هل تريد إنشاء وظيفة مجهولة؟ ال create_function يستخدم لإنشاء وظائف مجهولة. وإلا فإنك تحتاج إلى إنشاء وظيفة مثل عادة:

function name($parms)
{
   // your code here
}

إذا كنت تريد استخدام create_function, ، ها هو النموذج الأولي:

$newfunc = create_function('$a,$b', 'return "ln($a) + ln($b) = " . log($a * $b);');
echo "New anonymous function: $newfunc\n";
echo $newfunc(2, M_E) . "\n";
// outputs
// New anonymous function: lambda_1
// ln(2) + ln(2.718281828459) = 1.6931471805599

أواجه نفس المشكلة ، وأحاول تمرير صفيف إلى وظيفة رد اتصال تم إنشاؤها ... أعتقد أنني سأقوم بإنشاء متغير مؤقت ... إنه أمر قبي بالفعل خفي بما فيه الكفاية كما هو الآن.

لذلك ، لتوضيح:

global $tmp_someArray;
$tmp_someArray = $someArray;
$myCallback = create_function(
    '$arg1',
    '
          global $tmp_someArray;
          // do stuff with $tmp_someArray and $arg1....
          return($something);
    '
);
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top