Compare commits

..

5 commits

Author SHA1 Message Date
6d7f8cff6a
chore: bump version 2022-01-23 17:27:44 -06:00
Roy Verrips
a84cdd8917 Remove phpstan from dependancies - want to keep this compatible with php 7.0 as per github build steps 2022-01-23 17:26:15 -06:00
Roy Verrips
7cebbfc06a Refactors to satisfy phpstan level 8 2022-01-23 17:26:15 -06:00
Roy Verrips
6e973db521 Add phpstan with config set to max 2022-01-23 17:26:15 -06:00
Roy Verrips
63a52c853b PHP 8.1: Implicit incompatible float to int conversion is deprecated
In PHP 8.1 floats are not implicitly converted to integers as before. 
The array_slice on line 139 requires an integer as the third parameter (the $count variable) so added line 117 to do the conversion of $count.
2022-01-23 17:26:15 -06:00
3 changed files with 70 additions and 49 deletions

View file

@ -1,34 +1,34 @@
{ {
"name": "joshtronic/php-loremipsum", "name": "joshtronic/php-loremipsum",
"description": "Lorem ipsum generator in PHP without dependencies", "description": "Lorem ipsum generator in PHP without dependencies",
"version": "2.0.0", "version": "2.1.0",
"type": "library", "type": "library",
"keywords": [ "keywords": [
"lorem", "lorem",
"ipsum", "ipsum",
"generator" "generator"
], ],
"homepage": "https://github.com/joshtronic/php-loremipsum", "homepage": "https://github.com/joshtronic/php-loremipsum",
"license": "MIT", "license": "MIT",
"authors": [{ "authors": [{
"name": "Josh Sherman", "name": "Josh Sherman",
"email": "hello@joshtronic.com", "email": "hello@joshtronic.com",
"homepage": "https://joshtronic.com" "homepage": "https://joshtronic.com"
}], }],
"require": { "require": {
"php": ">=5.3" "php": ">=5.3"
}, },
"require-dev": { "require-dev": {
"phpunit/phpunit": "^4.8.36 || ^9.0" "phpunit/phpunit": "^4.8.36 || ^9.0"
}, },
"autoload": { "autoload": {
"psr-4": { "psr-4": {
"joshtronic\\": "src/" "joshtronic\\": "src/"
} }
}, },
"autoload-dev": { "autoload-dev": {
"psr-4": { "psr-4": {
"joshtronic\\Tests\\": "tests/" "joshtronic\\Tests\\": "tests/"
}
} }
} }
}

14
phpstan.neon Normal file
View file

@ -0,0 +1,14 @@
parameters:
paths:
- src
# The level 8 is the highest level
level: max
excludePaths:
- ./*/*/FileToBeExcluded.php
checkMissingIterableValueType: true
#editorUrl: 'vscode://file/%%file%%:%%line%%'

View file

@ -24,7 +24,7 @@ class LoremIpsum
* Whether or not we should be starting the string with "Lorem ipsum..." * Whether or not we should be starting the string with "Lorem ipsum..."
* *
* @access private * @access private
* @var boolean * @var mixed
*/ */
private $first = true; private $first = true;
@ -35,7 +35,7 @@ class LoremIpsum
* a complete list exists and if so, where to get it. * a complete list exists and if so, where to get it.
* *
* @access private * @access private
* @var array * @var array<string>
*/ */
private $words = array( private $words = array(
// Lorem ipsum... // Lorem ipsum...
@ -83,7 +83,7 @@ class LoremIpsum
*/ */
public function word($tags = false) public function word($tags = false)
{ {
return $this->words(1, $tags); return strval($this->words(1, $tags));
} }
/** /**
@ -94,7 +94,7 @@ class LoremIpsum
* @access public * @access public
* @param integer $count how many words to generate * @param integer $count how many words to generate
* @param mixed $tags string or array of HTML tags to wrap output with * @param mixed $tags string or array of HTML tags to wrap output with
* @return array generated lorem ipsum words * @return mixed generated lorem ipsum words
*/ */
public function wordsArray($count = 1, $tags = false) public function wordsArray($count = 1, $tags = false)
{ {
@ -114,6 +114,7 @@ class LoremIpsum
*/ */
public function words($count = 1, $tags = false, $array = false) public function words($count = 1, $tags = false, $array = false)
{ {
$count = (int) $count;
$words = array(); $words = array();
$word_count = 0; $word_count = 0;
@ -151,7 +152,7 @@ class LoremIpsum
*/ */
public function sentence($tags = false) public function sentence($tags = false)
{ {
return $this->sentences(1, $tags); return strval($this->sentences(1, $tags));
} }
/** /**
@ -162,7 +163,7 @@ class LoremIpsum
* @access public * @access public
* @param integer $count how many sentences to generate * @param integer $count how many sentences to generate
* @param mixed $tags string or array of HTML tags to wrap output with * @param mixed $tags string or array of HTML tags to wrap output with
* @return array generated lorem ipsum sentences * @return mixed generated lorem ipsum sentences
*/ */
public function sentencesArray($count = 1, $tags = false) public function sentencesArray($count = 1, $tags = false)
{ {
@ -204,7 +205,7 @@ class LoremIpsum
*/ */
public function paragraph($tags = false) public function paragraph($tags = false)
{ {
return $this->paragraphs(1, $tags); return strval($this->paragraphs(1, $tags));
} }
/** /**
@ -215,15 +216,18 @@ class LoremIpsum
* @access public * @access public
* @param integer $count how many paragraphs to generate * @param integer $count how many paragraphs to generate
* @param mixed $tags string or array of HTML tags to wrap output with * @param mixed $tags string or array of HTML tags to wrap output with
* @return array generated lorem ipsum paragraphs * @return array<string> generated lorem ipsum paragraphs
*/ */
public function paragraphsArray($count = 1, $tags = false) public function paragraphsArray($count = 1, $tags = false)
{ {
// The $array parameter set to true means an array is returned.
// Return type is mixed, we should probably cast to array.
// @phpstan-ignore-next-line
return $this->paragraphs($count, $tags, true); return $this->paragraphs($count, $tags, true);
} }
/** /**
* Paragraphss * Paragraphs
* *
* Generates paragraphs of lorem ipsum. * Generates paragraphs of lorem ipsum.
* *
@ -238,10 +242,13 @@ class LoremIpsum
$paragraphs = array(); $paragraphs = array();
for ($i = 0; $i < $count; $i++) { for ($i = 0; $i < $count; $i++) {
$paragraphs[] = $this->sentences($this->gauss(5.8, 1.93)); $paragraphs[] = strval($this->sentences($this->gauss(5.8, 1.93)));
} }
return $this->output($paragraphs, $tags, $array, "\n\n"); if ($array) {
return $this->output($paragraphs, $tags, $array, "\n\n");
}
return strval($this->output($paragraphs, $tags, false, "\n\n"));
} }
/** /**
@ -255,7 +262,7 @@ class LoremIpsum
* @access private * @access private
* @param double $mean average value * @param double $mean average value
* @param double $std_dev stadnard deviation * @param double $std_dev stadnard deviation
* @return double calculated distribution * @return int calculated distribution
*/ */
private function gauss($mean, $std_dev) private function gauss($mean, $std_dev)
{ {
@ -263,7 +270,7 @@ class LoremIpsum
$y = mt_rand() / mt_getrandmax(); $y = mt_rand() / mt_getrandmax();
$z = sqrt(-2 * log($x)) * cos(2 * pi() * $y); $z = sqrt(-2 * log($x)) * cos(2 * pi() * $y);
return $z * $std_dev + $mean; return intval($z * $std_dev + $mean);
} }
/** /**
@ -273,6 +280,7 @@ class LoremIpsum
* the first time we are generating the text. * the first time we are generating the text.
* *
* @access private * @access private
* @return void
*/ */
private function shuffle() private function shuffle()
{ {
@ -298,18 +306,18 @@ class LoremIpsum
* first word of the sentence. * first word of the sentence.
* *
* @access private * @access private
* @param array $sentences the sentences we would like to punctuate * @param array<string> $sentences the sentences we would like to punctuate
* @return void
*/ */
private function punctuate(&$sentences) private function punctuate(&$sentences)
{ {
foreach ($sentences as $key => $sentence) { foreach ($sentences as $key => $sentence) {
$words = count($sentence); $words = count($sentence);
// Only worry about commas on sentences longer than 4 words // Only worry about commas on sentences longer than 4 words
if ($words > 4) { if ($words > 4) {
$mean = log($words, 6); $mean = log($words, 6);
$std_dev = $mean / 6; $std_dev = $mean / 6;
$commas = round($this->gauss($mean, $std_dev)); $commas = $this->gauss($mean, $std_dev);
for ($i = 1; $i <= $commas; $i++) { for ($i = 1; $i <= $commas; $i++) {
$word = round($i * $words / ($commas + 1)); $word = round($i * $words / ($commas + 1));
@ -333,7 +341,7 @@ class LoremIpsum
* into a string or not. * into a string or not.
* *
* @access private * @access private
* @param array $strings an array of generated strings * @param array<string> $strings an array of generated strings
* @param mixed $tags string or array of HTML tags to wrap output with * @param mixed $tags string or array of HTML tags to wrap output with
* @param boolean $array whether an array or a string should be returned * @param boolean $array whether an array or a string should be returned
* @param string $delimiter the string to use when calling implode() * @param string $delimiter the string to use when calling implode()
@ -372,4 +380,3 @@ class LoremIpsum
return $strings; return $strings;
} }
} }