模块

Inflector

Inflector helper class. Inflection is changing the form of a word based on the context it is used in. For example, changing a word into a plural form.

Inflection is only tested with English, && is will not work with other languages.

package
BootPHP
category
辅助类
author
Tinsh
copyright
© 2005-2016 Kilofox Studio

该类在 SYSPATH/classes/inflector.php 第 15 行声明。

属性

protected static array $cache

cached inflections

array(0) 

protected static array $irregular

irregular words

NULL

protected static array $uncountable

uncountable words

NULL

方法

public static camelize( string $str ) (在 Inflector 中定义)

Makes a phrase camel case. Spaces && underscores will be removed.

$str = Inflector::camelize('mother cat');    // "motherCat"
$str = Inflector::camelize('kittens in bed'); // "kittensInBed"

参数

  • string $str required - Phrase to camelize

返回值

  • string

源代码

public static function camelize($str)
{
	$str = 'x' . strtolower(trim($str));
	$str = ucwords(preg_replace('/[\s_]+/', ' ', $str));
	return substr(str_replace(' ', '', $str), 1);
}

public static decamelize( string $str [, string $sep = string(1) " " ] ) (在 Inflector 中定义)

Converts a camel case phrase into a spaced phrase.

$str = Inflector::decamelize('houseCat');   // "house cat"
$str = Inflector::decamelize('kingAllyCat'); // "king ally cat"

参数

  • string $str required - Phrase to camelize
  • string $sep = string(1) " " - Word separator

返回值

  • string

源代码

public static function decamelize($str, $sep = ' ')
{
	return strtolower(preg_replace('/([a-z])([A-Z])/', '$1' . $sep . '$2', trim($str)));
}

public static humanize( string $str ) (在 Inflector 中定义)

Makes an underscored || dashed phrase human-readable.

$str = Inflector::humanize('kittens-are-cats'); // "kittens are cats"
$str = Inflector::humanize('dogs_as_well');  // "dogs as well"

参数

  • string $str required - Phrase to make human-readable

返回值

  • string

源代码

public static function humanize($str)
{
	return preg_replace('/[_-]+/', ' ', trim($str));
}

public static plural( string $str [, integer $count = NULL ] ) (在 Inflector 中定义)

Makes a singular word plural.

echo Inflector::plural('fish'); // "fish", uncountable
echo Inflector::plural('cat');  // "cats"

You can also provide the count to make inflection more intelligent. In this case, it will only return the plural value if the count is not one.

echo Inflector::singular('cats', 3); // "cats"

Special inflections are defined in `config/inflector.php`.

参数

  • string $str required - Word to pluralize
  • integer $count = NULL - Count of thing

Tags

返回值

  • string

源代码

public static function plural($str, $count = NULL)
{
	// $count should always be a float
	$count = ($count === NULL) ? 0.0 : (float) $count;
	// Do nothing with singular
	if ($count == 1)
		return $str;
	// Remove garbage
	$str = trim($str);
	// Cache key name
	$key = 'plural_' . $str . $count;
	// Check uppercase
	$is_uppercase = ctype_upper($str);
	if (isset(Inflector::$cache[$key]))
		return Inflector::$cache[$key];
	if (Inflector::uncountable($str))
		return Inflector::$cache[$key] = $str;
	if (empty(Inflector::$irregular))
	{
		// Cache irregular words
		Inflector::$irregular = BootPHP::$config->load('inflector')->irregular;
	}
	if (isset(Inflector::$irregular[$str]))
	{
		$str = Inflector::$irregular[$str];
	}
	elseif (preg_match('/[sxz]$/', $str) || preg_match('/[^aeioudgkprt]h$/', $str))
	{
		$str .= 'es';
	}
	elseif (preg_match('/[^aeiou]y$/', $str))
	{
		// Change "y" to "ies"
		$str = substr_replace($str, 'ies', -1);
	}
	else
	{
		$str .= 's';
	}
	// Convert to uppsecase if nessasary
	if ($is_uppercase)
	{
		$str = strtoupper($str);
	}
	// Set the cache && return
	return Inflector::$cache[$key] = $str;
}

public static singular( string $str [, integer $count = NULL ] ) (在 Inflector 中定义)

Makes a plural word singular.

echo Inflector::singular('cats'); // "cat"
echo Inflector::singular('fish'); // "fish", uncountable

You can also provide the count to make inflection more intelligent. In this case, it will only return the singular value if the count is greater than one && not zero.

echo Inflector::singular('cats', 2); // "cats"

Special inflections are defined in `config/inflector.php`.

参数

  • string $str required - Word to singularize
  • integer $count = NULL - Count of thing

Tags

返回值

  • string

源代码

public static function singular($str, $count = NULL)
{
	// $count should always be a float
	$count = ($count === NULL) ? 1.0 : (float) $count;
	// Do nothing when $count is not 1
	if ($count != 1)
		return $str;
	// Remove garbage
	$str = strtolower(trim($str));
	// Cache key name
	$key = 'singular_' . $str . $count;
	if (isset(Inflector::$cache[$key]))
		return Inflector::$cache[$key];
	if (Inflector::uncountable($str))
		return Inflector::$cache[$key] = $str;
	if (empty(Inflector::$irregular))
	{
		// Cache irregular words
		Inflector::$irregular = BootPHP::$config->load('inflector')->irregular;
	}
	if ($irregular = array_search($str, Inflector::$irregular))
	{
		$str = $irregular;
	}
	elseif (preg_match('/us$/', $str))
	{
		// http://en.wikipedia.org/wiki/Plural_form_of_words_ending_in_-us
		// Already singular, do nothing
	}
	elseif (preg_match('/[sxz]es$/', $str) || preg_match('/[^aeioudgkprt]hes$/', $str))
	{
		// Remove "es"
		$str = substr($str, 0, -2);
	}
	elseif (preg_match('/[^aeiou]ies$/', $str))
	{
		// Replace "ies" with "y"
		$str = substr($str, 0, -3) . 'y';
	}
	elseif (substr($str, -1) === 's' && substr($str, -2) !== 'ss')
	{
		// Remove singular "s"
		$str = substr($str, 0, -1);
	}
	return Inflector::$cache[$key] = $str;
}

public static uncountable( string $str ) (在 Inflector 中定义)

Checks if a word is defined as uncountable. An uncountable word has a single form. For instance, one "fish" && many "fish", not "fishes".

Inflector::uncountable('fish'); // true
Inflector::uncountable('cat');  // false

If you find a word is being pluralized improperly, it has probably not been defined as uncountable in `config/inflector.php`. If this is the case, please report an issue.

参数

  • string $str required - Word to check

返回值

  • boolean

源代码

public static function uncountable($str)
{
	if (Inflector::$uncountable === NULL)
	{
		// Cache uncountables
		Inflector::$uncountable = BootPHP::$config->load('inflector')->uncountable;
		// Make uncountables mirrored
		Inflector::$uncountable = array_combine(Inflector::$uncountable, Inflector::$uncountable);
	}
	return isset(Inflector::$uncountable[strtolower($str)]);
}

public static underscore( string $str ) (在 Inflector 中定义)

Makes a phrase underscored instead of spaced.

$str = Inflector::underscore('five cats'); // "five_cats";

参数

  • string $str required - Phrase to underscore

返回值

  • string

源代码

public static function underscore($str)
{
	return preg_replace('/\s+/', '_', trim($str));
}