PHP 7.2 फ़ंक्शन create_function() पदावनत है




(4)

मैं एक बहुत आसान मामले के साथ योगदान करना चाहता हूं जो मुझे एक वर्डप्रेस थीम में मिला और ठीक से काम करने के लिए लगता है:

निम्नलिखित add_filter स्टेटमेंट रखना :

add_filter( 'option_page_capability_' . ot_options_id(), create_function( '$caps', "return '$caps';" ), 999 );

इसके लिए बदलें:

add_filter( 'option_page_capability_' . ot_options_id(), function($caps) {return $caps;},999);

हम फ़ंक्शन बनाने के लिए (), कार्यों को बनाने के लिए एक deprecated create_function () के बजाय बहुत विशिष्ट फ़ंक्शन निर्माण देख सकते हैं। आशा करता हूँ की ये काम करेगा।

मैंने नीचे अपने आवेदन में create_function का उपयोग किया है।

$callbacks[$delimiter] = create_function('$matches', "return '$delimiter' . strtolower(\$matches[1]);");

लेकिन PHP 7.2.0 के लिए, create_function () पदावनत है।

किसी भी विचार, कैसे PHP 7.2.0 पर ऊपर मेरे कोड को ठीक करने के लिए।

आपकी सहायता के लिए धन्यवाद,


आपको माता-पिता को डुप्लिकेट किए गए $delimiter वैरिएबल के कॉल के साथ एक बेनामी फंक्शन (उर्फ क्लोजर) का उपयोग करने में सक्षम होना चाहिए, जैसे:

$callbacks[$delimiter] = function($matches) use ($delimiter) {
    return $delimiter . strtolower($matches[1]);
};

अगर किसी को अपने कोड में दर्जनों create_function() मामलों को अनाम फ़ंक्शंस में अपग्रेड करने की आवश्यकता है, तो मैं Rector नामक टूल पर काम करता हूं।

यह कोड के माध्यम से जाता है और create_function को अनाम कार्यों 1: 1 से बदल देता है। यह 30 विभिन्न मामलों पर परीक्षण किया गया है।

इंस्टॉल करें

composer require rector/rector --dev

सेट अप

# rector.yml
services:
    Rector\Php\Rector\FuncCall\CreateFunctionToAnonymousFunctionRector: ~

अपने कोड पर चलाएं

vendor/bin/rector process src --config rector.yml --dry-run
vendor/bin/rector process src --config rector.yml

बेनामी कार्यों के इस ऐरे ने मेरे लिए काम किया, नीचे कोड देखें:

// This will be a dynamic name that could 
// be used as a function like "namespace".
$dynamic_name = 'my_dynamic_name';

// Here's some variables that you could use in the scope of
// your dynamic anonymous functions. 
$outerVariable = 'If I need this varible, I can use it';
$outerVariableTwo = 'If I need this varible, I can use it too!';

// Create an array that we can later use and turn into 
// and associative array with our new dynamic anonymous functions.
$dynamicAnonFunctions = [];

// Create the first dynamic function.
$dynamicAnonFunctions[($dynamic_name."_func_one")] = function () use ($outerVariable, $dynamic_name) { 
    echo 'Running: function <b>'.$dynamic_name .'_func_one()</b>';
    echo '<br><br>';
    echo $outerVariable;
    echo '<br><br>';
    echo 'This works :)'; 
    echo '<br><br>';
};

// Create the second dynamic function 
$dynamicAnonFunctions[($dynamic_name."_func_two")] = function () use ($outerVariableTwo, $dynamic_name) { 
    echo '- - - - - - - - - - - - - - - - - - - ';
    echo '<br><br>';
    echo 'Running: function <b>'.$dynamic_name .'_func_two()</b>';
    echo '<br><br>';
    echo $outerVariableTwo;
    echo '<br><br>';
    echo 'This also works :)!'; 
    echo '<br><br>';
};

// Call the functions.
$dynamicAnonFunctions[($dynamic_name."_func_one")]();
$dynamicAnonFunctions[($dynamic_name."_func_two")]();

// Halt execution.
exit();

बस अपनी स्क्रिप्ट फ़ाइल में इसे कॉपी करें और आप echo स्टेटमेंट से आउटपुट देखेंगे, फिर बस अपनी मर्जी से फ़ंक्शन को रिमैप करें!

खुश कोडिंग =)





php