سؤال

في PHP لديك الدالة create_function()‎ التي تنشئ دالة لامدا مسماة فريدة مثل هذا:

$myFunction = create_function('$foo', 'return $foo;');
$myFunction('bar'); //Returns bar

هل هذا في الواقع أفضل (بصرف النظر عن كونه أكثر سهولة) ثم القيام بما يلي:

do{
 $myFunction = 'createdFunction_'.rand();
}
while(function_exists($myFunction));
eval("function $myFunction(\$foo) { return \$foo; }");
$myFunction('bar'); //Returns bar

هل create_function أفضل حقًا؟(بغض النظر عن حقيقة أنه أكثر سهولة)

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

المحلول

في فهمي للمستندات ذات الصلة، [1] وكلاهما تفعل الشيء نفسه، create_function () ويأتي للتو مع اسم وظيفة فريدة من نوعها بالنسبة لك.

لمعالجة بعض تعليقات أخرى على هذا السؤال:

<اقتباس فقرة>   

ويمكن تعيين create_function إلى متغير جعل وظيفة الوصول إلى أجزاء أخرى من التعليمات البرمجية الخاصة بك، في حين أن وحدة التقييم مفيد فقط لنطاق معين.

قد يكون جيدا أن وحدة التقييم () يعمل في النطاق الحالي، ولكن التعاريف وظيفة يحصل ملقاة في مساحة الاسم العالمي على أية حال. [2] لذلك كلما قمت بتعريف وظيفة، وسوف تكون متاحة في أي مكان آخر في البرنامج.

<اقتباس فقرة>   

وعن طريق وحدة التقييم () سوف فوضى القائمة وظيفة العالمية، create_function () سوف لا

وcreate_function () إرجاع فقط سلسلة مع اسم وظيفة جديدة، [3] وليس بعض خاص نوع الاستدعاء. لذا، فإن كلا تقنيات تلوث مساحة العمومي.

وحتى لا، وبصرف النظر عن create_function () كونه أسهل، فإنه لا يبدو أن هناك أي أفضل من وحدة التقييم ().

والحواشي:

[1] http://au2.php.net/manual /en/functions.user-defined.php . http://au.php.net/create_function . http://au.php.net/eval

[2] http://au2.php.net/manual /en/functions.user-defined.php

[3] http://au.php.net/create_function

نصائح أخرى

سيؤدي استخدام eval() إلى حدوث فوضى في قائمة الوظائف العامة، بينما لن يؤدي استخدام create_function() إلى حدوث فوضى، وبصرف النظر عن ذلك لا يوجد فرق كبير. لكن, ، تتطلب كلتا الطريقتين كتابة نص الوظيفة داخل سلسلة PHP المعرضة للخطأ، وإذا كنت تعمل في مشروعي، فسأطلب منك فقط الإعلان عن وظيفة مساعدة باستخدام بناء الجملة العادي.

يتم تنفيذ الوظائف المجهولة في PHP بشكل سيء للغاية مما يجعل الكود الخاص بك أفضل حالًا بالفعل لا استخدمهم.(ولحسن الحظ سيتم إصلاح هذا في PHP 5.3).

وشخصيا، لقد وجدت أن create_function () غير مفيد للغاية عندما يكون الترتيب المصفوفات.

في الواقع، أنا فقط بحثت على شبكة الإنترنت، ويبدو أن الوثائق PHP لديها خير مثال على ذلك.

http://us.php.net/create_function

وانتقل لأسفل إلى <م> مثال رقم 3 وظائف عن طريق مجهول وظائف رد .

ويمكن تعيين create_function إلى متغير جعل وظيفة الوصول إلى أجزاء أخرى من التعليمات البرمجية الخاصة بك، في حين eval هو مفيد فقط لنطاق معين.

(وبصرف النظر عن حقيقة أنها هي أكثر سهولة)

وأنا لا أفهم كيف يمكن استبعاد هذا بهذه السهولة. نظرا لديك مثالين، وهو أسهل للفهم في لمحة؟ Create_function يقول لك ما كنت تنوي تحقيقه. وحدة التقييم لا.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top