ডিফল্টরূপে এটি সম্ভব নয়। আপনি যদি এটি ওওপি উপায়ে করেন তবে কার্যকারিতা রয়েছে।
আপনি যে মানগুলি পরে ব্যবহার করতে চান তা সঞ্চয় করতে আপনি একটি শ্রেণি তৈরি করতে পারেন।
উদাহরণ:
/**
* Stores a value and calls any existing function with this value.
*/
class WPSE_Filter_Storage
{
/**
* Filled by __construct(). Used by __call().
*
* @type mixed Any type you need.
*/
private $values;
/**
* Stores the values for later use.
*
* @param mixed $values
*/
public function __construct( $values )
{
$this->values = $values;
}
/**
* Catches all function calls except __construct().
*
* Be aware: Even if the function is called with just one string as an
* argument it will be sent as an array.
*
* @param string $callback Function name
* @param array $arguments
* @return mixed
* @throws InvalidArgumentException
*/
public function __call( $callback, $arguments )
{
if ( is_callable( $callback ) )
return call_user_func( $callback, $arguments, $this->values );
// Wrong function called.
throw new InvalidArgumentException(
sprintf( 'File: %1$s<br>Line %2$d<br>Not callable: %3$s',
__FILE__, __LINE__, print_r( $callback, TRUE )
)
);
}
}
এখন আপনি যে কোনও ফাংশনটি দিয়ে ক্লাসটি কল করতে পারেন - ফাংশনটি কোথাও উপস্থিত থাকলে এটি আপনার সঞ্চিত প্যারামিটারগুলির সাথে ডাকা হবে।
আসুন একটি ডেমো ফাংশন তৈরি করি…
/**
* Filter function.
* @param array $content
* @param array $numbers
* @return string
*/
function wpse_45901_add_numbers( $args, $numbers )
{
$content = $args[0];
return $content . '<p>' . implode( ', ', $numbers ) . '</p>';
}
... এবং একবার ব্যবহার করুন ...
add_filter(
'the_content',
array (
new WPSE_Filter_Storage( array ( 1, 3, 5 ) ),
'wpse_45901_add_numbers'
)
);
… এবং আবার …
add_filter(
'the_content',
array (
new WPSE_Filter_Storage( array ( 2, 4, 6 ) ),
'wpse_45901_add_numbers'
)
);
আউটপুট:
চাবিকাঠি পুনর্ব্যাবহার্যোগ্যতা ছেলে তুমি ক্লাসে (এবং আমাদের জন্য দৃষ্টান্তস্বরূপ ফাংশনে) পুনরায় ব্যবহার করতে পারেন।
পিএইচপি 5.3+
আপনি যদি পিএইচপি সংস্করণ 5.3 ব্যবহার করতে পারেন বা নতুন ক্লোজারগুলি এটিকে আরও সহজ করে তুলবে:
$param1 = '<p>This works!</p>';
$param2 = 'This works too!';
add_action( 'wp_footer', function() use ( $param1 ) {
echo $param1;
}, 11
);
add_filter( 'the_content', function( $content ) use ( $param2 ) {
return t5_param_test( $content, $param2 );
}, 12
);
/**
* Add a string to post content
*
* @param string $content
* @param string $string This is $param2 in our example.
* @return string
*/
function t5_param_test( $content, $string )
{
return "$content <p><b>$string</b></p>";
}
খারাপ দিকটি হ'ল আপনি ক্লোজারগুলির জন্য ইউনিট পরীক্ষা লিখতে পারবেন না।