WordPress/wp-includes/class-wp-matchesmapregex.php
Gary Pendergast aaf99e6913 Code is Poetry.
WordPress' code just... wasn't.
This is now dealt with.

Props jrf, pento, netweb, GaryJ, jdgrimes, westonruter, Greg Sherwood from PHPCS, and everyone who's ever contributed to WPCS and PHPCS.
Fixes #41057.


Built from https://develop.svn.wordpress.org/trunk@42343


git-svn-id: http://core.svn.wordpress.org/trunk@42172 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2017-11-30 23:11:00 +00:00

92 lines
1.8 KiB
PHP

<?php
/**
* WP_MatchesMapRegex helper class
*
* @package WordPress
* @since 4.7.0
*/
/**
* Helper class to remove the need to use eval to replace $matches[] in query strings.
*
* @since 2.9.0
*/
class WP_MatchesMapRegex {
/**
* store for matches
*
* @var array
*/
private $_matches;
/**
* store for mapping result
*
* @var string
*/
public $output;
/**
* subject to perform mapping on (query string containing $matches[] references
*
* @var string
*/
private $_subject;
/**
* regexp pattern to match $matches[] references
*
* @var string
*/
public $_pattern = '(\$matches\[[1-9]+[0-9]*\])'; // magic number
/**
* constructor
*
* @param string $subject subject if regex
* @param array $matches data to use in map
*/
public function __construct( $subject, $matches ) {
$this->_subject = $subject;
$this->_matches = $matches;
$this->output = $this->_map();
}
/**
* Substitute substring matches in subject.
*
* static helper function to ease use
*
* @static
*
* @param string $subject subject
* @param array $matches data used for substitution
* @return string
*/
public static function apply( $subject, $matches ) {
$oSelf = new WP_MatchesMapRegex( $subject, $matches );
return $oSelf->output;
}
/**
* do the actual mapping
*
* @return string
*/
private function _map() {
$callback = array( $this, 'callback' );
return preg_replace_callback( $this->_pattern, $callback, $this->_subject );
}
/**
* preg_replace_callback hook
*
* @param array $matches preg_replace regexp matches
* @return string
*/
public function callback( $matches ) {
$index = intval( substr( $matches[0], 9, -1 ) );
return ( isset( $this->_matches[ $index ] ) ? urlencode( $this->_matches[ $index ] ) : '' );
}
}