dep: update phan

This commit is contained in:
2021-10-12 01:36:02 +09:00
parent cf3f40b578
commit 2a386e9c8b
131 changed files with 4268 additions and 2452 deletions
Generated
+7 -7
View File
@@ -1886,16 +1886,16 @@
}, },
{ {
"name": "phan/phan", "name": "phan/phan",
"version": "5.0.0", "version": "5.2.1",
"source": { "source": {
"type": "git", "type": "git",
"url": "https://github.com/phan/phan.git", "url": "https://github.com/phan/phan.git",
"reference": "f36b6b9a2f4143a25f35ce94d712ceb0527e9d90" "reference": "d724bbb8fc3ba89179868bb5220ecdf6a9c1636b"
}, },
"dist": { "dist": {
"type": "zip", "type": "zip",
"url": "https://api.github.com/repos/phan/phan/zipball/f36b6b9a2f4143a25f35ce94d712ceb0527e9d90", "url": "https://api.github.com/repos/phan/phan/zipball/d724bbb8fc3ba89179868bb5220ecdf6a9c1636b",
"reference": "f36b6b9a2f4143a25f35ce94d712ceb0527e9d90", "reference": "d724bbb8fc3ba89179868bb5220ecdf6a9c1636b",
"shasum": "" "shasum": ""
}, },
"require": { "require": {
@@ -1912,7 +1912,7 @@
"symfony/console": "^3.2|^4.0|^5.0", "symfony/console": "^3.2|^4.0|^5.0",
"symfony/polyfill-mbstring": "^1.11.0", "symfony/polyfill-mbstring": "^1.11.0",
"symfony/polyfill-php80": "^1.20.0", "symfony/polyfill-php80": "^1.20.0",
"tysonandre/var_representation_polyfill": "^0.0.2" "tysonandre/var_representation_polyfill": "^0.0.2|^0.1.0"
}, },
"require-dev": { "require-dev": {
"phpunit/phpunit": "^8.5.0" "phpunit/phpunit": "^8.5.0"
@@ -1959,9 +1959,9 @@
], ],
"support": { "support": {
"issues": "https://github.com/phan/phan/issues", "issues": "https://github.com/phan/phan/issues",
"source": "https://github.com/phan/phan/tree/5.0.0" "source": "https://github.com/phan/phan/tree/5.2.1"
}, },
"time": "2021-08-01T18:17:28+00:00" "time": "2021-09-15T00:08:40+00:00"
}, },
{ {
"name": "php-extended/php-system", "name": "php-extended/php-system",
+5 -5
View File
@@ -29,7 +29,7 @@ private static $installed = array (
'aliases' => 'aliases' =>
array ( array (
), ),
'reference' => '40a20a55d3aa08f0ab58a50b0572b17dce33de80', 'reference' => 'cf3f40b5787b2a1aed9255775143108ef5b1f278',
'name' => 'sammo-hid/sammo', 'name' => 'sammo-hid/sammo',
), ),
'versions' => 'versions' =>
@@ -315,12 +315,12 @@ private static $installed = array (
), ),
'phan/phan' => 'phan/phan' =>
array ( array (
'pretty_version' => '5.0.0', 'pretty_version' => '5.2.1',
'version' => '5.0.0.0', 'version' => '5.2.1.0',
'aliases' => 'aliases' =>
array ( array (
), ),
'reference' => 'f36b6b9a2f4143a25f35ce94d712ceb0527e9d90', 'reference' => 'd724bbb8fc3ba89179868bb5220ecdf6a9c1636b',
), ),
'php-extended/php-system' => 'php-extended/php-system' =>
array ( array (
@@ -450,7 +450,7 @@ private static $installed = array (
'aliases' => 'aliases' =>
array ( array (
), ),
'reference' => '40a20a55d3aa08f0ab58a50b0572b17dce33de80', 'reference' => 'cf3f40b5787b2a1aed9255775143108ef5b1f278',
), ),
'scssphp/scssphp' => 'scssphp/scssphp' =>
array ( array (
+1 -1
View File
@@ -28,7 +28,7 @@ return array(
'f598d06aa772fa33d905e87be6398fb1' => $vendorDir . '/symfony/polyfill-intl-idn/bootstrap.php', 'f598d06aa772fa33d905e87be6398fb1' => $vendorDir . '/symfony/polyfill-intl-idn/bootstrap.php',
'6714be961f4a45ae8b9a99d5d55c5d07' => $vendorDir . '/tysonandre/var_representation_polyfill/src/var_representation.php', '6714be961f4a45ae8b9a99d5d55c5d07' => $vendorDir . '/tysonandre/var_representation_polyfill/src/var_representation.php',
'37a3dc5111fe8f707ab4c132ef1dbc62' => $vendorDir . '/guzzlehttp/guzzle/src/functions_include.php', '37a3dc5111fe8f707ab4c132ef1dbc62' => $vendorDir . '/guzzlehttp/guzzle/src/functions_include.php',
'5b154887902198b16314243c6e0e3e19' => $vendorDir . '/pguardiario/phpuri/phpuri.php',
'ef65a1626449d89d0811cf9befce46f0' => $vendorDir . '/illuminate/events/functions.php', 'ef65a1626449d89d0811cf9befce46f0' => $vendorDir . '/illuminate/events/functions.php',
'5b154887902198b16314243c6e0e3e19' => $vendorDir . '/pguardiario/phpuri/phpuri.php',
'870dc64919afa8b0f700701bb2c6a783' => $baseDir . '/f_config/config.php', '870dc64919afa8b0f700701bb2c6a783' => $baseDir . '/f_config/config.php',
); );
+1 -1
View File
@@ -29,8 +29,8 @@ class ComposerStaticInit67b09c83b85c3bc0027caefe5bba171a
'f598d06aa772fa33d905e87be6398fb1' => __DIR__ . '/..' . '/symfony/polyfill-intl-idn/bootstrap.php', 'f598d06aa772fa33d905e87be6398fb1' => __DIR__ . '/..' . '/symfony/polyfill-intl-idn/bootstrap.php',
'6714be961f4a45ae8b9a99d5d55c5d07' => __DIR__ . '/..' . '/tysonandre/var_representation_polyfill/src/var_representation.php', '6714be961f4a45ae8b9a99d5d55c5d07' => __DIR__ . '/..' . '/tysonandre/var_representation_polyfill/src/var_representation.php',
'37a3dc5111fe8f707ab4c132ef1dbc62' => __DIR__ . '/..' . '/guzzlehttp/guzzle/src/functions_include.php', '37a3dc5111fe8f707ab4c132ef1dbc62' => __DIR__ . '/..' . '/guzzlehttp/guzzle/src/functions_include.php',
'5b154887902198b16314243c6e0e3e19' => __DIR__ . '/..' . '/pguardiario/phpuri/phpuri.php',
'ef65a1626449d89d0811cf9befce46f0' => __DIR__ . '/..' . '/illuminate/events/functions.php', 'ef65a1626449d89d0811cf9befce46f0' => __DIR__ . '/..' . '/illuminate/events/functions.php',
'5b154887902198b16314243c6e0e3e19' => __DIR__ . '/..' . '/pguardiario/phpuri/phpuri.php',
'870dc64919afa8b0f700701bb2c6a783' => __DIR__ . '/../..' . '/f_config/config.php', '870dc64919afa8b0f700701bb2c6a783' => __DIR__ . '/../..' . '/f_config/config.php',
); );
+8 -8
View File
@@ -1948,17 +1948,17 @@
}, },
{ {
"name": "phan/phan", "name": "phan/phan",
"version": "5.0.0", "version": "5.2.1",
"version_normalized": "5.0.0.0", "version_normalized": "5.2.1.0",
"source": { "source": {
"type": "git", "type": "git",
"url": "https://github.com/phan/phan.git", "url": "https://github.com/phan/phan.git",
"reference": "f36b6b9a2f4143a25f35ce94d712ceb0527e9d90" "reference": "d724bbb8fc3ba89179868bb5220ecdf6a9c1636b"
}, },
"dist": { "dist": {
"type": "zip", "type": "zip",
"url": "https://api.github.com/repos/phan/phan/zipball/f36b6b9a2f4143a25f35ce94d712ceb0527e9d90", "url": "https://api.github.com/repos/phan/phan/zipball/d724bbb8fc3ba89179868bb5220ecdf6a9c1636b",
"reference": "f36b6b9a2f4143a25f35ce94d712ceb0527e9d90", "reference": "d724bbb8fc3ba89179868bb5220ecdf6a9c1636b",
"shasum": "" "shasum": ""
}, },
"require": { "require": {
@@ -1975,7 +1975,7 @@
"symfony/console": "^3.2|^4.0|^5.0", "symfony/console": "^3.2|^4.0|^5.0",
"symfony/polyfill-mbstring": "^1.11.0", "symfony/polyfill-mbstring": "^1.11.0",
"symfony/polyfill-php80": "^1.20.0", "symfony/polyfill-php80": "^1.20.0",
"tysonandre/var_representation_polyfill": "^0.0.2" "tysonandre/var_representation_polyfill": "^0.0.2|^0.1.0"
}, },
"require-dev": { "require-dev": {
"phpunit/phpunit": "^8.5.0" "phpunit/phpunit": "^8.5.0"
@@ -1988,7 +1988,7 @@
"ext-tokenizer": "Needed for fallback/polyfill parser support and file/line-based suppressions.", "ext-tokenizer": "Needed for fallback/polyfill parser support and file/line-based suppressions.",
"ext-var_representation": "Suggested for converting values to strings in issue messages" "ext-var_representation": "Suggested for converting values to strings in issue messages"
}, },
"time": "2021-08-01T18:17:28+00:00", "time": "2021-09-15T00:08:40+00:00",
"bin": [ "bin": [
"phan", "phan",
"phan_client", "phan_client",
@@ -2024,7 +2024,7 @@
], ],
"support": { "support": {
"issues": "https://github.com/phan/phan/issues", "issues": "https://github.com/phan/phan/issues",
"source": "https://github.com/phan/phan/tree/5.0.0" "source": "https://github.com/phan/phan/tree/5.2.1"
}, },
"install-path": "../phan/phan" "install-path": "../phan/phan"
}, },
+5 -5
View File
@@ -6,7 +6,7 @@
'aliases' => 'aliases' =>
array ( array (
), ),
'reference' => '40a20a55d3aa08f0ab58a50b0572b17dce33de80', 'reference' => 'cf3f40b5787b2a1aed9255775143108ef5b1f278',
'name' => 'sammo-hid/sammo', 'name' => 'sammo-hid/sammo',
), ),
'versions' => 'versions' =>
@@ -292,12 +292,12 @@
), ),
'phan/phan' => 'phan/phan' =>
array ( array (
'pretty_version' => '5.0.0', 'pretty_version' => '5.2.1',
'version' => '5.0.0.0', 'version' => '5.2.1.0',
'aliases' => 'aliases' =>
array ( array (
), ),
'reference' => 'f36b6b9a2f4143a25f35ce94d712ceb0527e9d90', 'reference' => 'd724bbb8fc3ba89179868bb5220ecdf6a9c1636b',
), ),
'php-extended/php-system' => 'php-extended/php-system' =>
array ( array (
@@ -427,7 +427,7 @@
'aliases' => 'aliases' =>
array ( array (
), ),
'reference' => '40a20a55d3aa08f0ab58a50b0572b17dce33de80', 'reference' => 'cf3f40b5787b2a1aed9255775143108ef5b1f278',
), ),
'scssphp/scssphp' => 'scssphp/scssphp' =>
array ( array (
+28
View File
@@ -0,0 +1,28 @@
.git/
internal/PHP_CodeSniffer
tests/docker
tests/run_all_tests_dockerized
.git
vendor
.phan/data
composer.phar
\#*#
build
report
samples
all_output.*
.vscode/
*.joblog
*.swo
*.swp
*.zip
tags
.phan/config.local.php
nohup.out
*.md.new
.idea/
src_copy
out/
phpspy.*
.phpunit.result.cache
errors.txt
Vendored Regular → Executable
View File
Vendored Regular → Executable
View File
+5
View File
@@ -393,12 +393,15 @@ return [
'tool/phan_repl_helpers.php', 'tool/phan_repl_helpers.php',
'internal/dump_fallback_ast.php', 'internal/dump_fallback_ast.php',
'internal/dump_html_styles.php', 'internal/dump_html_styles.php',
'internal/emit_signature_map_for_php_version.php',
'internal/extract_arg_info.php', 'internal/extract_arg_info.php',
'internal/flatten_signature_map.php',
'internal/internalsignatures.php', 'internal/internalsignatures.php',
'internal/line_deleter.php', 'internal/line_deleter.php',
'internal/package.php', 'internal/package.php',
'internal/reflection_completeness_check.php', 'internal/reflection_completeness_check.php',
'internal/sanitycheck.php', 'internal/sanitycheck.php',
'internal/sort_signature_map.php',
'vendor/phpdocumentor/type-resolver/src/Types/ContextFactory.php', 'vendor/phpdocumentor/type-resolver/src/Types/ContextFactory.php',
'vendor/phpdocumentor/reflection-docblock/src/DocBlockFactory.php', 'vendor/phpdocumentor/reflection-docblock/src/DocBlockFactory.php',
'vendor/phpdocumentor/reflection-docblock/src/DocBlock.php', 'vendor/phpdocumentor/reflection-docblock/src/DocBlock.php',
@@ -651,6 +654,8 @@ return [
'RemoveDebugStatementPlugin', 'RemoveDebugStatementPlugin',
'UnsafeCodePlugin', 'UnsafeCodePlugin',
'DeprecateAliasPlugin', 'DeprecateAliasPlugin',
// Suggest '@return never'
'.phan/plugins/AddNeverReturnTypePlugin.php',
// Still have false positives to suppress // Still have false positives to suppress
// '.phan/plugins/StaticVariableMisusePlugin.php', // '.phan/plugins/StaticVariableMisusePlugin.php',
@@ -0,0 +1,147 @@
<?php
declare(strict_types=1);
use ast\Node;
use Phan\Analysis\BlockExitStatusChecker;
use Phan\CodeBase;
use Phan\Language\Element\Func;
use Phan\Language\Element\Method;
use Phan\Language\Type\NeverType;
use Phan\PluginV3;
use Phan\PluginV3\AnalyzeFunctionCapability;
use Phan\PluginV3\AnalyzeMethodCapability;
/**
* This plugin checks if a function or method will not return (and has no overrides).
* If the function doesn't have a return type of never.
* then this plugin will emit an issue.
*
* It hooks into two events:
*
* - analyzeMethod
* Once all methods are parsed, this method will be called
* on every method in the code base
*
* - analyzeFunction
* Once all functions have been parsed, this method will
* be called on every function in the code base.
*
* A plugin file must
*
* - Contain a class that inherits from \Phan\PluginV3
*
* - End by returning an instance of that class.
*
* It is assumed without being checked that plugins aren't
* mangling state within the passed code base or context.
*
* Note: When adding new plugins,
* add them to the corresponding section of README.md
*/
final class NeverReturnPlugin extends PluginV3 implements
AnalyzeFunctionCapability,
AnalyzeMethodCapability
{
/**
* @param CodeBase $code_base
* The code base in which the method exists
*
* @param Method $method
* A method being analyzed
*
* @override
*/
public function analyzeMethod(
CodeBase $code_base,
Method $method
): void {
$stmts_list = self::getStatementListToAnalyze($method);
if ($stmts_list === null) {
// check for abstract methods, generators, etc.
return;
}
if ($method->getFQSEN() !== $method->getDefiningFQSEN()) {
// Check if this was inherited by a descendant class.
return;
}
if ($method->getUnionType()->hasType(NeverType::instance(false))) {
return;
}
if ($method->isOverriddenByAnother()) {
return;
}
// This modifies the nodes in place, check this last
if (!BlockExitStatusChecker::willUnconditionallyNeverReturn($stmts_list)) {
return;
}
self::emitIssue(
$code_base,
$method->getContext(),
'PhanPluginNeverReturnMethod',
"Method {METHOD} never returns and has a return type of {TYPE}, but phpdoc type {TYPE} could be used instead",
[$method->getRepresentationForIssue(), $method->getUnionType(), 'never']
);
}
/**
* @param CodeBase $code_base
* The code base in which the function exists
*
* @param Func $function
* A function or closure being analyzed
*
* @override
*/
public function analyzeFunction(
CodeBase $code_base,
Func $function
): void {
$stmts_list = self::getStatementListToAnalyze($function);
if ($stmts_list === null) {
// check for abstract methods, generators, etc.
return;
}
if ($function->getUnionType()->hasType(NeverType::instance(false))) {
return;
}
// This modifies the nodes in place, check this last
if (!BlockExitStatusChecker::willUnconditionallyNeverReturn($stmts_list)) {
return;
}
self::emitIssue(
$code_base,
$function->getContext(),
'PhanPluginNeverReturnFunction',
"Function {FUNCTION} never returns and has a return type of {TYPE}, but phpdoc type {TYPE} could be used instead",
[$function->getRepresentationForIssue(), $function->getUnionType(), 'never']
);
}
/**
* @param Func|Method $func
* @return ?Node - returns null if there's no statement list to analyze
*/
private static function getStatementListToAnalyze($func): ?Node
{
if (!$func->hasNode()) {
return null;
} elseif ($func->hasYield()) {
// generators always return Generator.
return null;
}
$node = $func->getNode();
if (!$node) {
return null;
}
return $node->children['stmts'];
}
}
// Every plugin needs to return an instance of itself at the
// end of the file in which it's defined.
return new NeverReturnPlugin();
+1 -1
View File
@@ -116,7 +116,7 @@ class AvoidableGetterVisitor extends PluginAwarePostAnalysisVisitor
$this->emitPluginIssue( $this->emitPluginIssue(
$this->code_base, $this->code_base,
(clone($this->context))->withLineNumberStart($node->lineno), (clone $this->context)->withLineNumberStart($node->lineno),
$issue_name, $issue_name,
"Can replace {METHOD} with {PROPERTY}", "Can replace {METHOD} with {PROPERTY}",
[ASTReverter::toShortString($node), '$this->' . $property_name] [ASTReverter::toShortString($node), '$this->' . $property_name]
+5 -5
View File
@@ -95,7 +95,7 @@ class DuplicateArrayKeyVisitor extends PluginAwarePostAnalysisVisitor
$normalized_case_cond = is_object($case_cond) ? ASTReverter::toShortString($case_cond) : self::normalizeSwitchKey($case_cond); $normalized_case_cond = is_object($case_cond) ? ASTReverter::toShortString($case_cond) : self::normalizeSwitchKey($case_cond);
$this->emitPluginIssue( $this->emitPluginIssue(
$this->code_base, $this->code_base,
clone($this->context)->withLineNumberStart($case_node->lineno), (clone $this->context)->withLineNumberStart($case_node->lineno),
'PhanPluginDuplicateSwitchCase', 'PhanPluginDuplicateSwitchCase',
"Duplicate/Equivalent switch case({STRING_LITERAL}) detected in switch statement - the later entry will be ignored in favor of case {CODE} at line {LINE}.", "Duplicate/Equivalent switch case({STRING_LITERAL}) detected in switch statement - the later entry will be ignored in favor of case {CODE} at line {LINE}.",
[$normalized_case_cond, ASTReverter::toShortString($case_constant_set[$cond_key]->children['cond']), $case_constant_set[$cond_key]->lineno], [$normalized_case_cond, ASTReverter::toShortString($case_constant_set[$cond_key]->children['cond']), $case_constant_set[$cond_key]->lineno],
@@ -171,7 +171,7 @@ class DuplicateArrayKeyVisitor extends PluginAwarePostAnalysisVisitor
if ($old_index !== null) { if ($old_index !== null) {
$this->emitPluginIssue( $this->emitPluginIssue(
$this->code_base, $this->code_base,
(clone($this->context))->withLineNumberStart($children[$i]->lineno), (clone $this->context)->withLineNumberStart($children[$i]->lineno),
'PhanPluginDuplicateSwitchCaseLooseEquality', 'PhanPluginDuplicateSwitchCaseLooseEquality',
"Switch case({STRING_LITERAL}) is loosely equivalent (==) to an earlier case ({STRING_LITERAL}) in switch statement - the earlier entry may be chosen instead.", "Switch case({STRING_LITERAL}) is loosely equivalent (==) to an earlier case ({STRING_LITERAL}) in switch statement - the earlier entry may be chosen instead.",
[self::normalizeSwitchKey($values_to_check[$i]), self::normalizeSwitchKey($values_to_check[$old_index])], [self::normalizeSwitchKey($values_to_check[$i]), self::normalizeSwitchKey($values_to_check[$old_index])],
@@ -227,7 +227,7 @@ class DuplicateArrayKeyVisitor extends PluginAwarePostAnalysisVisitor
$normalized_arm_expr_cond = ASTReverter::toShortString($arm_expr_cond); $normalized_arm_expr_cond = ASTReverter::toShortString($arm_expr_cond);
$this->emitPluginIssue( $this->emitPluginIssue(
$this->code_base, $this->code_base,
clone($this->context)->withLineNumberStart($lineno), (clone $this->context)->withLineNumberStart($lineno),
'PhanPluginDuplicateMatchArmExpression', 'PhanPluginDuplicateMatchArmExpression',
"Duplicate match arm expression({STRING_LITERAL}) detected in match expression - the later entry will be ignored in favor of expression {CODE} at line {LINE}.", "Duplicate match arm expression({STRING_LITERAL}) detected in match expression - the later entry will be ignored in favor of expression {CODE} at line {LINE}.",
[$normalized_arm_expr_cond, ASTReverter::toShortString($arm_expr_constant_set[$cond_key][0]), $arm_expr_constant_set[$cond_key][1]], [$normalized_arm_expr_cond, ASTReverter::toShortString($arm_expr_constant_set[$cond_key][0]), $arm_expr_constant_set[$cond_key][1]],
@@ -302,7 +302,7 @@ class DuplicateArrayKeyVisitor extends PluginAwarePostAnalysisVisitor
if (is_string($key) && strncmp($key, self::HASH_PREFIX, strlen(self::HASH_PREFIX)) === 0) { if (is_string($key) && strncmp($key, self::HASH_PREFIX, strlen(self::HASH_PREFIX)) === 0) {
$this->emitPluginIssue( $this->emitPluginIssue(
$this->code_base, $this->code_base,
clone($this->context)->withLineNumberStart($entry->lineno), (clone $this->context)->withLineNumberStart($entry->lineno),
'PhanPluginDuplicateArrayKeyExpression', 'PhanPluginDuplicateArrayKeyExpression',
"Duplicate dynamic array key expression ({CODE}) detected in array - the earlier entry at line {LINE} will be ignored if the expression had the same value.", "Duplicate dynamic array key expression ({CODE}) detected in array - the earlier entry at line {LINE} will be ignored if the expression had the same value.",
[ASTReverter::toShortString($entry->children['key']), $old_entry->lineno], [ASTReverter::toShortString($entry->children['key']), $old_entry->lineno],
@@ -315,7 +315,7 @@ class DuplicateArrayKeyVisitor extends PluginAwarePostAnalysisVisitor
$normalized_key = self::normalizeKey($key); $normalized_key = self::normalizeKey($key);
$this->emitPluginIssue( $this->emitPluginIssue(
$this->code_base, $this->code_base,
clone($this->context)->withLineNumberStart($entry->lineno), (clone $this->context)->withLineNumberStart($entry->lineno),
'PhanPluginDuplicateArrayKey', 'PhanPluginDuplicateArrayKey',
"Duplicate/Equivalent array key value({STRING_LITERAL}) detected in array - the earlier entry {CODE} at line {LINE} will be ignored.", "Duplicate/Equivalent array key value({STRING_LITERAL}) detected in array - the earlier entry {CODE} at line {LINE} will be ignored.",
[$normalized_key, ASTReverter::toShortString($old_entry->children['key']), $old_entry->lineno], [$normalized_key, ASTReverter::toShortString($old_entry->children['key']), $old_entry->lineno],
@@ -351,7 +351,7 @@ class RedundantNodePostAnalysisVisitor extends PluginAwarePostAnalysisVisitor
if ($hash === $prev_hash) { if ($hash === $prev_hash) {
$this->emitPluginIssue( $this->emitPluginIssue(
$this->code_base, $this->code_base,
(clone($this->context))->withLineNumberStart($child->lineno ?? $node->lineno), (clone $this->context)->withLineNumberStart($child->lineno ?? $node->lineno),
'PhanPluginDuplicateAdjacentStatement', 'PhanPluginDuplicateAdjacentStatement',
"Statement {CODE} is a duplicate of the statement on the above line. Suppress this issue instance if there's a good reason for this.", "Statement {CODE} is a duplicate of the statement on the above line. Suppress this issue instance if there's a good reason for this.",
[ASTReverter::toShortString($child)] [ASTReverter::toShortString($child)]
@@ -476,7 +476,7 @@ class RedundantNodePreAnalysisVisitor extends PluginAwarePreAnalysisVisitor
if (isset($condition_set[$cond_hash])) { if (isset($condition_set[$cond_hash])) {
$this->emitPluginIssue( $this->emitPluginIssue(
$this->code_base, $this->code_base,
clone($this->context)->withLineNumberStart($cond->lineno ?? $children[$i]->lineno), (clone $this->context)->withLineNumberStart($cond->lineno ?? $children[$i]->lineno),
'PhanPluginDuplicateIfCondition', 'PhanPluginDuplicateIfCondition',
'Saw the same condition {CODE} in an earlier if/elseif statement', 'Saw the same condition {CODE} in an earlier if/elseif statement',
[ASTReverter::toShortString($cond)] [ASTReverter::toShortString($cond)]
@@ -490,7 +490,7 @@ class RedundantNodePreAnalysisVisitor extends PluginAwarePreAnalysisVisitor
if (($stmts->children ?? null) && ASTHasher::hash($stmts) === ASTHasher::hash($children[$N - 2]->children['stmts'])) { if (($stmts->children ?? null) && ASTHasher::hash($stmts) === ASTHasher::hash($children[$N - 2]->children['stmts'])) {
$this->emitPluginIssue( $this->emitPluginIssue(
$this->code_base, $this->code_base,
clone($this->context)->withLineNumberStart($children[$N - 1]->lineno), (clone $this->context)->withLineNumberStart($children[$N - 1]->lineno),
'PhanPluginDuplicateIfStatements', 'PhanPluginDuplicateIfStatements',
'The statements of the else duplicate the statements of the previous if/elseif statement with condition {CODE}', 'The statements of the else duplicate the statements of the previous if/elseif statement with condition {CODE}',
[ASTReverter::toShortString($children[$N - 2]->children['cond'])] [ASTReverter::toShortString($children[$N - 2]->children['cond'])]
@@ -522,7 +522,7 @@ class RedundantNodePreAnalysisVisitor extends PluginAwarePreAnalysisVisitor
if ($prev_hash === $cur_hash) { if ($prev_hash === $cur_hash) {
$this->emitPluginIssue( $this->emitPluginIssue(
$this->code_base, $this->code_base,
clone($this->context)->withLineNumberStart($catches[$i]->lineno), (clone $this->context)->withLineNumberStart($catches[$i]->lineno),
'PhanPluginDuplicateCatchStatementBody', 'PhanPluginDuplicateCatchStatementBody',
'The implementation of catch({CODE}) and catch({CODE}) are identical, and can be combined if the application only needs to supports php 7.1 and newer', 'The implementation of catch({CODE}) and catch({CODE}) are identical, and can be combined if the application only needs to supports php 7.1 and newer',
[ [
@@ -111,7 +111,7 @@ final class EmptyStatementListVisitor extends PluginAwarePostAnalysisVisitor
$this->emitPluginIssue( $this->emitPluginIssue(
$this->code_base, $this->code_base,
(clone($this->context))->withLineNumberStart($last_if_elem->children['stmts']->lineno ?? $last_if_elem->lineno), (clone $this->context)->withLineNumberStart($last_if_elem->children['stmts']->lineno ?? $last_if_elem->lineno),
'PhanPluginEmptyStatementIf', 'PhanPluginEmptyStatementIf',
'Empty statement list statement detected for the last if/elseif statement', 'Empty statement list statement detected for the last if/elseif statement',
[] []
@@ -188,7 +188,7 @@ final class EmptyStatementListVisitor extends PluginAwarePostAnalysisVisitor
} }
$this->emitPluginIssue( $this->emitPluginIssue(
$this->code_base, $this->code_base,
clone($this->context)->withLineNumberStart($stmts_node->lineno ?? $node->lineno), (clone $this->context)->withLineNumberStart($stmts_node->lineno ?? $node->lineno),
'PhanPluginEmptyStatementForLoop', 'PhanPluginEmptyStatementForLoop',
'Empty statement list statement detected for the for loop', 'Empty statement list statement detected for the for loop',
[] []
@@ -216,7 +216,7 @@ final class EmptyStatementListVisitor extends PluginAwarePostAnalysisVisitor
} }
$this->emitPluginIssue( $this->emitPluginIssue(
$this->code_base, $this->code_base,
clone($this->context)->withLineNumberStart($stmts_node->lineno ?? $node->lineno), (clone $this->context)->withLineNumberStart($stmts_node->lineno ?? $node->lineno),
'PhanPluginEmptyStatementWhileLoop', 'PhanPluginEmptyStatementWhileLoop',
'Empty statement list statement detected for the while loop', 'Empty statement list statement detected for the while loop',
[] []
@@ -244,7 +244,7 @@ final class EmptyStatementListVisitor extends PluginAwarePostAnalysisVisitor
} }
$this->emitPluginIssue( $this->emitPluginIssue(
$this->code_base, $this->code_base,
clone($this->context)->withLineNumberStart($stmts_node->lineno), (clone $this->context)->withLineNumberStart($stmts_node->lineno),
'PhanPluginEmptyStatementDoWhileLoop', 'PhanPluginEmptyStatementDoWhileLoop',
'Empty statement list statement detected for the do-while loop', 'Empty statement list statement detected for the do-while loop',
[] []
@@ -273,7 +273,7 @@ final class EmptyStatementListVisitor extends PluginAwarePostAnalysisVisitor
} }
$this->emitPluginIssue( $this->emitPluginIssue(
$this->code_base, $this->code_base,
clone($this->context)->withLineNumberStart($stmts_node->lineno), (clone $this->context)->withLineNumberStart($stmts_node->lineno),
'PhanPluginEmptyStatementForeachLoop', 'PhanPluginEmptyStatementForeachLoop',
'Empty statement list statement detected for the foreach loop', 'Empty statement list statement detected for the foreach loop',
[] []
@@ -292,7 +292,7 @@ final class EmptyStatementListVisitor extends PluginAwarePostAnalysisVisitor
if (!$this->hasTODOComment($try_node->lineno, $node, $node->children['catches']->children[0]->lineno ?? $finally_node->lineno ?? null)) { if (!$this->hasTODOComment($try_node->lineno, $node, $node->children['catches']->children[0]->lineno ?? $finally_node->lineno ?? null)) {
$this->emitPluginIssue( $this->emitPluginIssue(
$this->code_base, $this->code_base,
clone($this->context)->withLineNumberStart($try_node->lineno), (clone $this->context)->withLineNumberStart($try_node->lineno),
'PhanPluginEmptyStatementTryBody', 'PhanPluginEmptyStatementTryBody',
'Empty statement list statement detected for the try statement\'s body', 'Empty statement list statement detected for the try statement\'s body',
[] []
@@ -303,7 +303,7 @@ final class EmptyStatementListVisitor extends PluginAwarePostAnalysisVisitor
if (!$this->hasTODOComment($finally_node->lineno, $node)) { if (!$this->hasTODOComment($finally_node->lineno, $node)) {
$this->emitPluginIssue( $this->emitPluginIssue(
$this->code_base, $this->code_base,
clone($this->context)->withLineNumberStart($finally_node->lineno), (clone $this->context)->withLineNumberStart($finally_node->lineno),
'PhanPluginEmptyStatementTryFinally', 'PhanPluginEmptyStatementTryFinally',
'Empty statement list statement detected for the try\'s finally body', 'Empty statement list statement detected for the try\'s finally body',
[] []
@@ -348,7 +348,7 @@ final class EmptyStatementListVisitor extends PluginAwarePostAnalysisVisitor
} }
$this->emitPluginIssue( $this->emitPluginIssue(
$this->code_base, $this->code_base,
clone($this->context)->withLineNumberStart($node->lineno), (clone $this->context)->withLineNumberStart($node->lineno),
'PhanPluginEmptyStatementSwitch', 'PhanPluginEmptyStatementSwitch',
'No side effects seen for any cases of this switch statement', 'No side effects seen for any cases of this switch statement',
[] []
+1 -1
View File
@@ -126,7 +126,7 @@ class InlineHTMLPlugin extends PluginV3 implements
} }
$this->emitIssue( $this->emitIssue(
$code_base, $code_base,
clone($context)->withLineNumberStart($token[2]), (clone $context)->withLineNumberStart($token[2]),
$issue, $issue,
$message, $message,
[StringUtil::jsonEncode(self::truncate($token[1]))] [StringUtil::jsonEncode(self::truncate($token[1]))]
@@ -144,7 +144,7 @@ class InvokePHPNativeSyntaxCheckPlugin extends PluginV3 implements
self::emitIssue( self::emitIssue(
$code_base, $code_base,
clone($context)->withLineNumberStart($lineno), (clone $context)->withLineNumberStart($lineno),
'PhanNativePHPSyntaxCheckPlugin', 'PhanNativePHPSyntaxCheckPlugin',
'Saw error or notice for {FILE} --syntax-check: {DETAILS}', 'Saw error or notice for {FILE} --syntax-check: {DETAILS}',
[ [
@@ -182,6 +182,9 @@ class InvokeExecutionPromise
/** @var string the raw bytes from stdout with serialized data */ /** @var string the raw bytes from stdout with serialized data */
private $raw_stdout = ''; private $raw_stdout = '';
/** @var string */
private $fallback_error = '';
/** @var Context has the file name being analyzed */ /** @var Context has the file name being analyzed */
private $context; private $context;
@@ -190,7 +193,7 @@ class InvokeExecutionPromise
public function __construct(string $binary, string $file_contents, Context $context) public function __construct(string $binary, string $file_contents, Context $context)
{ {
$this->context = clone($context); $this->context = clone $context;
$new_file_contents = Parser::removeShebang($file_contents); $new_file_contents = Parser::removeShebang($file_contents);
// TODO: Use symfony process // TODO: Use symfony process
// Note: We might have invalid utf-8, ensure that the streams are opened in binary mode. // Note: We might have invalid utf-8, ensure that the streams are opened in binary mode.
@@ -252,7 +255,10 @@ class InvokeExecutionPromise
} }
$this->process = $process; $this->process = $process;
self::streamPutContents($pipes[0], $new_file_contents); error_clear_last();
if (!self::streamPutContents($pipes[0], $new_file_contents)) {
$this->fallback_error = \error_get_last()['message'] ?? '';
}
} }
$this->pipes = $pipes; $this->pipes = $pipes;
@@ -290,17 +296,18 @@ class InvokeExecutionPromise
/** /**
* @param resource $stream stream to write $file_contents to before fclose() * @param resource $stream stream to write $file_contents to before fclose()
* @param string $file_contents * @param string $file_contents
* @return void
* See https://bugs.php.net/bug.php?id=39598 * See https://bugs.php.net/bug.php?id=39598
*/ */
private static function streamPutContents($stream, string $file_contents): void private static function streamPutContents($stream, string $file_contents): bool
{ {
try { try {
while (strlen($file_contents) > 0) { while (strlen($file_contents) > 0) {
$bytes_written = fwrite($stream, $file_contents); $bytes_written = with_disabled_phan_error_handler(/** @return int|false */ static function () use ($stream, $file_contents) {
return @fwrite($stream, $file_contents);
});
if ($bytes_written === false) { if ($bytes_written === false) {
error_log('failed to write in ' . __METHOD__); CLI::printWarningToStderr('failed to write in ' . __METHOD__);
return; return false;
} }
if ($bytes_written === 0) { if ($bytes_written === 0) {
$read_streams = []; $read_streams = [];
@@ -316,8 +323,8 @@ class InvokeExecutionPromise
// $stream is ready to be written to? // $stream is ready to be written to?
$bytes_written = fwrite($stream, $file_contents); $bytes_written = fwrite($stream, $file_contents);
if (!$bytes_written) { if (!$bytes_written) {
error_log('failed to write in ' . __METHOD__ . ' but the stream should be ready'); CLI::printToStderr('failed to write in ' . __METHOD__ . ' but the stream should be ready');
return; return false;
} }
} }
if ($bytes_written > 0) { if ($bytes_written > 0) {
@@ -327,6 +334,7 @@ class InvokeExecutionPromise
} finally { } finally {
fclose($stream); fclose($stream);
} }
return true;
} }
/** /**
@@ -390,6 +398,14 @@ class InvokeExecutionPromise
if (!$this->done) { if (!$this->done) {
throw new RangeException("Called " . __METHOD__ . " too early"); throw new RangeException("Called " . __METHOD__ . " too early");
} }
if ($this->error === '') {
// There was an error running the process, but no output to stdout.
$result = "No output was detected. Is " . var_representation($this->binary) . " a relative or absolute path to an executable PHP binary?";
if ($this->fallback_error !== '') {
$result .= ' Error sending file contents to syntax check: ' . $this->fallback_error;
}
return $result;
}
return $this->error; return $this->error;
} }
@@ -409,6 +425,9 @@ class InvokeExecutionPromise
return $this->binary; return $this->binary;
} }
/**
* @return never
*/
public function __wakeup() public function __wakeup()
{ {
$this->tmp_path = null; $this->tmp_path = null;
@@ -111,6 +111,9 @@ class MoreSpecificElementTypePlugin extends PluginV3 implements
if ($declared_return_type->isStrictSubtypeOf($code_base, $actual_type)) { if ($declared_return_type->isStrictSubtypeOf($code_base, $actual_type)) {
return false; return false;
} }
if (!$actual_type->isStrictSubtypeOf($code_base, $declared_return_type)) {
return false;
}
if (!$actual_type->canCastToUnionType($declared_return_type, $code_base)) { if (!$actual_type->canCastToUnionType($declared_return_type, $code_base)) {
// Don't warn here about type mismatches such as int->string or object->array, but do warn about SubClass->BaseClass. // Don't warn here about type mismatches such as int->string or object->array, but do warn about SubClass->BaseClass.
// Phan should warn elsewhere about those mismatches // Phan should warn elsewhere about those mismatches
@@ -134,7 +134,7 @@ class NotFullyQualifiedUsageVisitor extends PluginAwarePostAnalysisVisitor
} }
$this->emitPluginIssue( $this->emitPluginIssue(
$this->code_base, $this->code_base,
clone($this->context)->withLineNumberStart($expression->lineno), (clone $this->context)->withLineNumberStart($expression->lineno),
$issue_type, $issue_type,
$issue_msg, $issue_msg,
[$function_name, $this->context->getNamespace()] [$function_name, $this->context->getNamespace()]
@@ -167,7 +167,9 @@ class NotFullyQualifiedUsageVisitor extends PluginAwarePostAnalysisVisitor
} }
$constant_name_lower = strtolower($constant_name); $constant_name_lower = strtolower($constant_name);
if ($constant_name_lower === 'true' || $constant_name_lower === 'false' || $constant_name_lower === 'null') { if ($constant_name_lower === 'true' || $constant_name_lower === 'false' || $constant_name_lower === 'null') {
// These are keywords and are the same in any namespace // These are treated similarly to keywords and are either
// 1. the same in any namespace
// 2. `use somethingelse\true [as false];`
return; return;
} }
@@ -183,7 +185,7 @@ class NotFullyQualifiedUsageVisitor extends PluginAwarePostAnalysisVisitor
{ {
$this->emitPluginIssue( $this->emitPluginIssue(
$this->code_base, $this->code_base,
clone($this->context)->withLineNumberStart($expression->lineno), (clone $this->context)->withLineNumberStart($expression->lineno),
self::NotFullyQualifiedGlobalConstant, self::NotFullyQualifiedGlobalConstant,
'Expected usage of {CONST} to be fully qualified or have a use statement but none were found in namespace {NAMESPACE}', 'Expected usage of {CONST} to be fully qualified or have a use statement but none were found in namespace {NAMESPACE}',
[$constant_name, $this->context->getNamespace()] [$constant_name, $this->context->getNamespace()]
@@ -4,6 +4,8 @@ declare(strict_types=1);
use Microsoft\PhpParser\Node\Expression\CallExpression; use Microsoft\PhpParser\Node\Expression\CallExpression;
use Microsoft\PhpParser\Node\QualifiedName; use Microsoft\PhpParser\Node\QualifiedName;
use Microsoft\PhpParser\Node\ReservedWord;
use Microsoft\PhpParser\Token;
use Phan\AST\TolerantASTConverter\NodeUtils; use Phan\AST\TolerantASTConverter\NodeUtils;
use Phan\CodeBase; use Phan\CodeBase;
use Phan\IssueInstance; use Phan\IssueInstance;
@@ -29,15 +31,26 @@ call_user_func(static function (): void {
$expected_name = $instance->getTemplateParameters()[0]; $expected_name = $instance->getTemplateParameters()[0];
$edits = []; $edits = [];
foreach ($contents->getNodesAtLine($line) as $node) { foreach ($contents->getNodesAtLine($line) as $node) {
if (!$node instanceof QualifiedName) { if ($node instanceof QualifiedName) {
if ($node->globalSpecifier || $node->relativeSpecifier) {
IssueFixer::debug("skip already globally or relatively specified\n");
// This is already qualified
continue;
}
$actual_name = (new NodeUtils($contents->getContents()))->phpParserNameToString($node);
} elseif ($node instanceof ReservedWord) {
// A reserved word in other contexts such as 'float'
$token = $node->children;
if (!$token instanceof Token) {
continue;
}
$actual_name = (new NodeUtils($contents->getContents()))->tokenToString($token);
} else {
IssueFixer::debug("skip wrong node kind " . get_class($node) . "\n");
continue; continue;
} }
if ($node->globalSpecifier || $node->relativeSpecifier) {
// This is already qualified
continue;
}
$actual_name = (new NodeUtils($contents->getContents()))->phpParserNameToString($node);
if ($actual_name !== $expected_name) { if ($actual_name !== $expected_name) {
IssueFixer::debug("skip '$actual_name' !== '$expected_name'\n");
continue; continue;
} }
$is_actual_call = $node->parent instanceof CallExpression; $is_actual_call = $node->parent instanceof CallExpression;
@@ -58,7 +71,8 @@ call_user_func(static function (): void {
} else { } else {
// Don't do this if the global function this refers to doesn't exist. // Don't do this if the global function this refers to doesn't exist.
// TODO: Support namespaced functions // TODO: Support namespaced functions
if (!$code_base->hasGlobalConstantWithFQSEN(FullyQualifiedGlobalConstantName::fromFullyQualifiedString($actual_name))) { if (!$code_base->hasGlobalConstantWithFQSEN(FullyQualifiedGlobalConstantName::fromFullyQualifiedString($actual_name)) &&
!in_array(strtolower($actual_name), ['null', 'true', 'false'], true)) {
IssueFixer::debug("skip attempt to fix $actual_name because the constant was not found in the global scope\n"); IssueFixer::debug("skip attempt to fix $actual_name because the constant was not found in the global scope\n");
return null; return null;
} }
@@ -55,7 +55,7 @@ class PHPDocInWrongCommentPlugin extends PluginV3 implements
if ($comment_string[0] === '#' && substr($comment_string, 1, 1) !== '[') { if ($comment_string[0] === '#' && substr($comment_string, 1, 1) !== '[') {
$this->emitIssue( $this->emitIssue(
$code_base, $code_base,
(clone($context))->withLineNumberStart($token[2]), (clone $context)->withLineNumberStart($token[2]),
'PhanPluginPHPDocHashComment', 'PhanPluginPHPDocHashComment',
'Saw comment starting with {COMMENT} in {COMMENT} - consider using {COMMENT} instead to avoid confusion with php 8.0 {COMMENT} attributes', 'Saw comment starting with {COMMENT} in {COMMENT} - consider using {COMMENT} instead to avoid confusion with php 8.0 {COMMENT} attributes',
['#', StringUtil::jsonEncode(self::truncate(trim($comment_string))), '//', '#['] ['#', StringUtil::jsonEncode(self::truncate(trim($comment_string))), '//', '#[']
@@ -76,7 +76,7 @@ class PHPDocInWrongCommentPlugin extends PluginV3 implements
} }
$this->emitIssue( $this->emitIssue(
$code_base, $code_base,
(clone($context))->withLineNumberStart($token[2]), (clone $context)->withLineNumberStart($token[2]),
'PhanPluginPHPDocInWrongComment', 'PhanPluginPHPDocInWrongComment',
'Saw possible phpdoc annotation in ordinary block comment {COMMENT}. PHPDoc comments should start with "/**" (followed by whitespace), not "/*"', 'Saw possible phpdoc annotation in ordinary block comment {COMMENT}. PHPDoc comments should start with "/**" (followed by whitespace), not "/*"',
[StringUtil::jsonEncode(self::truncate($comment_string))] [StringUtil::jsonEncode(self::truncate($comment_string))]
+3 -3
View File
@@ -60,7 +60,7 @@ class PhanSelfCheckPlugin extends PluginV3 implements AnalyzeFunctionCallCapabil
) use ( ) use (
$fmt_index, $fmt_index,
$arg_index $arg_index
): void { ): void {
if (\count($args) <= $fmt_index) { if (\count($args) <= $fmt_index) {
return; return;
} }
@@ -96,7 +96,7 @@ class PhanSelfCheckPlugin extends PluginV3 implements AnalyzeFunctionCallCapabil
) use ( ) use (
$type_index, $type_index,
$arg_index $arg_index
): void { ): void {
if (\count($args) <= $type_index) { if (\count($args) <= $type_index) {
return; return;
} }
@@ -136,7 +136,7 @@ class PhanSelfCheckPlugin extends PluginV3 implements AnalyzeFunctionCallCapabil
) use ( ) use (
$type_index, $type_index,
$arg_index $arg_index
): void { ): void {
if (\count($args) <= $type_index) { if (\count($args) <= $type_index) {
return; return;
} }
+2 -2
View File
@@ -706,8 +706,8 @@ class PrintfCheckerPlugin extends PluginV3 implements AnalyzeFunctionCallCapabil
* @param CodeBase $code_base * @param CodeBase $code_base
* @param Context $context * @param Context $context
* @param string $fmt_str * @param string $fmt_str
* @param ConversionSpec[][] $types_of_arg contains array of ConversionSpec for * @param associative-array<int,array<mixed,ConversionSpec|true>> $types_of_arg contains array of ConversionSpec for
* each position in the untranslated format string. * each position in the untranslated format string.
*/ */
protected static function validateTranslations(CodeBase $code_base, Context $context, string $fmt_str, array $types_of_arg): void protected static function validateTranslations(CodeBase $code_base, Context $context, string $fmt_str, array $types_of_arg): void
{ {
+10
View File
@@ -596,6 +596,16 @@ This is only useful in applications or libraries that print output in only a few
Suppression comments can use the issue name `PhanPluginRemoveDebugAny` to suppress all issue types emitted by this plugin. Suppression comments can use the issue name `PhanPluginRemoveDebugAny` to suppress all issue types emitted by this plugin.
#### AddNeverReturnTypePlugin.php
This plugin checks if a function or method will not return (and has no overrides).
If the function doesn't have a return type of never.
then this plugin will emit an issue.
Closures and short error functions are currently not checked
- **PhanPluginNeverReturnMethod**: `Method {METHOD} never returns and has a return type of {TYPE}, but phpdoc type {TYPE} could be used instead`
- **PhanPluginNeverReturnFunction**: `Function {FUNCTION} never returns and has a return type of {TYPE}, but phpdoc type {TYPE} could be used instead`
### 4. Demo plugins: ### 4. Demo plugins:
These files demonstrate plugins for Phan. These files demonstrate plugins for Phan.
@@ -121,7 +121,7 @@ class RedundantAssignmentPreAnalysisVisitor extends PluginAwarePreAnalysisVisito
$issue_name = 'PhanPluginRedundantAssignment'; $issue_name = 'PhanPluginRedundantAssignment';
} }
if ($this->context->isInLoop()) { if ($this->context->isInLoop()) {
$this->context->deferCheckToOutermostLoop(function (Context $context_after_loop) use ($issue_name, $var_name, $variable_type): void { $this->context->deferCheckToOutermostLoop(function (Context $context_after_loop) use ($issue_name, $var_name, $variable_type, $var): void {
$new_variable = $context_after_loop->getScope()->getVariableByNameOrNull($var_name); $new_variable = $context_after_loop->getScope()->getVariableByNameOrNull($var_name);
if (!$new_variable) { if (!$new_variable) {
return; return;
@@ -135,7 +135,7 @@ class RedundantAssignmentPreAnalysisVisitor extends PluginAwarePreAnalysisVisito
} }
$this->emitPluginIssue( $this->emitPluginIssue(
$this->code_base, $this->code_base,
$this->context, (clone $this->context)->withLineNumberStart($var->lineno),
$issue_name, $issue_name,
'Assigning {TYPE} to variable ${VARIABLE} which already has that value', 'Assigning {TYPE} to variable ${VARIABLE} which already has that value',
[$variable_type, $var_name] [$variable_type, $var_name]
@@ -145,7 +145,7 @@ class RedundantAssignmentPreAnalysisVisitor extends PluginAwarePreAnalysisVisito
} }
$this->emitPluginIssue( $this->emitPluginIssue(
$this->code_base, $this->code_base,
$this->context, (clone $this->context)->withLineNumberStart($var->lineno),
$issue_name, $issue_name,
'Assigning {TYPE} to variable ${VARIABLE} which already has that value', 'Assigning {TYPE} to variable ${VARIABLE} which already has that value',
[$expr_type, $var_name] [$expr_type, $var_name]
@@ -38,7 +38,10 @@ class RemoveDebugStatementPlugin extends PluginV3 implements
*/ */
public function getAnalyzeFunctionCallClosures(CodeBase $code_base): array public function getAnalyzeFunctionCallClosures(CodeBase $code_base): array
{ {
$warn_remove_debug_call = static function (CodeBase $code_base, Context $context, FunctionInterface $function): void { $warn_remove_debug_call = static function (CodeBase $code_base, Context $context, FunctionInterface $function, ?Node $node): void {
if ($node) {
$context = (clone $context)->withLineNumberStart($node->lineno);
}
self::emitIssue( self::emitIssue(
$code_base, $code_base,
$context, $context,
@@ -55,12 +58,12 @@ class RemoveDebugStatementPlugin extends PluginV3 implements
Context $context, Context $context,
Func $function, Func $function,
array $unused_args, array $unused_args,
?Node $unused_node = null ?Node $node = null
) use ($warn_remove_debug_call): void { ) use ($warn_remove_debug_call): void {
if (self::shouldSuppressDebugIssues($code_base, $context)) { if (self::shouldSuppressDebugIssues($code_base, $context)) {
return; return;
} }
$warn_remove_debug_call($code_base, $context, $function); $warn_remove_debug_call($code_base, $context, $function, $node);
}; };
/** /**
* @param list<Node|string|int|float> $args the nodes for the arguments to the invocation * @param list<Node|string|int|float> $args the nodes for the arguments to the invocation
@@ -71,7 +74,7 @@ class RemoveDebugStatementPlugin extends PluginV3 implements
Context $context, Context $context,
Func $function, Func $function,
array $args, array $args,
?Node $unused_node = null ?Node $node = null
) use ($warn_remove_debug_call): void { ) use ($warn_remove_debug_call): void {
if (self::shouldSuppressDebugIssues($code_base, $context)) { if (self::shouldSuppressDebugIssues($code_base, $context)) {
return; return;
@@ -84,7 +87,7 @@ class RemoveDebugStatementPlugin extends PluginV3 implements
return; return;
} }
} }
$warn_remove_debug_call($code_base, $context, $function); $warn_remove_debug_call($code_base, $context, $function, $node);
}; };
/** /**
@@ -95,7 +98,7 @@ class RemoveDebugStatementPlugin extends PluginV3 implements
Context $context, Context $context,
Func $function, Func $function,
array $args, array $args,
?Node $unused_node = null ?Node $node = null
) use ($warn_remove_debug_call): void { ) use ($warn_remove_debug_call): void {
$file = $args[0] ?? null; $file = $args[0] ?? null;
if (!$file instanceof Node || $file->kind !== ast\AST_CONST || !in_array($file->children['name']->children['name'] ?? null, ['STDOUT', 'STDERR'], true)) { if (!$file instanceof Node || $file->kind !== ast\AST_CONST || !in_array($file->children['name']->children['name'] ?? null, ['STDOUT', 'STDERR'], true)) {
@@ -106,7 +109,7 @@ class RemoveDebugStatementPlugin extends PluginV3 implements
return; return;
} }
$warn_remove_debug_call($code_base, $context, $function); $warn_remove_debug_call($code_base, $context, $function, $node);
}; };
return [ return [
+1 -1
View File
@@ -149,7 +149,7 @@ class SleepCheckerVisitor extends PluginAwarePostAnalysisVisitor
*/ */
private function analyzeReturnValue($expr_node, int $lineno, array &$sleep_properties): void private function analyzeReturnValue($expr_node, int $lineno, array &$sleep_properties): void
{ {
$context = clone($this->context)->withLineNumberStart($lineno); $context = (clone $this->context)->withLineNumberStart($lineno);
if (!($expr_node instanceof Node)) { if (!($expr_node instanceof Node)) {
$this->emitPluginIssue( $this->emitPluginIssue(
$this->code_base, $this->code_base,
+1 -1
View File
@@ -60,7 +60,7 @@ class StrictComparisonPlugin extends PluginV3 implements
$index, $index,
$index_name, $index_name,
$min_args $min_args
): void { ): void {
if (count($args) < $min_args) { if (count($args) < $min_args) {
return; return;
} }
@@ -201,7 +201,7 @@ class SuspiciousParamOrderVisitor extends PluginAwarePostAnalysisVisitor
if ($function->isPHPInternal()) { if ($function->isPHPInternal()) {
$this->emitPluginIssue( $this->emitPluginIssue(
$this->code_base, $this->code_base,
clone($this->context)->withLineNumberStart($node->lineno), (clone $this->context)->withLineNumberStart($node->lineno),
self::SuspiciousParamOrderInternal, self::SuspiciousParamOrderInternal,
'Suspicious order for arguments named {DETAILS} - These are being passed to parameters {DETAILS} of {FUNCTION}', 'Suspicious order for arguments named {DETAILS} - These are being passed to parameters {DETAILS} of {FUNCTION}',
[ [
@@ -213,7 +213,7 @@ class SuspiciousParamOrderVisitor extends PluginAwarePostAnalysisVisitor
} else { } else {
$this->emitPluginIssue( $this->emitPluginIssue(
$this->code_base, $this->code_base,
clone($this->context)->withLineNumberStart($node->lineno), (clone $this->context)->withLineNumberStart($node->lineno),
self::SuspiciousParamOrder, self::SuspiciousParamOrder,
'Suspicious order for arguments named {DETAILS} - These are being passed to parameters {DETAILS} of {FUNCTION} defined at {FILE}:{LINE}', 'Suspicious order for arguments named {DETAILS} - These are being passed to parameters {DETAILS} of {FUNCTION} defined at {FILE}:{LINE}',
[ [
@@ -280,7 +280,7 @@ class SuspiciousParamOrderVisitor extends PluginAwarePostAnalysisVisitor
if ($function->isPHPInternal()) { if ($function->isPHPInternal()) {
$this->emitPluginIssue( $this->emitPluginIssue(
$this->code_base, $this->code_base,
(clone($this->context))->withLineNumberStart($args[$i]->lineno ?? $node->lineno), (clone $this->context)->withLineNumberStart($args[$i]->lineno ?? $node->lineno),
self::SuspiciousParamPositionInternal, self::SuspiciousParamPositionInternal,
'Suspicious order for argument {DETAILS} - This is getting passed to parameter {DETAILS} of {FUNCTION}', 'Suspicious order for argument {DETAILS} - This is getting passed to parameter {DETAILS} of {FUNCTION}',
[ [
@@ -292,7 +292,7 @@ class SuspiciousParamOrderVisitor extends PluginAwarePostAnalysisVisitor
} else { } else {
$this->emitPluginIssue( $this->emitPluginIssue(
$this->code_base, $this->code_base,
clone($this->context)->withLineNumberStart($args[$i]->lineno ?? $node->lineno), (clone $this->context)->withLineNumberStart($args[$i]->lineno ?? $node->lineno),
self::SuspiciousParamPosition, self::SuspiciousParamPosition,
'Suspicious order for argument {DETAILS} - This is getting passed to parameter {DETAILS} of {FUNCTION} defined at {FILE}:{LINE}', 'Suspicious order for argument {DETAILS} - This is getting passed to parameter {DETAILS} of {FUNCTION} defined at {FILE}:{LINE}',
[ [
@@ -132,7 +132,8 @@ class UnknownElementTypePlugin extends PluginV3 implements
$inferred_types[$i] = $combined_type; $inferred_types[$i] = $combined_type;
} }
} }
} },
$this
); );
} }
@@ -350,7 +351,8 @@ class UnknownElementTypePlugin extends PluginV3 implements
$inferred_types[$i] = $combined_type; $inferred_types[$i] = $combined_type;
} }
} }
} },
$this
); );
} }
+1 -2
View File
@@ -93,7 +93,6 @@ final class UnreachableCodeVisitor extends PluginAwarePostAnalysisVisitor
continue; continue;
} }
} }
$context = clone($this->context)->withLineNumberStart($next_node->lineno);
if ($this->context->isInFunctionLikeScope()) { if ($this->context->isInFunctionLikeScope()) {
if ($this->context->getFunctionLikeInScope($this->code_base)->checkHasSuppressIssueAndIncrementCount('PhanPluginUnreachableCode')) { if ($this->context->getFunctionLikeInScope($this->code_base)->checkHasSuppressIssueAndIncrementCount('PhanPluginUnreachableCode')) {
// don't emit the below issue. // don't emit the below issue.
@@ -102,7 +101,7 @@ final class UnreachableCodeVisitor extends PluginAwarePostAnalysisVisitor
} }
$this->emitPluginIssue( $this->emitPluginIssue(
$this->code_base, $this->code_base,
$context, (clone $this->context)->withLineNumberStart($next_node->lineno),
'PhanPluginUnreachableCode', 'PhanPluginUnreachableCode',
'Unreachable statement detected', 'Unreachable statement detected',
[] []
+3 -3
View File
@@ -54,7 +54,7 @@ class WhitespacePlugin extends PluginV3 implements
if ($newline_position !== false) { if ($newline_position !== false) {
self::emitIssue( self::emitIssue(
$code_base, $code_base,
clone($context)->withLineNumberStart(self::calculateLine($file_contents, $newline_position)), (clone $context)->withLineNumberStart(self::calculateLine($file_contents, $newline_position)),
self::CarriageReturn, self::CarriageReturn,
'The first occurrence of a carriage return ("\r") was seen here. Running "dos2unix" can fix that.' 'The first occurrence of a carriage return ("\r") was seen here. Running "dos2unix" can fix that.'
); );
@@ -63,7 +63,7 @@ class WhitespacePlugin extends PluginV3 implements
if ($tab_position !== false) { if ($tab_position !== false) {
self::emitIssue( self::emitIssue(
$code_base, $code_base,
clone($context)->withLineNumberStart(self::calculateLine($file_contents, $tab_position)), (clone $context)->withLineNumberStart(self::calculateLine($file_contents, $tab_position)),
self::Tab, self::Tab,
'The first occurrence of a tab was seen here. Running "expand" can fix that.' 'The first occurrence of a tab was seen here. Running "expand" can fix that.'
); );
@@ -71,7 +71,7 @@ class WhitespacePlugin extends PluginV3 implements
if (preg_match('/[ \t]\r?$/mS', $file_contents, $match, PREG_OFFSET_CAPTURE)) { if (preg_match('/[ \t]\r?$/mS', $file_contents, $match, PREG_OFFSET_CAPTURE)) {
self::emitIssue( self::emitIssue(
$code_base, $code_base,
clone($context)->withLineNumberStart(self::calculateLine($file_contents, $match[0][1])), (clone $context)->withLineNumberStart(self::calculateLine($file_contents, $match[0][1])),
self::WhitespaceTrailing, self::WhitespaceTrailing,
'The first occurrence of trailing whitespace was seen here.' 'The first occurrence of trailing whitespace was seen here.'
); );
+60
View File
@@ -1,5 +1,65 @@
Phan NEWS Phan NEWS
Sep 14 2021, Phan 5.2.1
-----------------------
New Features:
- Improve analysis of conditions detecting the empty/non-empty array. (#4523)
E.g. support `if ($x === []) {...} else {...}`, `if (count($x) > 0) {...} else {...}`, etc.
- Raise severity of `PhanTypeNonVarPassByRef` to critical. It throws an Error in php 8.0+. (#3830)
- Infer from conditions such as `in_array($var, $array, true)` that $array is a non-empty array and that $var is of a type found in the elements of $array. (#2511)
Plugins:
- Emit a proper warning when `InvokePHPNativeSyntaxCheckPlugin` is passed a path to a php binary that is missing or invalid (or if the syntax check crashed). (#4116)
Previously, Phan would crash with an error such as `fwrite(): write of 8196 bytes failed with errno=32 Broken pipe`
- Fix false positive `PhanPluginMoreSpecificActualReturnType` for phpdoc array shape return type and returned generic array. (#4531)
Bug fixes:
- Fix type inference logic that was looking for array specializations rather than array or any array subtype (#4512)
- Fix false positive `PhanUnreferencedClosure`/`PhanUnreferencedFunction` seen when a closure/function name was passed to a function such as `uasort` that already had a plugin analyzing calls of the closure. (#4090, #4519)
- Fix false positive/negative `PhanTypeMissingReturn*` instances. (#4537)
The check was wrong and should have been checking for a statement list that throws/exits.
Return statements can be omitted if a function unconditionally exits.
Also, check for the real `never` return type when emitting issues
- Fix false positive `PhanPossiblyUndefinedGlobalVariable*` instance when `global $var` is used within a conditional. (#4539)
- Fix false positive `PhanPluginRedundantAssignmentInLoop` instance when a variable is modified in a catch statement with a break/continue. (#4542)
- Fix some incorrect line numbers in some plugin issues.
- Fix crash seen when parsing intersection types containing union types such as `non-empty-array&array<'a'|'b'>` (#4544)
Maintenance:
- Fix old return type signature for `get_headers` (#3273)
- Print instructions on how to upgrade php-ast to 1.0.11+ if an outdated version is installed. (#4532)
Aug 26 2021, Phan 5.2.0
-----------------------
Plugins:
- Add `AddNeverReturnTypePlugin`` which will suggest adding a phpdoc return type of `@return never`. (#4468)
Bug fixes:
- When using the polyfill parser, properly parse nullable class property declarations as nullable. (#4492)
- Don't emit PhanIncompatibleRealPropertyType for private base property. (#4426)
- Fix false positive where a method overriding an existing method could be treated as having overrides. (#4502)
- Consistently support `numeric-string` in all phpdoc
- Fix false positive `PhanTypeMismatchPropertyDefaultReal` warning for literal integer and `float` typed property. (#4507)
- Fix false positive warnings such as `PhanImpossibleTypeComparison` about string subtypes not casting to other string subtypes (#4514)
Maintenance:
- Change internal representation of FunctionSignatureMap delta files.
- Add a new exit status bit flag to `BlockExitStatusChecker` to indicate that a function will exit or infinitely loop (`STATUS_NORETURN`) (#4468)
- Internally represent the base function map using php 8.0 signatures instead of php 7.3 - applying deltas backwards has the same result (#4478)
Aug 07 2021, Phan 5.1.0
-----------------------
New Features (Analysis):
- Support running Phan 5 with AST version 80 instead of 85 but warn about php-ast being outdated.
Documentation:
- Update documentation of `--target-php-version` and `--minimum-target-php-version`
Aug 01 2021, Phan 5.0.0 Aug 01 2021, Phan 5.0.0
----------------------- -----------------------
+2 -3
View File
@@ -5,13 +5,12 @@ information is available or can be deduced. Phan has a good (but not comprehensi
and can track values in a few use cases (e.g. arrays, integers, and strings). and can track values in a few use cases (e.g. arrays, integers, and strings).
[![Build Status](https://dev.azure.com/tysonandre775/phan/_apis/build/status/phan.phan?branchName=v5)](https://dev.azure.com/tysonandre775/phan/_build/latest?definitionId=3&branchName=v5) [![Build Status](https://dev.azure.com/tysonandre775/phan/_apis/build/status/phan.phan?branchName=v5)](https://dev.azure.com/tysonandre775/phan/_build/latest?definitionId=3&branchName=v5)
[![Build Status](https://github.com/phan/phan/actions/workflows/main.yml/badge.svg?branch=v5)](https://github.com/phan/phan/actions/workflows/main.yml?query=branch%3Av5)
[![Build Status (Windows)](https://ci.appveyor.com/api/projects/status/github/phan/phan?branch=v5&svg=true)](https://ci.appveyor.com/project/TysonAndre/phan/branch/v5) [![Build Status (Windows)](https://ci.appveyor.com/api/projects/status/github/phan/phan?branch=v5&svg=true)](https://ci.appveyor.com/project/TysonAndre/phan/branch/v5)
[![Gitter](https://badges.gitter.im/phan/phan.svg)](https://gitter.im/phan/phan?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge) [![Gitter](https://badges.gitter.im/phan/phan.svg)](https://gitter.im/phan/phan?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge)
[![Latest Stable Version](https://img.shields.io/packagist/v/phan/phan.svg)](https://packagist.org/packages/phan/phan) [![Latest Stable Version](https://img.shields.io/packagist/v/phan/phan.svg)](https://packagist.org/packages/phan/phan)
[![License](https://img.shields.io/packagist/l/phan/phan.svg)](https://github.com/phan/phan/blob/v5/LICENSE) [![License](https://img.shields.io/packagist/l/phan/phan.svg)](https://github.com/phan/phan/blob/v5/LICENSE)
This is the unstable branch for an upcoming Phan 5 release. The branch for the older stable Phan 4 release line is [here](https://github.com/phan/phan/tree/v4).
# Getting Started # Getting Started
The easiest way to use Phan is via Composer. The easiest way to use Phan is via Composer.
@@ -23,7 +22,7 @@ composer require phan/phan
With Phan installed, you'll want to [create a `.phan/config.php` file](https://github.com/phan/phan/wiki/Getting-Started#creating-a-config-file) in With Phan installed, you'll want to [create a `.phan/config.php` file](https://github.com/phan/phan/wiki/Getting-Started#creating-a-config-file) in
your project to tell Phan how to analyze your source code. Once configured, you can run it via `./vendor/bin/phan`. your project to tell Phan how to analyze your source code. Once configured, you can run it via `./vendor/bin/phan`.
Phan depends on PHP 7.2+ with the [php-ast](https://github.com/nikic/php-ast) extension (1.0.14+ is preferred) and supports analyzing PHP version 7.0-8.1 syntax. Phan 5 depends on PHP 7.2+ with the [php-ast](https://github.com/nikic/php-ast) extension (1.0.14+ is preferred) and supports analyzing PHP version 7.0-8.1 syntax.
Installation instructions for php-ast can be found [here](https://github.com/nikic/php-ast#installation). Installation instructions for php-ast can be found [here](https://github.com/nikic/php-ast#installation).
(Phan can be used without php-ast by using the CLI option `--allow-polyfill-parser`, but there are slight differences in the parsing of doc comments) (Phan can be used without php-ast by using the CLI option `--allow-polyfill-parser`, but there are slight differences in the parsing of doc comments)
-5
View File
@@ -6,11 +6,6 @@ trigger:
- v5 - v5
jobs: jobs:
- template: .azure/job.yml
parameters:
configurationName: PHP_72_NTS
phpVersion: 7.2
vmImage: 'ubuntu-16.04'
- template: .azure/job.yml - template: .azure/job.yml
parameters: parameters:
configurationName: PHP_73_NTS configurationName: PHP_73_NTS
+1 -1
View File
@@ -35,7 +35,7 @@
"symfony/console": "^3.2|^4.0|^5.0", "symfony/console": "^3.2|^4.0|^5.0",
"symfony/polyfill-mbstring": "^1.11.0", "symfony/polyfill-mbstring": "^1.11.0",
"symfony/polyfill-php80": "^1.20.0", "symfony/polyfill-php80": "^1.20.0",
"tysonandre/var_representation_polyfill": "^0.0.2" "tysonandre/var_representation_polyfill": "^0.0.2|^0.1.0"
}, },
"suggest": { "suggest": {
"ext-ast": "Needed for parsing ASTs (unless --use-fallback-parser is used). 1.0.1+ is needed, 1.0.14+ is recommended.", "ext-ast": "Needed for parsing ASTs (unless --use-fallback-parser is used). 1.0.1+ is needed, 1.0.14+ is recommended.",
+38 -35
View File
@@ -4,7 +4,7 @@
"Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies",
"This file is @generated automatically" "This file is @generated automatically"
], ],
"content-hash": "cc0af707fc392b3959172556c6e575f4", "content-hash": "9b0f8da866a879ae2b1c4847a19ea935",
"packages": [ "packages": [
{ {
"name": "composer/semver", "name": "composer/semver",
@@ -616,16 +616,16 @@
}, },
{ {
"name": "symfony/console", "name": "symfony/console",
"version": "v5.3.6", "version": "v5.3.7",
"source": { "source": {
"type": "git", "type": "git",
"url": "https://github.com/symfony/console.git", "url": "https://github.com/symfony/console.git",
"reference": "51b71afd6d2dc8f5063199357b9880cea8d8bfe2" "reference": "8b1008344647462ae6ec57559da166c2bfa5e16a"
}, },
"dist": { "dist": {
"type": "zip", "type": "zip",
"url": "https://api.github.com/repos/symfony/console/zipball/51b71afd6d2dc8f5063199357b9880cea8d8bfe2", "url": "https://api.github.com/repos/symfony/console/zipball/8b1008344647462ae6ec57559da166c2bfa5e16a",
"reference": "51b71afd6d2dc8f5063199357b9880cea8d8bfe2", "reference": "8b1008344647462ae6ec57559da166c2bfa5e16a",
"shasum": "" "shasum": ""
}, },
"require": { "require": {
@@ -695,7 +695,7 @@
"terminal" "terminal"
], ],
"support": { "support": {
"source": "https://github.com/symfony/console/tree/v5.3.6" "source": "https://github.com/symfony/console/tree/v5.3.7"
}, },
"funding": [ "funding": [
{ {
@@ -711,7 +711,7 @@
"type": "tidelift" "type": "tidelift"
} }
], ],
"time": "2021-07-27T19:10:22+00:00" "time": "2021-08-25T20:02:16+00:00"
}, },
{ {
"name": "symfony/deprecation-contracts", "name": "symfony/deprecation-contracts",
@@ -1347,16 +1347,16 @@
}, },
{ {
"name": "symfony/string", "name": "symfony/string",
"version": "v5.3.3", "version": "v5.3.7",
"source": { "source": {
"type": "git", "type": "git",
"url": "https://github.com/symfony/string.git", "url": "https://github.com/symfony/string.git",
"reference": "bd53358e3eccec6a670b5f33ab680d8dbe1d4ae1" "reference": "8d224396e28d30f81969f083a58763b8b9ceb0a5"
}, },
"dist": { "dist": {
"type": "zip", "type": "zip",
"url": "https://api.github.com/repos/symfony/string/zipball/bd53358e3eccec6a670b5f33ab680d8dbe1d4ae1", "url": "https://api.github.com/repos/symfony/string/zipball/8d224396e28d30f81969f083a58763b8b9ceb0a5",
"reference": "bd53358e3eccec6a670b5f33ab680d8dbe1d4ae1", "reference": "8d224396e28d30f81969f083a58763b8b9ceb0a5",
"shasum": "" "shasum": ""
}, },
"require": { "require": {
@@ -1410,7 +1410,7 @@
"utf8" "utf8"
], ],
"support": { "support": {
"source": "https://github.com/symfony/string/tree/v5.3.3" "source": "https://github.com/symfony/string/tree/v5.3.7"
}, },
"funding": [ "funding": [
{ {
@@ -1426,20 +1426,20 @@
"type": "tidelift" "type": "tidelift"
} }
], ],
"time": "2021-06-27T11:44:38+00:00" "time": "2021-08-26T08:00:08+00:00"
}, },
{ {
"name": "tysonandre/var_representation_polyfill", "name": "tysonandre/var_representation_polyfill",
"version": "0.0.2", "version": "0.1.1",
"source": { "source": {
"type": "git", "type": "git",
"url": "https://github.com/TysonAndre/var_representation_polyfill.git", "url": "https://github.com/TysonAndre/var_representation_polyfill.git",
"reference": "3f17999ee1f257319ddc6721dd26ebbc5d175f33" "reference": "0a942e74e18af5514749895507bc6ca7ab96399a"
}, },
"dist": { "dist": {
"type": "zip", "type": "zip",
"url": "https://api.github.com/repos/TysonAndre/var_representation_polyfill/zipball/3f17999ee1f257319ddc6721dd26ebbc5d175f33", "url": "https://api.github.com/repos/TysonAndre/var_representation_polyfill/zipball/0a942e74e18af5514749895507bc6ca7ab96399a",
"reference": "3f17999ee1f257319ddc6721dd26ebbc5d175f33", "reference": "0a942e74e18af5514749895507bc6ca7ab96399a",
"shasum": "" "shasum": ""
}, },
"require": { "require": {
@@ -1450,6 +1450,9 @@
"phan/phan": "^4.0", "phan/phan": "^4.0",
"phpunit/phpunit": "^8.5.0" "phpunit/phpunit": "^8.5.0"
}, },
"suggest": {
"ext-var_representation": "*"
},
"type": "library", "type": "library",
"autoload": { "autoload": {
"psr-4": { "psr-4": {
@@ -1468,16 +1471,16 @@
"name": "Tyson Andre" "name": "Tyson Andre"
} }
], ],
"description": "Polyfill for var_representation", "description": "Polyfill for var_representation: convert a variable to a string in a way that fixes the shortcomings of var_export",
"keywords": [ "keywords": [
"var_export", "var_export",
"var_representation" "var_representation"
], ],
"support": { "support": {
"issues": "https://github.com/TysonAndre/var_representation_polyfill/issues", "issues": "https://github.com/TysonAndre/var_representation_polyfill/issues",
"source": "https://github.com/TysonAndre/var_representation_polyfill/tree/0.0.2" "source": "https://github.com/TysonAndre/var_representation_polyfill/tree/0.1.1"
}, },
"time": "2021-06-26T18:55:02+00:00" "time": "2021-08-16T00:12:50+00:00"
}, },
{ {
"name": "webmozart/assert", "name": "webmozart/assert",
@@ -1779,33 +1782,33 @@
}, },
{ {
"name": "phpspec/prophecy", "name": "phpspec/prophecy",
"version": "1.13.0", "version": "1.14.0",
"source": { "source": {
"type": "git", "type": "git",
"url": "https://github.com/phpspec/prophecy.git", "url": "https://github.com/phpspec/prophecy.git",
"reference": "be1996ed8adc35c3fd795488a653f4b518be70ea" "reference": "d86dfc2e2a3cd366cee475e52c6bb3bbc371aa0e"
}, },
"dist": { "dist": {
"type": "zip", "type": "zip",
"url": "https://api.github.com/repos/phpspec/prophecy/zipball/be1996ed8adc35c3fd795488a653f4b518be70ea", "url": "https://api.github.com/repos/phpspec/prophecy/zipball/d86dfc2e2a3cd366cee475e52c6bb3bbc371aa0e",
"reference": "be1996ed8adc35c3fd795488a653f4b518be70ea", "reference": "d86dfc2e2a3cd366cee475e52c6bb3bbc371aa0e",
"shasum": "" "shasum": ""
}, },
"require": { "require": {
"doctrine/instantiator": "^1.2", "doctrine/instantiator": "^1.2",
"php": "^7.2 || ~8.0, <8.1", "php": "^7.2 || ~8.0, <8.2",
"phpdocumentor/reflection-docblock": "^5.2", "phpdocumentor/reflection-docblock": "^5.2",
"sebastian/comparator": "^3.0 || ^4.0", "sebastian/comparator": "^3.0 || ^4.0",
"sebastian/recursion-context": "^3.0 || ^4.0" "sebastian/recursion-context": "^3.0 || ^4.0"
}, },
"require-dev": { "require-dev": {
"phpspec/phpspec": "^6.0", "phpspec/phpspec": "^6.0 || ^7.0",
"phpunit/phpunit": "^8.0 || ^9.0" "phpunit/phpunit": "^8.0 || ^9.0"
}, },
"type": "library", "type": "library",
"extra": { "extra": {
"branch-alias": { "branch-alias": {
"dev-master": "1.11.x-dev" "dev-master": "1.x-dev"
} }
}, },
"autoload": { "autoload": {
@@ -1840,9 +1843,9 @@
], ],
"support": { "support": {
"issues": "https://github.com/phpspec/prophecy/issues", "issues": "https://github.com/phpspec/prophecy/issues",
"source": "https://github.com/phpspec/prophecy/tree/1.13.0" "source": "https://github.com/phpspec/prophecy/tree/1.14.0"
}, },
"time": "2021-03-17T13:42:18+00:00" "time": "2021-09-10T09:02:12+00:00"
}, },
{ {
"name": "phpunit/php-code-coverage", "name": "phpunit/php-code-coverage",
@@ -2143,16 +2146,16 @@
}, },
{ {
"name": "phpunit/phpunit", "name": "phpunit/phpunit",
"version": "8.5.19", "version": "8.5.20",
"source": { "source": {
"type": "git", "type": "git",
"url": "https://github.com/sebastianbergmann/phpunit.git", "url": "https://github.com/sebastianbergmann/phpunit.git",
"reference": "496281b64ec781856ed0a583483b5923b4033722" "reference": "9deefba183198398a09b927a6ac6bc1feb0b7b70"
}, },
"dist": { "dist": {
"type": "zip", "type": "zip",
"url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/496281b64ec781856ed0a583483b5923b4033722", "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/9deefba183198398a09b927a6ac6bc1feb0b7b70",
"reference": "496281b64ec781856ed0a583483b5923b4033722", "reference": "9deefba183198398a09b927a6ac6bc1feb0b7b70",
"shasum": "" "shasum": ""
}, },
"require": { "require": {
@@ -2224,7 +2227,7 @@
], ],
"support": { "support": {
"issues": "https://github.com/sebastianbergmann/phpunit/issues", "issues": "https://github.com/sebastianbergmann/phpunit/issues",
"source": "https://github.com/sebastianbergmann/phpunit/tree/8.5.19" "source": "https://github.com/sebastianbergmann/phpunit/tree/8.5.20"
}, },
"funding": [ "funding": [
{ {
@@ -2236,7 +2239,7 @@
"type": "github" "type": "github"
} }
], ],
"time": "2021-07-31T15:15:06+00:00" "time": "2021-08-31T06:44:38+00:00"
}, },
{ {
"name": "sebastian/code-unit-reverse-lookup", "name": "sebastian/code-unit-reverse-lookup",
+2 -8
View File
@@ -395,7 +395,7 @@ class PhanPHPLinterOpts
/** /**
* @param string $msg - optional message * @param string $msg - optional message
* @param int $exit_code - process exit code. * @param int $exit_code - process exit code.
* @return void - exits with $exit_code * @return never - exits with $exit_code
*/ */
public function usage($msg = '', $exit_code = 0) public function usage($msg = '', $exit_code = 0)
{ {
@@ -537,7 +537,6 @@ EOB;
} }
if (!is_string($value)) { if (!is_string($value)) {
$this->usage('--flycheck-file should be passed a string value', 1); $this->usage('--flycheck-file should be passed a string value', 1);
break; // unreachable
} }
$this->temporary_file_map = [$this->file_list[0] => $value]; $this->temporary_file_map = [$this->file_list[0] => $value];
break; break;
@@ -549,7 +548,6 @@ EOB;
$mapping = json_decode($value, true); $mapping = json_decode($value, true);
if (!\is_array($mapping)) { if (!\is_array($mapping)) {
$this->usage('--temporary-file-map should be a JSON encoded map from source file to temporary file to analyze instead', 1); $this->usage('--temporary-file-map should be a JSON encoded map from source file to temporary file to analyze instead', 1);
break; // unreachable
} }
$this->temporary_file_map = $mapping; $this->temporary_file_map = $mapping;
@@ -574,19 +572,17 @@ EOB;
if (!is_string($path)) { if (!is_string($path)) {
$this->print_usage_on_error = $print_usage_on_error; $this->print_usage_on_error = $print_usage_on_error;
$this->usage(sprintf("Error: asked to analyze path %s which is not a string", json_encode($path) ?: 'invalid'), 1); $this->usage(sprintf("Error: asked to analyze path %s which is not a string", json_encode($path) ?: 'invalid'), 1);
exit(1);
} }
if (!file_exists($path)) { if (!file_exists($path)) {
$this->print_usage_on_error = $print_usage_on_error; $this->print_usage_on_error = $print_usage_on_error;
$this->usage(sprintf("Error: asked to analyze file %s which does not exist", json_encode($path) ?: 'invalid'), 1); $this->usage(sprintf("Error: asked to analyze file %s which does not exist", json_encode($path) ?: 'invalid'), 1);
exit(1);
} }
$this->file_list[] = $path; $this->file_list[] = $path;
break; break;
case 'h': case 'h':
case 'help': case 'help':
// never returns
$this->usage(); $this->usage();
break;
case 'd': case 'd':
case 'disable-usage-on-error': case 'disable-usage-on-error':
$print_usage_on_error = false; $print_usage_on_error = false;
@@ -604,7 +600,6 @@ EOB;
case 'output-mode': case 'output-mode':
if (!is_string($value) || !in_array($value, ['text', 'json', 'csv', 'codeclimate', 'checkstyle', 'pylint', 'phan_client'], true)) { if (!is_string($value) || !in_array($value, ['text', 'json', 'csv', 'codeclimate', 'checkstyle', 'pylint', 'phan_client'], true)) {
$this->usage("Expected --output-mode {text,json,csv,codeclimate,checkstyle,pylint}, but got " . json_encode($value), 1); $this->usage("Expected --output-mode {text,json,csv,codeclimate,checkstyle,pylint}, but got " . json_encode($value), 1);
break; // unreachable
} }
if ($value === 'phan_client') { if ($value === 'phan_client') {
// We're requesting the default // We're requesting the default
@@ -614,7 +609,6 @@ EOB;
break; break;
default: default:
$this->usage("Unknown option '-$key'", 1); $this->usage("Unknown option '-$key'", 1);
break;
} }
} }
try { try {
Vendored Regular → Executable
View File
+13 -14
View File
@@ -579,8 +579,6 @@ class ContextNode
return []; return [];
} }
// TODO: Should this check that count($class_list) > 0 instead? Or just always check?
// TODO: Improve for intersection types
if (\count($class_list) === 0) { if (\count($class_list) === 0) {
if (!$union_type->hasTypeMatchingCallback(function (Type $type) use ($expected_type_categories): bool { if (!$union_type->hasTypeMatchingCallback(function (Type $type) use ($expected_type_categories): bool {
if ($this->node instanceof Node) { if ($this->node instanceof Node) {
@@ -1778,17 +1776,6 @@ class ContextNode
} }
$code_base = $this->code_base; $code_base = $this->code_base;
$constant_name_lower = \strtolower($constant_name);
if ($constant_name_lower === 'true' || $constant_name_lower === 'false' || $constant_name_lower === 'null') {
return $code_base->getGlobalConstantByFQSEN(
// @phan-suppress-next-line PhanThrowTypeMismatchForCall
FullyQualifiedGlobalConstantName::fromFullyQualifiedString(
$constant_name_lower
)
);
}
$context = $this->context; $context = $this->context;
$flags = $node->children['name']->flags ?? 0; $flags = $node->children['name']->flags ?? 0;
try { try {
@@ -1834,6 +1821,18 @@ class ContextNode
} catch (FQSENException $e) { } catch (FQSENException $e) {
throw new AssertionError("Impossible FQSENException: " . $e->getMessage()); throw new AssertionError("Impossible FQSENException: " . $e->getMessage());
} }
// Handle true/false/null, even for edge cases such as `use const null as somethingelse;`
$fqsen_lower = \strtolower($fqsen->__toString());
if (\in_array($fqsen_lower, ['\true', '\false', '\null'], true)) {
return $code_base->getGlobalConstantByFQSEN(
// @phan-suppress-next-line PhanThrowTypeMismatchForCall
FullyQualifiedGlobalConstantName::fromFullyQualifiedString(
$fqsen_lower
)
);
}
// This is either a fully qualified constant, // This is either a fully qualified constant,
// or a relative constant for which nothing was found in the namespace // or a relative constant for which nothing was found in the namespace
@@ -1884,7 +1883,7 @@ class ContextNode
/** /**
* @throws IssueException * @throws IssueException
* @return no-return * @return never
*/ */
private function throwUndeclaredGlobalConstantIssueException(CodeBase $code_base, Context $context, FullyQualifiedGlobalConstantName $fqsen): void private function throwUndeclaredGlobalConstantIssueException(CodeBase $code_base, Context $context, FullyQualifiedGlobalConstantName $fqsen): void
{ {
@@ -57,6 +57,10 @@ class InferPureSnippetVisitor extends InferPureVisitor
} }
} }
/**
* @override
* @return never
*/
public function visitReturn(Node $node): void public function visitReturn(Node $node): void
{ {
throw new NodeException($node); throw new NodeException($node);
@@ -79,17 +83,29 @@ class InferPureSnippetVisitor extends InferPureVisitor
} }
} }
/**
* @override
* @return never
*/
public function visitYield(Node $node): void public function visitYield(Node $node): void
{ {
throw new NodeException($node); throw new NodeException($node);
} }
/**
* @override
* @return never
*/
public function visitYieldFrom(Node $node): void public function visitYieldFrom(Node $node): void
{ {
throw new NodeException($node); throw new NodeException($node);
} }
// TODO(optional) track actual goto labels // TODO(optional) track actual goto labels
/**
* @override
* @return never
*/
public function visitGoto(Node $node): void public function visitGoto(Node $node): void
{ {
throw new NodeException($node); throw new NodeException($node);
@@ -97,6 +113,10 @@ class InferPureSnippetVisitor extends InferPureVisitor
// NOTE: Checks of assignment, increment or decrement are deferred to --unused-variable-detection // NOTE: Checks of assignment, increment or decrement are deferred to --unused-variable-detection
/**
* @override
* @return never
*/
public function visitUnset(Node $node): void public function visitUnset(Node $node): void
{ {
throw new NodeException($node); throw new NodeException($node);
+5 -1
View File
@@ -105,6 +105,10 @@ class InferPureVisitor extends AnalysisVisitor
// visitEcho // visitEcho
// visitPrint // visitPrint
// visitIncludeOrExec // visitIncludeOrExec
/**
* @override
* @return never
*/
public function visit(Node $node): void public function visit(Node $node): void
{ {
throw new NodeException($node); throw new NodeException($node);
@@ -681,7 +685,7 @@ class InferPureVisitor extends AnalysisVisitor
public function visitClosure(Node $node): void public function visitClosure(Node $node): void
{ {
$closure_fqsen = FullyQualifiedFunctionName::fromClosureInContext( $closure_fqsen = FullyQualifiedFunctionName::fromClosureInContext(
(clone($this->context))->withLineNumberStart($node->lineno), (clone $this->context)->withLineNumberStart($node->lineno),
$node $node
); );
if (!$this->code_base->hasFunctionWithFQSEN($closure_fqsen)) { if (!$this->code_base->hasFunctionWithFQSEN($closure_fqsen)) {
@@ -67,32 +67,55 @@ class ScopeImpactCheckingVisitor extends InferPureVisitor
} }
} }
/** @override */ /**
* @override
* @return never
*/
public function visitContinue(Node $node): void public function visitContinue(Node $node): void
{ {
throw new NodeException($node); throw new NodeException($node);
} }
/**
* @override
* @return never
*/
public function visitBreak(Node $node): void public function visitBreak(Node $node): void
{ {
throw new NodeException($node); throw new NodeException($node);
} }
/**
* @override
* @return never
*/
public function visitPreInc(Node $node): void public function visitPreInc(Node $node): void
{ {
throw new NodeException($node); throw new NodeException($node);
} }
/**
* @override
* @return never
*/
public function visitPreDec(Node $node): void public function visitPreDec(Node $node): void
{ {
throw new NodeException($node); throw new NodeException($node);
} }
/**
* @override
* @return never
*/
public function visitPostInc(Node $node): void public function visitPostInc(Node $node): void
{ {
throw new NodeException($node); throw new NodeException($node);
} }
/**
* @override
* @return never
*/
public function visitPostDec(Node $node): void public function visitPostDec(Node $node): void
{ {
throw new NodeException($node); throw new NodeException($node);
@@ -110,25 +133,37 @@ class ScopeImpactCheckingVisitor extends InferPureVisitor
$this->visitVar($var); $this->visitVar($var);
} }
/** @override */ /**
* @override
* @return never
*/
public function visitGoto(Node $node): void public function visitGoto(Node $node): void
{ {
throw new NodeException($node); throw new NodeException($node);
} }
/** @override */ /**
* @override
* @return never
*/
public function visitAssignOp(Node $node): void public function visitAssignOp(Node $node): void
{ {
throw new NodeException($node); throw new NodeException($node);
} }
/** @override */ /**
* @override
* @return never
*/
public function visitAssign(Node $node): void public function visitAssign(Node $node): void
{ {
throw new NodeException($node); throw new NodeException($node);
} }
/** @override */ /**
* @override
* @return never
*/
public function visitReturn(Node $node): void public function visitReturn(Node $node): void
{ {
throw new NodeException($node); throw new NodeException($node);
@@ -65,7 +65,18 @@ Shim::load();
* each time they are invoked, * each time they are invoked,
* so it's possible to have multiple callers use this without affecting each other. * so it's possible to have multiple callers use this without affecting each other.
* *
* Compatibility: PHP 7.0-7.4 * Compatibility: PHP 7.0-8.1
*
* XXX: This aims to match the line numbers that php-ast would generate (for compatibility) where reasonable,
* even when counterintuitive. See https://github.com/phan/phan/issues/4520
*
* - The way php (and as a result php-ast) is getting the line number for anything
* that has 1 or more children is to use the line number of the first non-null child.
* (skipping most tokens such as `[`, `return`, etc, and having a line number for literal
* values (php-ast does not wrap the AST_ZVAL type php uses internally in a Node)
* - If there are no non-null child nodes, then php uses the current line number of the lexer.
*
* which are the line numbers php uses in
* *
* ---------------------------------------------------------------------------- * ----------------------------------------------------------------------------
* *
@@ -114,7 +125,7 @@ class TolerantASTConverter
public const AST_VERSION = 85; public const AST_VERSION = 85;
// The versions that this supports // The versions that this supports
public const SUPPORTED_AST_VERSIONS = [self::AST_VERSION]; public const SUPPORTED_AST_VERSIONS = [80, self::AST_VERSION];
private const _IGNORED_STRING_TOKEN_KIND_SET = [ private const _IGNORED_STRING_TOKEN_KIND_SET = [
TokenKind::OpenBraceDollarToken => true, TokenKind::OpenBraceDollarToken => true,
@@ -449,7 +460,7 @@ class TolerantASTConverter
} }
if (!\is_int($lineno)) { if (!\is_int($lineno)) {
foreach ($parser_nodes as $parser_node) { foreach ($parser_nodes as $parser_node) {
$child_node_line = static::getEndLine($parser_node); $child_node_line = static::getStartLine($parser_node);
if ($child_node_line > 0) { if ($child_node_line > 0) {
$lineno = $child_node_line; $lineno = $child_node_line;
break; break;
@@ -871,12 +882,14 @@ class TolerantASTConverter
return $str; return $str;
}, },
/** /**
* @return never
* @throws InvalidNodeException * @throws InvalidNodeException
*/ */
'Microsoft\PhpParser\MissingToken' => static function (PhpParser\MissingToken $unused_node, int $_): void { 'Microsoft\PhpParser\MissingToken' => static function (PhpParser\MissingToken $unused_node, int $_): void {
throw new InvalidNodeException(); throw new InvalidNodeException();
}, },
/** /**
* @return never
* @throws InvalidNodeException * @throws InvalidNodeException
*/ */
'Microsoft\PhpParser\SkippedToken' => static function (PhpParser\SkippedToken $unused_node, int $_): void { 'Microsoft\PhpParser\SkippedToken' => static function (PhpParser\SkippedToken $unused_node, int $_): void {
@@ -1003,11 +1016,12 @@ class TolerantASTConverter
return new ast\Node($type, 0, ['var' => static::phpParserNodeToAstNode($n->operand)], $start_line); return new ast\Node($type, 0, ['var' => static::phpParserNodeToAstNode($n->operand)], $start_line);
}, },
'Microsoft\PhpParser\Node\Expression\PrintIntrinsicExpression' => static function (PhpParser\Node\Expression\PrintIntrinsicExpression $n, int $start_line): ast\Node { 'Microsoft\PhpParser\Node\Expression\PrintIntrinsicExpression' => static function (PhpParser\Node\Expression\PrintIntrinsicExpression $n, int $start_line): ast\Node {
$expr_node = static::phpParserNodeToAstNode($n->expression);
return new ast\Node( return new ast\Node(
ast\AST_PRINT, ast\AST_PRINT,
0, 0,
['expr' => static::phpParserNodeToAstNode($n->expression)], ['expr' => $expr_node],
$start_line $expr_node->lineno ?? (self::getStartLine($n->expression) ?: $start_line)
); );
}, },
/** @return ?ast\Node */ /** @return ?ast\Node */
@@ -1076,14 +1090,17 @@ class TolerantASTConverter
$ast_expr = ($element_value !== null && !($element_value instanceof MissingToken)) ? static::phpParserNodeToAstNode($array_element->elementValue) : null; $ast_expr = ($element_value !== null && !($element_value instanceof MissingToken)) ? static::phpParserNodeToAstNode($array_element->elementValue) : null;
if ($kind === \ast\AST_YIELD) { if ($kind === \ast\AST_YIELD) {
$element_key = $array_element->elementKey ?? null; $element_key = $array_element->elementKey ?? null;
$key = $element_key !== null ? static::phpParserNodeToAstNode($element_key) : null;
$children = [ $children = [
'value' => $ast_expr, 'value' => $ast_expr,
'key' => $element_key !== null ? static::phpParserNodeToAstNode($element_key) : null, 'key' => $key,
]; ];
$start_line = $key->lineno ?? $ast_expr->lineno ?? $start_line;
} else { } else {
$children = [ $children = [
'expr' => $ast_expr, 'expr' => $ast_expr,
]; ];
$start_line = $ast_expr->lineno ?? $start_line;
} }
return new ast\Node( return new ast\Node(
$kind, $kind,
@@ -1233,6 +1250,7 @@ class TolerantASTConverter
$kind = $n->breakOrContinueKeyword->kind === TokenKind::ContinueKeyword ? ast\AST_CONTINUE : ast\AST_BREAK; $kind = $n->breakOrContinueKeyword->kind === TokenKind::ContinueKeyword ? ast\AST_CONTINUE : ast\AST_BREAK;
$breakout_level = $n->breakoutLevel; $breakout_level = $n->breakoutLevel;
if ($breakout_level !== null) { if ($breakout_level !== null) {
$start_line = self::getStartLine($breakout_level);
$breakout_level = static::phpParserNodeToAstNode($breakout_level); $breakout_level = static::phpParserNodeToAstNode($breakout_level);
if (!\is_int($breakout_level)) { if (!\is_int($breakout_level)) {
$breakout_level = null; $breakout_level = null;
@@ -1254,8 +1272,8 @@ class TolerantASTConverter
$catch_list_node, $catch_list_node,
$variableName !== null ? static::variableTokenToString($variableName) : null, $variableName !== null ? static::variableTokenToString($variableName) : null,
// @phan-suppress-next-line PhanTypeMismatchArgumentNullable return_null_on_empty is false. // @phan-suppress-next-line PhanTypeMismatchArgumentNullable return_null_on_empty is false.
static::phpParserStmtlistToAstNode($n->compoundStatement, $start_line, false), static::phpParserStmtlistToAstNode($n->compoundStatement, self::getStartLine($n->compoundStatement) ?: $start_line, false),
$start_line $variableName !== null ? self::getStartLine($variableName) : $start_line
); );
}, },
'Microsoft\PhpParser\Node\Statement\InterfaceDeclaration' => static function (PhpParser\Node\Statement\InterfaceDeclaration $n, int $start_line): ast\Node { 'Microsoft\PhpParser\Node\Statement\InterfaceDeclaration' => static function (PhpParser\Node\Statement\InterfaceDeclaration $n, int $start_line): ast\Node {
@@ -1421,10 +1439,12 @@ class TolerantASTConverter
if ($expr instanceof Token && $expr->kind === TokenKind::CommaToken) { if ($expr instanceof Token && $expr->kind === TokenKind::CommaToken) {
continue; continue;
} }
$expr_node = static::phpParserNodeToAstNode($expr);
$start_line = ($expr_node->lineno ?? self::getStartLine($expr)) ?: $start_line;
$ast_echos[] = new ast\Node( $ast_echos[] = new ast\Node(
ast\AST_ECHO, ast\AST_ECHO,
0, 0,
['expr' => static::phpParserNodeToAstNode($expr)], ['expr' => $expr_node],
$start_line $start_line
); );
} }
@@ -1525,7 +1545,7 @@ class TolerantASTConverter
ast\AST_ECHO, ast\AST_ECHO,
0, 0,
['expr' => static::tokenToRawString($n->text)], ['expr' => static::tokenToRawString($n->text)],
$start_line self::getStartLine($n->text) ?: $start_line
); );
}, },
/** @suppress PhanTypeMismatchArgument TODO: Make ForStatement have more accurate docs? */ /** @suppress PhanTypeMismatchArgument TODO: Make ForStatement have more accurate docs? */
@@ -1586,7 +1606,7 @@ class TolerantASTConverter
'Microsoft\PhpParser\Node\Statement\ReturnStatement' => static function (PhpParser\Node\Statement\ReturnStatement $n, int $start_line): ast\Node { 'Microsoft\PhpParser\Node\Statement\ReturnStatement' => static function (PhpParser\Node\Statement\ReturnStatement $n, int $start_line): ast\Node {
$e = $n->expression; $e = $n->expression;
$expr_node = $e !== null ? static::phpParserNodeToAstNode($e) : null; $expr_node = $e !== null ? static::phpParserNodeToAstNode($e) : null;
return new ast\Node(ast\AST_RETURN, 0, ['expr' => $expr_node], $start_line); return new ast\Node(ast\AST_RETURN, 0, ['expr' => $expr_node], $expr_node->lineno ?? $start_line);
}, },
/** @return ast\Node|ast\Node[] */ /** @return ast\Node|ast\Node[] */
'Microsoft\PhpParser\Node\Statement\FunctionStaticDeclaration' => static function (PhpParser\Node\Statement\FunctionStaticDeclaration $n, int $start_line) { 'Microsoft\PhpParser\Node\Statement\FunctionStaticDeclaration' => static function (PhpParser\Node\Statement\FunctionStaticDeclaration $n, int $start_line) {
@@ -1712,8 +1732,8 @@ class TolerantASTConverter
return static::astNodeTry( return static::astNodeTry(
// @phan-suppress-next-line PhanTypeMismatchArgumentNullable return_null_on_empty is false. // @phan-suppress-next-line PhanTypeMismatchArgumentNullable return_null_on_empty is false.
static::phpParserStmtlistToAstNode($n->compoundStatement, $start_line, false), // $n->try static::phpParserStmtlistToAstNode($n->compoundStatement, $start_line, false), // $n->try
static::phpParserCatchlistToAstCatchlist($n->catchClauses ?? [], $start_line), static::phpParserCatchlistToAstCatchlist($n->catchClauses ?? [], self::getEndLine($n->compoundStatement) ?: $start_line),
$finally_clause !== null ? static::phpParserStmtlistToAstNode($finally_clause->compoundStatement, self::getStartLine($finally_clause), false) : null, $finally_clause !== null ? static::phpParserStmtlistToAstNode($finally_clause->compoundStatement, self::getStartLine($finally_clause->compoundStatement), false) : null,
$start_line $start_line
); );
}, },
@@ -1824,7 +1844,7 @@ class TolerantASTConverter
foreach ($catches as $parser_catch) { foreach ($catches as $parser_catch) {
$children[] = static::phpParserNonValueNodeToAstNode($parser_catch); $children[] = static::phpParserNonValueNodeToAstNode($parser_catch);
} }
return new ast\Node(ast\AST_CATCH_LIST, 0, $children, $children[0]->lineno ?? $lineno); return new ast\Node(ast\AST_CATCH_LIST, 0, $children, $lineno);
} }
/** /**
@@ -2405,11 +2425,12 @@ class TolerantASTConverter
if (!$expression) { if (!$expression) {
throw new InvalidNodeException(); throw new InvalidNodeException();
} }
$expr_node = static::phpParserNodeToAstNode($expression);
return new ast\Node( return new ast\Node(
ast\AST_THROW, ast\AST_THROW,
0, 0,
['expr' => static::phpParserNodeToAstNode($expression)], ['expr' => $expr_node],
$start_line $expr_node->lineno ?? $start_line
); );
} }
@@ -2630,21 +2651,23 @@ class TolerantASTConverter
private static function phpParserIfStmtToAstIfStmt(PhpParser\Node\Statement\IfStatementNode $node, int $start_line): ast\Node private static function phpParserIfStmtToAstIfStmt(PhpParser\Node\Statement\IfStatementNode $node, int $start_line): ast\Node
{ {
$if_elem_expr = static::phpParserNodeToAstNode($node->expression);
$if_elem = static::astIfElem( $if_elem = static::astIfElem(
static::phpParserNodeToAstNode($node->expression), $if_elem_expr,
// @phan-suppress-next-line PhanTypeMismatchArgumentNullable return_null_on_empty is false. // @phan-suppress-next-line PhanTypeMismatchArgumentNullable return_null_on_empty is false.
static::phpParserStmtlistToAstNode( static::phpParserStmtlistToAstNode(
$node->statements, $node->statements,
self::getStartLineOfStatementOrStatements($node->statements) ?: $start_line, self::getStartLineOfStatementOrStatements($node->statements) ?: $start_line,
false false
), ),
$start_line $if_elem_expr->lineno ?? (self::getStartLine($node->expression) ?: $start_line)
); );
$if_elems = [$if_elem]; $if_elems = [$if_elem];
foreach ($node->elseIfClauses as $else_if) { foreach ($node->elseIfClauses as $else_if) {
$if_elem_line = self::getStartLine($else_if); $else_if_node = static::phpParserNodeToAstNode($else_if->expression);
$if_elem_line = $else_if_node->lineno ?? (self::getStartLine($else_if->expression) ?: $start_line);
$if_elem = static::astIfElem( $if_elem = static::astIfElem(
static::phpParserNodeToAstNode($else_if->expression), $else_if_node,
// @phan-suppress-next-line PhanTypeMismatchArgumentNullable return_null_on_empty is false. // @phan-suppress-next-line PhanTypeMismatchArgumentNullable return_null_on_empty is false.
static::phpParserStmtlistToAstNode( static::phpParserStmtlistToAstNode(
$else_if->statements, $else_if->statements,
@@ -2664,7 +2687,7 @@ class TolerantASTConverter
$parser_else_line $parser_else_line
); );
} }
return new ast\Node(ast\AST_IF, 0, $if_elems, $start_line); return new ast\Node(ast\AST_IF, 0, $if_elems, $if_elems[0]->lineno);
} }
/** /**
@@ -2843,8 +2866,13 @@ class TolerantASTConverter
$line = $prop_elems[0]->lineno ?? (self::getStartLine($n) ?: $start_line); $line = $prop_elems[0]->lineno ?? (self::getStartLine($n) ?: $start_line);
$prop_decl = new ast\Node(ast\AST_PROP_DECL, 0, $prop_elems, $line); $prop_decl = new ast\Node(ast\AST_PROP_DECL, 0, $prop_elems, $line);
$type_line = static::getEndLine($n->typeDeclarationList) ?: $start_line; $type_line = static::getEndLine($n->typeDeclarationList) ?: $start_line;
$type = static::phpParserUnionTypeToAstNode($n->typeDeclarationList, $type_line);
if ($n->questionToken !== null && $type !== null) {
$type = new ast\Node(ast\AST_NULLABLE_TYPE, 0, ['type' => $type], $start_line);
}
return new ast\Node(ast\AST_PROP_GROUP, $flags, [ return new ast\Node(ast\AST_PROP_GROUP, $flags, [
'type' => static::phpParserUnionTypeToAstNode($n->typeDeclarationList, $type_line), 'type' => $type,
'props' => $prop_decl, 'props' => $prop_decl,
'attributes' => static::phpParserAttributeGroupsToAstAttributeList($n->attributes), 'attributes' => static::phpParserAttributeGroupsToAstAttributeList($n->attributes),
], $line); ], $line);
+35 -30
View File
@@ -412,42 +412,47 @@ class Analysis
} }
} }
foreach ($plugin_set->getAnalyzeFunctionCallClosures($code_base) as $fqsen_string => $closure) { // To fix issues such as https://github.com/phan/phan/issues/4090, this (1) always calls addFunctionCallAnalyzer,
try { // and (2) automatically loads definitions for functions and methods by calling hasFunctionWithFQSEN (etc.), so that internal function definitions used by previous plugins can be iterated over by the next plugin being called (e.g. if getFunctionSet is called).
if (\strpos($fqsen_string, '::') !== false) { // @phan-suppress-next-line PhanAccessMethodInternal
// This is an override of a method. foreach ($plugin_set->getAnalyzeFunctionCallPluginSet() as $plugin) {
[$class, $method_name] = \explode('::', $fqsen_string, 2); foreach ($plugin->getAnalyzeFunctionCallClosures($code_base) as $fqsen_string => $closure) {
$class_fqsen = FullyQualifiedClassName::fromFullyQualifiedString($class); try {
if (!$code_base->hasClassWithFQSEN($class_fqsen)) { if (\strpos($fqsen_string, '::') !== false) {
continue; // This is an override of a method.
} [$class, $method_name] = \explode('::', $fqsen_string, 2);
$class = $code_base->getClassByFQSEN($class_fqsen); $class_fqsen = FullyQualifiedClassName::fromFullyQualifiedString($class);
// Note: This is used because it will create methods such as __construct if they do not exist. if (!$code_base->hasClassWithFQSEN($class_fqsen)) {
if ($class->hasMethodWithName($code_base, $method_name, false)) {
$method = $class->getMethodByName($code_base, $method_name);
$method->addFunctionCallAnalyzer($closure);
$methods_by_defining_fqsen = $methods_by_defining_fqsen ?? $code_base->getMethodsMapGroupedByDefiningFQSEN();
$fqsen = FullyQualifiedMethodName::fromFullyQualifiedString($fqsen_string);
if (!$methods_by_defining_fqsen->offsetExists($fqsen)) {
continue; continue;
} }
$class = $code_base->getClassByFQSEN($class_fqsen);
// Note: This is used because it will create methods such as __construct if they do not exist.
if ($class->hasMethodWithName($code_base, $method_name, false)) {
$method = $class->getMethodByName($code_base, $method_name);
$method->addFunctionCallAnalyzer($closure, $plugin);
foreach ($methods_by_defining_fqsen->offsetGet($fqsen) as $child_method) { $methods_by_defining_fqsen = $methods_by_defining_fqsen ?? $code_base->getMethodsMapGroupedByDefiningFQSEN();
$child_method->addFunctionCallAnalyzer($closure); $fqsen = FullyQualifiedMethodName::fromFullyQualifiedString($fqsen_string);
if (!$methods_by_defining_fqsen->offsetExists($fqsen)) {
continue;
}
foreach ($methods_by_defining_fqsen->offsetGet($fqsen) as $child_method) {
$child_method->addFunctionCallAnalyzer($closure, $plugin);
}
}
} else {
// This is a function.
$fqsen = FullyQualifiedFunctionName::fromFullyQualifiedString($fqsen_string);
if ($code_base->hasFunctionWithFQSEN($fqsen)) {
$function = $code_base->getFunctionByFQSEN($fqsen);
$function->addFunctionCallAnalyzer($closure, $plugin);
} }
} }
} else { } catch (FQSENException | InvalidArgumentException $e) {
// This is an override of a function. // @phan-suppress-next-line PhanPluginRemoveDebugCall
$fqsen = FullyQualifiedFunctionName::fromFullyQualifiedString($fqsen_string); \fprintf(STDERR, "getAnalyzeFunctionCallClosures returned an invalid FQSEN %s: %s\n", $fqsen_string, $e->getMessage());
if ($code_base->hasFunctionWithFQSEN($fqsen)) {
$function = $code_base->getFunctionByFQSEN($fqsen);
$function->setFunctionCallAnalyzer($closure);
}
} }
} catch (FQSENException | InvalidArgumentException $e) {
// @phan-suppress-next-line PhanPluginRemoveDebugCall
\fprintf(STDERR, "getAnalyzeFunctionCallClosures returned an invalid FQSEN %s: %s\n", $fqsen_string, $e->getMessage());
} }
} }
} }
@@ -330,7 +330,7 @@ class AssignOperatorAnalysisVisitor extends FlagVisitorImplementation
// If both left and right are arrays, then this is array // If both left and right are arrays, then this is array
// concatenation. // concatenation.
if ($left->isGenericArray() && $right->isGenericArray()) { if ($left->isArray() && $right->isArray()) {
BinaryOperatorFlagVisitor::checkInvalidArrayShapeCombination($code_base, $context, $node, $left, $right); BinaryOperatorFlagVisitor::checkInvalidArrayShapeCombination($code_base, $context, $node, $left, $right);
if ($left->isEqualTo($right)) { if ($left->isEqualTo($right)) {
return $left; return $left;
@@ -283,7 +283,7 @@ class AssignOperatorFlagVisitor extends FlagVisitorImplementation
// If both left and right are arrays, then this is array // If both left and right are arrays, then this is array
// concatenation. // concatenation.
if ($left->isGenericArray() && $right->isGenericArray()) { if ($left->isArray() && $right->isArray()) {
if ($left->isEqualTo($right)) { if ($left->isEqualTo($right)) {
return $left; return $left;
} }
@@ -89,10 +89,11 @@ final class BinaryOperatorFlagVisitor extends FlagVisitorImplementation
/** /**
* @throws AssertionError * @throws AssertionError
* @suppress PhanUnreferencedPrivateMethod this is referenced by __invoke * @suppress PhanUnreferencedPrivateMethod this is referenced by __invoke
* @return never
*/ */
private function handleMissing(Node $node): void private function handleMissing(Node $node): void
{ {
throw new AssertionError("All flags must match. Found kind=" . Debug::nodeName($node) . ', flags=' . Element::flagDescription($node) . ' raw flags=' . $node->flags . ' at ' . $this->context->withLineNumberStart((int)$node->lineno)); throw new AssertionError("All flags must match. Found kind=" . Debug::nodeName($node) . ', flags=' . Element::flagDescription($node) . ' raw flags=' . $node->flags . ' at ' . (clone $this->context)->withLineNumberStart((int)$node->lineno));
} }
/** /**
@@ -751,7 +752,7 @@ final class BinaryOperatorFlagVisitor extends FlagVisitorImplementation
// If both left and right union types are arrays, then this is array // If both left and right union types are arrays, then this is array
// concatenation. (`$left + $right`) // concatenation. (`$left + $right`)
if ($left->isGenericArray() && $right->isGenericArray()) { if ($left->isArray() && $right->isArray()) {
self::checkInvalidArrayShapeCombination($code_base, $context, $node, $left, $right); self::checkInvalidArrayShapeCombination($code_base, $context, $node, $left, $right);
if ($left->isEqualTo($right)) { if ($left->isEqualTo($right)) {
return $left; return $left;
@@ -44,11 +44,17 @@ final class BlockExitStatusChecker extends KindVisitorImplementation
public const STATUS_CONTINUE = (1 << 22); // At least one branch leads to a continue statement public const STATUS_CONTINUE = (1 << 22); // At least one branch leads to a continue statement
public const STATUS_BREAK = (1 << 23); // At least one branch leads to a break statement public const STATUS_BREAK = (1 << 23); // At least one branch leads to a break statement
public const STATUS_THROW = (1 << 24); // At least one branch leads to a throw statement public const STATUS_THROW = (1 << 24); // At least one branch leads to a throw statement
public const STATUS_RETURN = (1 << 25); // At least one branch leads to a return/exit() statement (or an infinite loop) public const STATUS_RETURN = (1 << 25); // At least one branch leads to a return statement
public const STATUS_NORETURN = (1 << 26); // At least one branch leads to a exit() statement (or an infinite loop)
public const STATUS_THROW_OR_RETURN_BITMASK = public const STATUS_THROW_OR_RETURN_BITMASK =
self::STATUS_THROW | self::STATUS_THROW |
self::STATUS_RETURN; self::STATUS_RETURN |
self::STATUS_NORETURN;
public const STATUS_NOT_RETURN_BITMASK =
self::STATUS_THROW |
self::STATUS_NORETURN;
// Any status which doesn't lead to proceeding. // Any status which doesn't lead to proceeding.
public const STATUS_NOT_PROCEED_BITMASK = public const STATUS_NOT_PROCEED_BITMASK =
@@ -56,7 +62,8 @@ final class BlockExitStatusChecker extends KindVisitorImplementation
self::STATUS_CONTINUE | self::STATUS_CONTINUE |
self::STATUS_BREAK | self::STATUS_BREAK |
self::STATUS_THROW | self::STATUS_THROW |
self::STATUS_RETURN; self::STATUS_RETURN |
self::STATUS_NORETURN;
public const STATUS_BITMASK = public const STATUS_BITMASK =
self::STATUS_PROCEED | self::STATUS_PROCEED |
@@ -475,7 +482,7 @@ final class BlockExitStatusChecker extends KindVisitorImplementation
{ {
$status = $inner_status & ~self::UNEXITABLE_LOOP_INNER_STATUS; $status = $inner_status & ~self::UNEXITABLE_LOOP_INNER_STATUS;
if ($status === 0) { if ($status === 0) {
return self::STATUS_RETURN; // this is an infinite loop, it didn't contain break/throw/return statements? return self::STATUS_NORETURN; // this is an infinite loop, it didn't contain break/throw/return statements?
} }
if (($status & self::STATUS_BREAK) !== 0) { if (($status & self::STATUS_BREAK) !== 0) {
// if the inside of "while (true) {} contains a break statement, // if the inside of "while (true) {} contains a break statement,
@@ -500,7 +507,7 @@ final class BlockExitStatusChecker extends KindVisitorImplementation
*/ */
public function visitExit(Node $node): int public function visitExit(Node $node): int
{ {
return self::STATUS_RETURN; return self::STATUS_NORETURN;
} }
/** /**
@@ -628,10 +635,14 @@ final class BlockExitStatusChecker extends KindVisitorImplementation
return self::STATUS_PROCEED; return self::STATUS_PROCEED;
} }
// The returned code for exit() is 'return', e.g. E_USER_ERROR makes trigger_error emit an error then abort execution. // The returned code for exit() is 'return', e.g. E_USER_ERROR makes trigger_error emit an error then abort execution.
if (\in_array($name, ['E_ERROR', 'E_PARSE', 'E_CORE_ERROR', 'E_COMPILE_ERROR', 'E_USER_ERROR'], true)) { // NOTE: Native errors either emit a notice about being invalid error types to pass to this function (e.g. E_ERROR).
return self::STATUS_RETURN; // must be one of E_USER_ERROR, E_USER_WARNING, E_USER_NOTICE, or E_USER_DEPRECATED
if ($name === 'E_USER_ERROR') {
// Fatal error
return self::STATUS_NORETURN;
} }
if ($name === 'E_RECOVERABLE_ERROR') { if (!\in_array($name, ['E_USER_WARNING', 'E_USER_NOTICE', 'E_USER_DEPRECATED'], true)) {
// Newer php versions throw a ValueError for invalid types.
return self::STATUS_THROW; return self::STATUS_THROW;
} }
@@ -804,6 +815,14 @@ final class BlockExitStatusChecker extends KindVisitorImplementation
return ((new self())->__invoke($node) & ~self::STATUS_THROW_OR_RETURN_BITMASK) === 0; return ((new self())->__invoke($node) & ~self::STATUS_THROW_OR_RETURN_BITMASK) === 0;
} }
/**
* Will the node $node unconditionally throw or exit (or infinitely loop)
*/
public static function willUnconditionallyNeverReturn(Node $node): bool
{
return ((new self())->__invoke($node) & ~self::STATUS_NOT_RETURN_BITMASK) === 0;
}
/** /**
* Will the node $node unconditionally proceed (no break/continue, throw, or goto) * Will the node $node unconditionally proceed (no break/continue, throw, or goto)
*/ */
+2 -1
View File
@@ -87,7 +87,8 @@ class CompositionAnalyzer
} catch (IssueException $_) { } catch (IssueException $_) {
$inherited_property_union_type = UnionType::empty(); $inherited_property_union_type = UnionType::empty();
} }
if (!$property->isDynamicOrFromPHPDoc()) { // Don't complain about incompatible types if the base property is private, #4426
if (!$property->isDynamicOrFromPHPDoc() && !$inherited_property->isPrivate()) {
$real_property_type = $property->getRealUnionType()->asNormalizedTypes(); $real_property_type = $property->getRealUnionType()->asNormalizedTypes();
$real_inherited_property_type = $inherited_property->getRealUnionType()->asNormalizedTypes(); $real_inherited_property_type = $inherited_property->getRealUnionType()->asNormalizedTypes();
if (!$real_property_type->isEqualTo($real_inherited_property_type)) { if (!$real_property_type->isEqualTo($real_inherited_property_type)) {
+51 -1
View File
@@ -879,7 +879,7 @@ class ConditionVisitor extends KindVisitorImplementation implements ConditionVis
$method = new ReflectionMethod(UnionType::class, $extract_types); $method = new ReflectionMethod(UnionType::class, $extract_types);
/** /**
* @param list<Node|mixed> $args * @param list<Node|mixed> $args
* @suppress PhanPluginUnknownObjectMethodCall can't analye ReflectionMethod * @suppress PhanPluginUnknownObjectMethodCall can't analyze ReflectionMethod
*/ */
return static function (CodeBase $code_base, Context $context, Variable $variable, array $args) use ($method, $default_if_empty, $allow_undefined): void { return static function (CodeBase $code_base, Context $context, Variable $variable, array $args) use ($method, $default_if_empty, $allow_undefined): void {
// Change the type to match the is_a relationship // Change the type to match the is_a relationship
@@ -1052,6 +1052,9 @@ class ConditionVisitor extends KindVisitorImplementation implements ConditionVis
case 'array_key_exists': case 'array_key_exists':
// @phan-suppress-next-line PhanPartialTypeMismatchArgument // @phan-suppress-next-line PhanPartialTypeMismatchArgument
return $this->analyzeArrayKeyExists($args); return $this->analyzeArrayKeyExists($args);
case 'in_array':
// @phan-suppress-next-line PhanPartialTypeMismatchArgument
return $this->analyzeInArray($args);
case 'defined': case 'defined':
// @phan-suppress-next-line PhanPartialTypeMismatchArgument // @phan-suppress-next-line PhanPartialTypeMismatchArgument
return $this->analyzeDefined($args); return $this->analyzeDefined($args);
@@ -1148,6 +1151,53 @@ class ConditionVisitor extends KindVisitorImplementation implements ConditionVis
); );
} }
/**
* @param list<Node|string|int|float> $args
*/
private function analyzeInArray(array $args): Context
{
$context = $this->context;
if (\count($args) < 2) {
return $context;
}
// in_array($var, $array, [bool]) asserts that $var is a type found in the elements of $array
// It also asserts $array is not empty
$array_node = $args[1];
if (!$array_node instanceof Node) {
return $context;
}
if (\in_array($array_node->kind, [ast\AST_VAR, ast\AST_PROP, ast\AST_DIM], true)) {
// in_array implies the array has at least one element, implying it is not falsey.
$context = $this->updateVariableWithConditionalFilter(
$array_node,
$context,
static function (UnionType $_): bool {
return true;
},
static function (UnionType $type): UnionType {
return $type->arrayTypesStrictCast()->nonFalseyClone();
},
true,
false
);
}
$var_node = $args[0];
if (!($var_node instanceof Node)) {
return $context;
}
$array_value = UnionTypeVisitor::unionTypeFromNode($this->code_base, $this->context, $array_node)->arrayTypesStrictCastAllowEmpty();
if ($array_value->isEmptyOrMixed()) {
return $context;
}
$element_type = $array_value->genericArrayElementTypes(true, $this->code_base);
if ($element_type->isEmptyOrMixed()) {
return $context;
}
$is_strict = isset($args[2]) && UnionTypeVisitor::checkCondUnconditionalTruthiness($args[2]) === true;
return $this->updateVariableWithNewType($var_node, $context, $element_type, true, $is_strict);
}
/** /**
* @param list<Node|string|int|float> $args * @param list<Node|string|int|float> $args
*/ */
@@ -44,4 +44,9 @@ interface BinaryCondition
* @param Node|string|int|float $expr a node with a constant value * @param Node|string|int|float $expr a node with a constant value
*/ */
public function analyzeComplexCondition(ConditionVisitorInterface $visitor, Node $complex_node, $expr): ?Context; public function analyzeComplexCondition(ConditionVisitorInterface $visitor, Node $complex_node, $expr): ?Context;
/**
* @return static the same operation but to analyze flipped operand orders
*/
public function withFlippedOperands(): self;
} }
@@ -4,8 +4,12 @@ declare(strict_types=1);
namespace Phan\Analysis\ConditionVisitor; namespace Phan\Analysis\ConditionVisitor;
use ast;
use ast\Node; use ast\Node;
use Phan\Analysis\ConditionVisitorInterface; use Phan\Analysis\ConditionVisitorInterface;
use Phan\Analysis\ConditionVisitor;
use Phan\Analysis\NegatedConditionVisitor;
use Phan\AST\UnionTypeVisitor;
use Phan\Language\Context; use Phan\Language\Context;
/** /**
@@ -50,9 +54,49 @@ class ComparisonCondition implements BinaryCondition
*/ */
public function analyzeCall(ConditionVisitorInterface $visitor, Node $call_node, $expr): ?Context public function analyzeCall(ConditionVisitorInterface $visitor, Node $call_node, $expr): ?Context
{ {
$function_name = ConditionVisitor::getFunctionName($call_node);
if (\is_string($function_name) && \strcasecmp($function_name, 'count') === 0) {
$code_base = $visitor->getCodeBase();
$context = $visitor->getContext();
$value = UnionTypeVisitor::unionTypeFromNode($code_base, $context, $expr)->asSingleScalarValueOrNullOrSelf();
if (\is_object($value) || $value < 0) {
return null;
}
if ($this->assertsPositiveNumber($value)) {
// e.g. `if (is_string($x) === true)`
return (new ConditionVisitor($code_base, $context))->visitCall($call_node);
} elseif ($this->assertsZeroOrLess($value)) {
return (new NegatedConditionVisitor($code_base, $context))->visitCall($call_node);
}
}
return null; return null;
} }
/**
* @param bool|int|float|string|null $value
*/
private function assertsPositiveNumber($value): bool {
if ($this->flags === ast\flags\BINARY_IS_GREATER) {
return $value > 0;
} elseif ($this->flags === ast\flags\BINARY_IS_GREATER_OR_EQUAL) {
return $value >= 0;
}
return false;
}
/**
* @param bool|int|float|string|null $value
*/
private function assertsZeroOrLess($value): bool {
if ($this->flags === ast\flags\BINARY_IS_SMALLER) {
return $value > 0 && $value <= 1;
} elseif ($this->flags === ast\flags\BINARY_IS_SMALLER_OR_EQUAL) {
// @phan-suppress-next-line PhanPluginComparisonNotStrictForScalar, PhanSuspiciousTruthyString
return $value == 0 && $value <= 0;
}
return false;
}
/** /**
* @suppress PhanUnusedPublicMethodParameter * @suppress PhanUnusedPublicMethodParameter
*/ */
@@ -60,4 +104,20 @@ class ComparisonCondition implements BinaryCondition
{ {
return null; return null;
} }
private const FLIP_OPERANDS = [
ast\flags\BINARY_IS_GREATER => ast\flags\BINARY_IS_SMALLER,
ast\flags\BINARY_IS_GREATER_OR_EQUAL => ast\flags\BINARY_IS_SMALLER_OR_EQUAL,
ast\flags\BINARY_IS_SMALLER => ast\flags\BINARY_IS_GREATER,
ast\flags\BINARY_IS_SMALLER_OR_EQUAL => ast\flags\BINARY_IS_GREATER_OR_EQUAL,
];
/**
* @return static
*/
public function withFlippedOperands(): BinaryCondition
{
$flipped = self::FLIP_OPERANDS[$this->flags] ?? null;
return isset($flipped) ? new self($flipped) : $this;
}
} }
@@ -39,7 +39,7 @@ class EqualsCondition implements BinaryCondition
return $visitor->analyzeClassAssertion($object, $expr) ?? $visitor->getContext(); return $visitor->analyzeClassAssertion($object, $expr) ?? $visitor->getContext();
} }
public function analyzeCall(ConditionVisitorInterface $visitor, Node $call_node, $expr): ?Context public function analyzeCall(ConditionVisitorInterface $visitor, Node $call_node, $expr, bool $negate = false): ?Context
{ {
$code_base = $visitor->getCodeBase(); $code_base = $visitor->getCodeBase();
$context = $visitor->getContext(); $context = $visitor->getContext();
@@ -48,20 +48,27 @@ class EqualsCondition implements BinaryCondition
return null; return null;
} }
// Skip check for `if is_bool`, allow weaker comparisons such as `is_string($x) == 1` // Skip check for `if is_bool`, allow weaker comparisons such as `is_string($x) == 1`
if (!$expr_type->isExclusivelyBoolTypes() && !UnionTypeVisitor::unionTypeFromNode($code_base, $context, $call_node)->isExclusivelyBoolTypes()) { $function_name = ConditionVisitor::getFunctionName($call_node);
if (\is_string($function_name) && \strcasecmp($function_name, 'count') === 0) {
if ($negate && $expr_type->containsTruthy()) {
// Currently can't infer anything from `if (count($x) != 2)`
return null;
}
// Fall through
} elseif (!$expr_type->isExclusivelyBoolTypes() && !UnionTypeVisitor::unionTypeFromNode($code_base, $context, $call_node)->isExclusivelyBoolTypes()) {
return null; return null;
} }
if (!$expr_type->containsFalsey()) { if ($negate ? !$expr_type->containsTruthy() : !$expr_type->containsFalsey()) {
// e.g. `if (is_string($x) === true)` // e.g. `if (is_string($x) == true)`, or negated equals check such as `if (is_string($x) != false)`
return (new ConditionVisitor($code_base, $context))->visitCall($call_node); return (new ConditionVisitor($code_base, $context))->visitCall($call_node);
} elseif (!$expr_type->containsTruthy()) { } elseif ($negate ? !$expr_type->containsFalsey() : !$expr_type->containsTruthy()) {
// e.g. `if (is_string($x) === false)` // e.g. `if (is_string($x) == false)`
return (new NegatedConditionVisitor($code_base, $context))->visitCall($call_node); return (new NegatedConditionVisitor($code_base, $context))->visitCall($call_node);
} }
return null; return null;
} }
public function analyzeComplexCondition(ConditionVisitorInterface $visitor, Node $complex_node, $expr): ?Context public function analyzeComplexCondition(ConditionVisitorInterface $visitor, Node $complex_node, $expr, bool $negate = false): ?Context
{ {
$code_base = $visitor->getCodeBase(); $code_base = $visitor->getCodeBase();
$context = $visitor->getContext(); $context = $visitor->getContext();
@@ -69,13 +76,19 @@ class EqualsCondition implements BinaryCondition
if (!$expr_type->isExclusivelyBoolTypes() && !UnionTypeVisitor::unionTypeFromNode($code_base, $context, $complex_node)->isExclusivelyBoolTypes()) { if (!$expr_type->isExclusivelyBoolTypes() && !UnionTypeVisitor::unionTypeFromNode($code_base, $context, $complex_node)->isExclusivelyBoolTypes()) {
return null; return null;
} }
if (!$expr_type->containsFalsey()) { if ($negate ? !$expr_type->containsTruthy() : !$expr_type->containsFalsey()) {
// e.g. `if (($x instanceof Xyz) == true)` // e.g. `if (($x instanceof Xyz) == true)`
return (new ConditionVisitor($code_base, $context))->__invoke($complex_node); return (new ConditionVisitor($code_base, $context))->__invoke($complex_node);
} elseif (!$expr_type->containsTruthy()) { } elseif ($negate ? !$expr_type->containsFalsey() : !$expr_type->containsTruthy()) {
// e.g. `if (($x instanceof Xyz) == false)` // e.g. `if (($x instanceof Xyz) == false)`
return (new NegatedConditionVisitor($code_base, $context))->__invoke($complex_node); return (new NegatedConditionVisitor($code_base, $context))->__invoke($complex_node);
} }
return null; return null;
} }
/** @return static */
public function withFlippedOperands(): BinaryCondition
{
return $this;
}
} }
@@ -87,4 +87,10 @@ class HasTypeCondition implements BinaryCondition
// TODO: Could analyze get_class($array['field']) === stdClass::class (e.g. with AssignmentVisitor) // TODO: Could analyze get_class($array['field']) === stdClass::class (e.g. with AssignmentVisitor)
return null; return null;
} }
/** @return static */
public function withFlippedOperands(): BinaryCondition
{
return $this;
}
} }
@@ -10,6 +10,7 @@ use Phan\Analysis\ConditionVisitorInterface;
use Phan\Analysis\NegatedConditionVisitor; use Phan\Analysis\NegatedConditionVisitor;
use Phan\AST\UnionTypeVisitor; use Phan\AST\UnionTypeVisitor;
use Phan\Language\Context; use Phan\Language\Context;
use Phan\Language\UnionType;
/** /**
* This represents an identical assertion implementation acting on two sides of a condition (===) * This represents an identical assertion implementation acting on two sides of a condition (===)
@@ -39,19 +40,27 @@ class IdenticalCondition implements BinaryCondition
return $visitor->analyzeClassAssertion($object, $expr) ?? $visitor->getContext(); return $visitor->analyzeClassAssertion($object, $expr) ?? $visitor->getContext();
} }
public function analyzeCall(ConditionVisitorInterface $visitor, Node $call_node, $expr): ?Context public function analyzeCall(ConditionVisitorInterface $visitor, Node $call_node, $expr, bool $negate = false): ?Context
{ {
if (!$expr instanceof Node) {
// Cannot be false/true.
return null;
}
$code_base = $visitor->getCodeBase(); $code_base = $visitor->getCodeBase();
$context = $visitor->getContext(); $context = $visitor->getContext();
$value = UnionTypeVisitor::unionTypeFromNode($code_base, $context, $expr)->asSingleScalarValueOrNullOrSelf(); $value = UnionTypeVisitor::unionTypeFromNode($code_base, $context, $expr)->asSingleScalarValueOrNullOrSelf();
if (!\is_bool($value)) { if ($value instanceof UnionType) {
return null; return null;
} }
if ($value) { $function_name = ConditionVisitor::getFunctionName($call_node);
if (\is_string($function_name) && \strcasecmp($function_name, 'count') === 0) {
if (!\is_int($value)) {
return null;
}
if ($negate && $value !== 0) {
// Phan currently can't infer anything from `count($x) !== 2`.
return null;
}
} elseif (!\is_bool($value)) {
return null;
}
if ($value xor $negate) { // logical xor
// e.g. `if (is_string($x) === true)` // e.g. `if (is_string($x) === true)`
return (new ConditionVisitor($code_base, $context))->visitCall($call_node); return (new ConditionVisitor($code_base, $context))->visitCall($call_node);
} else { } else {
@@ -60,7 +69,7 @@ class IdenticalCondition implements BinaryCondition
} }
} }
public function analyzeComplexCondition(ConditionVisitorInterface $visitor, Node $complex_node, $expr): ?Context public function analyzeComplexCondition(ConditionVisitorInterface $visitor, Node $complex_node, $expr, bool $negate = false): ?Context
{ {
if (!$expr instanceof Node) { if (!$expr instanceof Node) {
return null; return null;
@@ -71,7 +80,7 @@ class IdenticalCondition implements BinaryCondition
if (!\is_bool($value)) { if (!\is_bool($value)) {
return null; return null;
} }
if ($value) { if ($value xor $negate) { // logical xor
// e.g. `if (is_string($x) === true)` // e.g. `if (is_string($x) === true)`
return (new ConditionVisitor($code_base, $context))->__invoke($complex_node); return (new ConditionVisitor($code_base, $context))->__invoke($complex_node);
} else { } else {
@@ -79,4 +88,10 @@ class IdenticalCondition implements BinaryCondition
return (new NegatedConditionVisitor($code_base, $context))->__invoke($complex_node); return (new NegatedConditionVisitor($code_base, $context))->__invoke($complex_node);
} }
} }
/** @return static */
public function withFlippedOperands(): BinaryCondition
{
return $this;
}
} }
@@ -5,10 +5,7 @@ declare(strict_types=1);
namespace Phan\Analysis\ConditionVisitor; namespace Phan\Analysis\ConditionVisitor;
use ast\Node; use ast\Node;
use Phan\Analysis\ConditionVisitor;
use Phan\Analysis\ConditionVisitorInterface; use Phan\Analysis\ConditionVisitorInterface;
use Phan\Analysis\NegatedConditionVisitor;
use Phan\AST\UnionTypeVisitor;
use Phan\Language\Context; use Phan\Language\Context;
/** /**
@@ -43,37 +40,17 @@ class NotEqualsCondition implements BinaryCondition
public function analyzeCall(ConditionVisitorInterface $visitor, Node $call_node, $expr): ?Context public function analyzeCall(ConditionVisitorInterface $visitor, Node $call_node, $expr): ?Context
{ {
$code_base = $visitor->getCodeBase(); return (new EqualsCondition())->analyzeCall($visitor, $call_node, $expr, true);
$context = $visitor->getContext();
$expr_type = UnionTypeVisitor::unionTypeFromNode($code_base, $context, $expr);
if (!$expr_type->isExclusivelyBoolTypes() && !UnionTypeVisitor::unionTypeFromNode($code_base, $context, $call_node)->isExclusivelyBoolTypes()) {
return null;
}
if (!$expr_type->containsFalsey()) {
// e.g. `if (is_string($x) != true)`
return (new NegatedConditionVisitor($code_base, $context))->visitCall($call_node);
} elseif (!$expr_type->containsTruthy()) {
// e.g. `if (is_string($x) != false)`
return (new ConditionVisitor($code_base, $context))->visitCall($call_node);
}
return null;
} }
public function analyzeComplexCondition(ConditionVisitorInterface $visitor, Node $complex_node, $expr): ?Context public function analyzeComplexCondition(ConditionVisitorInterface $visitor, Node $complex_node, $expr): ?Context
{ {
$code_base = $visitor->getCodeBase(); return (new EqualsCondition())->analyzeComplexCondition($visitor, $complex_node, $expr, true);
$context = $visitor->getContext(); }
$expr_type = UnionTypeVisitor::unionTypeFromNode($code_base, $context, $expr);
if (!$expr_type->isExclusivelyBoolTypes() && !UnionTypeVisitor::unionTypeFromNode($code_base, $context, $complex_node)->isExclusivelyBoolTypes()) { /** @return static */
return null; public function withFlippedOperands(): BinaryCondition
} {
if (!$expr_type->containsFalsey()) { return $this;
// e.g. `if (($x instanceof Xyz) != true)`
return (new NegatedConditionVisitor($code_base, $context))->__invoke($complex_node);
} elseif (!$expr_type->containsTruthy()) {
// e.g. `if (($x instanceof Xyz) != false)`
return (new ConditionVisitor($code_base, $context))->__invoke($complex_node);
}
return null;
} }
} }
@@ -89,4 +89,10 @@ class NotHasTypeCondition implements BinaryCondition
// TODO: Could analyze get_class($array['field']) === stdClass::class (e.g. with AssignmentVisitor) // TODO: Could analyze get_class($array['field']) === stdClass::class (e.g. with AssignmentVisitor)
return null; return null;
} }
/** @return static */
public function withFlippedOperands(): BinaryCondition
{
return $this;
}
} }
@@ -5,10 +5,7 @@ declare(strict_types=1);
namespace Phan\Analysis\ConditionVisitor; namespace Phan\Analysis\ConditionVisitor;
use ast\Node; use ast\Node;
use Phan\Analysis\ConditionVisitor;
use Phan\Analysis\ConditionVisitorInterface; use Phan\Analysis\ConditionVisitorInterface;
use Phan\Analysis\NegatedConditionVisitor;
use Phan\AST\UnionTypeVisitor;
use Phan\Language\Context; use Phan\Language\Context;
/** /**
@@ -42,41 +39,17 @@ class NotIdenticalCondition implements BinaryCondition
public function analyzeCall(ConditionVisitorInterface $visitor, Node $call_node, $expr): ?Context public function analyzeCall(ConditionVisitorInterface $visitor, Node $call_node, $expr): ?Context
{ {
if (!$expr instanceof Node) { return (new IdenticalCondition())->analyzeCall($visitor, $call_node, $expr, true);
return null;
}
$code_base = $visitor->getCodeBase();
$context = $visitor->getContext();
$value = UnionTypeVisitor::unionTypeFromNode($code_base, $context, $expr)->asSingleScalarValueOrNullOrSelf();
if (!\is_bool($value)) {
return null;
}
if ($value) {
// e.g. `if (!(is_string($x) === true))`
return (new NegatedConditionVisitor($code_base, $context))->visitCall($call_node);
} else {
// e.g. `if (!(is_string($x) === false))`
return (new ConditionVisitor($code_base, $context))->visitCall($call_node);
}
} }
public function analyzeComplexCondition(ConditionVisitorInterface $visitor, Node $complex_node, $expr): ?Context public function analyzeComplexCondition(ConditionVisitorInterface $visitor, Node $complex_node, $expr): ?Context
{ {
if (!$expr instanceof Node) { return (new IdenticalCondition())->analyzeComplexCondition($visitor, $complex_node, $expr, true);
return null; }
}
$code_base = $visitor->getCodeBase(); /** @return static */
$context = $visitor->getContext(); public function withFlippedOperands(): BinaryCondition
$value = UnionTypeVisitor::unionTypeFromNode($code_base, $context, $expr)->asSingleScalarValueOrNullOrSelf(); {
if (!\is_bool($value)) { return $this;
return null;
}
if ($value) {
// e.g. `if (($x instanceof Xyz) !== true)`
return (new NegatedConditionVisitor($code_base, $context))->__invoke($complex_node);
} else {
// e.g. `if (($x instanceof Xyz) !== false)`
return (new ConditionVisitor($code_base, $context))->__invoke($complex_node);
}
} }
} }
+26 -1
View File
@@ -30,6 +30,7 @@ use Phan\Language\Element\Variable;
use Phan\Language\FQSEN\FullyQualifiedClassName; use Phan\Language\FQSEN\FullyQualifiedClassName;
use Phan\Language\Type; use Phan\Language\Type;
use Phan\Language\Type\ArrayShapeType; use Phan\Language\Type\ArrayShapeType;
use Phan\Language\Type\ArrayType;
use Phan\Language\Type\FalseType; use Phan\Language\Type\FalseType;
use Phan\Language\Type\IntType; use Phan\Language\Type\IntType;
use Phan\Language\Type\IterableType; use Phan\Language\Type\IterableType;
@@ -392,6 +393,24 @@ trait ConditionVisitorUtil
); );
} }
final protected function removeEmptyArrayFromVariable(Node $var_node, Context $context): Context
{
return $this->updateVariableWithConditionalFilter(
$var_node,
$context,
static function (UnionType $type): bool {
return $type->hasArray();
},
static function (UnionType $type): UnionType {
return $type->asMappedUnionType(static function (Type $type): Type {
return $type instanceof ArrayType ? $type->asNonFalseyType() : $type;
});
},
true,
false
);
}
/** /**
* Returns the type after removing all types that are empty or don't support property or array access * Returns the type after removing all types that are empty or don't support property or array access
* @param 1|2|3|4 $access_type ConditionVisitor::ACCESS_IS_* * @param 1|2|3|4 $access_type ConditionVisitor::ACCESS_IS_*
@@ -1034,6 +1053,8 @@ trait ConditionVisitorUtil
return $this->removeTrueFromVariable($var_node, $context); return $this->removeTrueFromVariable($var_node, $context);
} elseif ($value === null) { } elseif ($value === null) {
return $this->removeNullFromVariable($var_node, $context, false); return $this->removeNullFromVariable($var_node, $context, false);
} elseif ($value === []) {
return $this->removeEmptyArrayFromVariable($var_node, $context);
} }
} else { } else {
return $this->removeLiteralScalarFromVariable($var_node, $context, $expr, true); return $this->removeLiteralScalarFromVariable($var_node, $context, $expr, true);
@@ -1070,6 +1091,8 @@ trait ConditionVisitorUtil
return $this->removeFalseyFromVariable($var_node, $context, false); return $this->removeFalseyFromVariable($var_node, $context, false);
} elseif ($expr === true) { } elseif ($expr === true) {
return $this->removeTrueFromVariable($var_node, $context); return $this->removeTrueFromVariable($var_node, $context);
} elseif ($expr === []) {
return $this->removeEmptyArrayFromVariable($var_node, $context);
} }
} }
// Remove all of the types which are loosely equal // Remove all of the types which are loosely equal
@@ -1149,7 +1172,7 @@ trait ConditionVisitorUtil
} }
} }
if ($right instanceof Node) { if ($right instanceof Node) {
$result = $this->analyzeBinaryConditionSide($right, $left, $condition); $result = $this->analyzeBinaryConditionSide($right, $left, $condition->withFlippedOperands());
if ($result !== null) { if ($result !== null) {
return $result; return $result;
} }
@@ -1398,6 +1421,8 @@ trait ConditionVisitorUtil
/** /**
* Fetches the function name. Does not check for function uses or namespaces. * Fetches the function name. Does not check for function uses or namespaces.
*
* TODO: Check for function uses
* @param Node $node a node of kind ast\AST_CALL * @param Node $node a node of kind ast\AST_CALL
* @return ?string (null if function name could not be found) * @return ?string (null if function name could not be found)
*/ */
@@ -23,6 +23,7 @@ use Phan\Language\Type;
use Phan\Language\Type\ArrayType; use Phan\Language\Type\ArrayType;
use Phan\Language\Type\FloatType; use Phan\Language\Type\FloatType;
use Phan\Language\Type\GenericArrayType; use Phan\Language\Type\GenericArrayType;
use Phan\Language\Type\IntersectionType;
use Phan\Language\Type\IntType; use Phan\Language\Type\IntType;
use Phan\Language\Type\IterableType; use Phan\Language\Type\IterableType;
use Phan\Language\Type\MixedType; use Phan\Language\Type\MixedType;
@@ -633,10 +634,12 @@ class NegatedConditionVisitor extends KindVisitorImplementation implements Condi
})->asNormalizedTypes()); })->asNormalizedTypes());
}; };
/** @param list<Node|mixed> $unused_args */ /** @param list<Node|mixed> $unused_args */
$zero_count_callback = static function (CodeBase $unused_code_base, Context $unused_context, Variable $variable, array $unused_args): void { $zero_count_callback = static function (CodeBase $code_base, Context $context, Variable $variable, array $unused_args): void {
$variable->setUnionType($variable->getUnionType()->asMappedListUnionType(/** @return list<Type> */ static function (Type $type): array { $variable->setUnionType($variable->getUnionType()->asMappedListUnionType(/** @return list<Type> */ static function (Type $type) use ($code_base, $context): array {
if ($type->isPossiblyObject()) { if ($type->isPossiblyObject()) {
// TODO: Could cast iterable to Traversable|array{} if ($type->isObject()) {
return [IntersectionType::createFromTypes([$type, Type::countableInstance()], $code_base, $context)];
}
return [$type]; return [$type];
} }
if (!$type->isPossiblyFalsey()) { if (!$type->isPossiblyFalsey()) {
@@ -40,7 +40,6 @@ use Phan\Language\Element\Variable;
use Phan\Language\FQSEN\FullyQualifiedClassName; use Phan\Language\FQSEN\FullyQualifiedClassName;
use Phan\Language\FQSEN\FullyQualifiedGlobalConstantName; use Phan\Language\FQSEN\FullyQualifiedGlobalConstantName;
use Phan\Language\Type; use Phan\Language\Type;
use Phan\Language\Type\ArrayType;
use Phan\Language\Type\FalseType; use Phan\Language\Type\FalseType;
use Phan\Language\Type\GenericArrayType; use Phan\Language\Type\GenericArrayType;
use Phan\Language\Type\IntType; use Phan\Language\Type\IntType;
@@ -298,7 +297,7 @@ class PostOrderAnalysisVisitor extends AnalysisVisitor
} }
return $type; return $type;
}); });
$variable = clone($variable); $variable = clone $variable;
$context->addScopeVariable($variable); $context->addScopeVariable($variable);
$variable->setUnionType($union_type); $variable->setUnionType($union_type);
/* /*
@@ -308,7 +307,7 @@ class PostOrderAnalysisVisitor extends AnalysisVisitor
$union_type = $union_type->withoutType($type)->withType( $union_type = $union_type->withoutType($type)->withType(
GenericArrayType::fromElementType($type->genericArrayElementType(), false, $type->getKeyType()) GenericArrayType::fromElementType($type->genericArrayElementType(), false, $type->getKeyType())
); );
$variable = clone($variable); $variable = clone $variable;
$context->addScopeVariable($variable); $context->addScopeVariable($variable);
$variable->setUnionType($union_type); $variable->setUnionType($union_type);
} }
@@ -509,10 +508,7 @@ class PostOrderAnalysisVisitor extends AnalysisVisitor
); );
if (!$type->hasPrintableScalar()) { if (!$type->hasPrintableScalar()) {
if ($type->isType(ArrayType::instance(false)) if ($type->isArray()) {
|| $type->isType(ArrayType::instance(true))
|| $type->isGenericArray()
) {
$this->emitIssue( $this->emitIssue(
Issue::TypeConversionFromArray, Issue::TypeConversionFromArray,
$expr_node->lineno, $expr_node->lineno,
@@ -615,12 +611,15 @@ class PostOrderAnalysisVisitor extends AnalysisVisitor
} else { } else {
$scope = $this->context->getScope(); $scope = $this->context->getScope();
if (!$scope->hasGlobalVariableWithName($variable_name)) { if (!$scope->hasGlobalVariableWithName($variable_name)) {
$this->context->addGlobalScopeVariable(clone $variable); $actual_global_variable = clone $variable;
$this->context->addGlobalScopeVariable($actual_global_variable);
} else {
// TODO: Support @global?
$actual_global_variable = $scope->getGlobalVariableByName($variable_name);
} }
// TODO: Support @global? $scope_global_variable = $actual_global_variable instanceof GlobalVariable ? (clone $actual_global_variable) : new GlobalVariable($actual_global_variable);
$actual_global_variable = $scope->getGlobalVariableByName($variable_name); // Importing an undefined global by reference will make an undefined value a reference to null.
$scope_global_variable = $actual_global_variable instanceof GlobalVariable ? clone($actual_global_variable) : new GlobalVariable($actual_global_variable); $scope_global_variable->setUnionType($actual_global_variable->getUnionType()->eraseRealTypeSetRecursively()->withIsPossiblyUndefined(false));
$scope_global_variable->setUnionType($actual_global_variable->getUnionType()->eraseRealTypeSetRecursively());
} }
// Note that we're not creating a new scope, just // Note that we're not creating a new scope, just
@@ -660,6 +659,7 @@ class PostOrderAnalysisVisitor extends AnalysisVisitor
} }
// NOTE: Phan can't be sure that the type the static type starts with is the same as what it has later. Avoid false positive PhanRedundantCondition. // NOTE: Phan can't be sure that the type the static type starts with is the same as what it has later. Avoid false positive PhanRedundantCondition.
// This should never be undefined with current limits on expressions found in static variables.
$variable->setUnionType($default_type->eraseRealTypeSetRecursively()); $variable->setUnionType($default_type->eraseRealTypeSetRecursively());
// TODO: Probably not true in a loop? // TODO: Probably not true in a loop?
// TODO: Expand this to assigning to variables? (would need to make references invalidate that, and skip this in the global scope) // TODO: Expand this to assigning to variables? (would need to make references invalidate that, and skip this in the global scope)
@@ -706,10 +706,7 @@ class PostOrderAnalysisVisitor extends AnalysisVisitor
); );
if (!$type->hasPrintableScalar()) { if (!$type->hasPrintableScalar()) {
if ($type->isType(ArrayType::instance(false)) if ($type->isArray()) {
|| $type->isType(ArrayType::instance(true))
|| $type->isGenericArray()
) {
$this->emitIssue( $this->emitIssue(
Issue::TypeConversionFromArray, Issue::TypeConversionFromArray,
$expr_node->lineno ?? $node->lineno, $expr_node->lineno ?? $node->lineno,
@@ -1250,7 +1247,7 @@ class PostOrderAnalysisVisitor extends AnalysisVisitor
} catch (IssueException | NodeException $_) { } catch (IssueException | NodeException $_) {
return $this->context; return $this->context;
} }
$variable = clone($variable); $variable = clone $variable;
$variable->setUnionType($new_type); $variable->setUnionType($new_type);
$this->context->addScopeVariable($variable); $this->context->addScopeVariable($variable);
return $this->context; return $this->context;
@@ -1505,10 +1502,9 @@ class PostOrderAnalysisVisitor extends AnalysisVisitor
if (!$return_type->isEmpty() if (!$return_type->isEmpty()
&& !$func->hasReturn() && !$func->hasReturn()
&& !self::declOnlyThrows($node) && !self::declNeverReturns($node)
&& !$return_type->hasType(VoidType::instance(false)) && !$return_type->isNull()
&& !$return_type->hasType(NullType::instance(false)) && !$return_type->isNeverType()
&& !$return_type->hasType(NeverType::instance(false))
) { ) {
$this->warnTypeMissingReturn($func, $node); $this->warnTypeMissingReturn($func, $node);
} }
@@ -2001,7 +1997,7 @@ class PostOrderAnalysisVisitor extends AnalysisVisitor
RedundantCondition::emitInstance( RedundantCondition::emitInstance(
$expr, $expr,
$this->code_base, $this->code_base,
(clone($this->context))->withLineNumberStart($expr->lineno ?? $node->lineno), (clone $this->context)->withLineNumberStart($expr->lineno ?? $node->lineno),
Issue::EmptyYieldFrom, Issue::EmptyYieldFrom,
[(string)$yield_from_type], [(string)$yield_from_type],
Closure::fromCallable([BlockAnalysisVisitor::class, 'isEmptyIterable']) Closure::fromCallable([BlockAnalysisVisitor::class, 'isEmptyIterable'])
@@ -3029,9 +3025,10 @@ class PostOrderAnalysisVisitor extends AnalysisVisitor
&& !$has_interface_class && !$has_interface_class
&& !$return_type->isEmpty() && !$return_type->isEmpty()
&& !$method->hasReturn() && !$method->hasReturn()
&& !self::declOnlyThrows($node) && !self::declNeverReturns($node)
&& !$return_type->hasType(VoidType::instance(false)) && !$return_type->hasType(VoidType::instance(false))
&& !$return_type->hasType(NullType::instance(false)) && !$return_type->hasType(NullType::instance(false))
&& !$return_type->hasType(NeverType::instance(false))
) { ) {
$this->warnTypeMissingReturn($method, $node); $this->warnTypeMissingReturn($method, $node);
} }
@@ -3091,7 +3088,7 @@ class PostOrderAnalysisVisitor extends AnalysisVisitor
if (!$return_type->isEmpty() if (!$return_type->isEmpty()
&& !$function->hasReturn() && !$function->hasReturn()
&& !self::declOnlyThrows($node) && !self::declNeverReturns($node)
&& !$return_type->hasType(VoidType::instance(false)) && !$return_type->hasType(VoidType::instance(false))
&& !$return_type->hasType(NullType::instance(false)) && !$return_type->hasType(NullType::instance(false))
) { ) {
@@ -4204,7 +4201,7 @@ class PostOrderAnalysisVisitor extends AnalysisVisitor
if ($variable) { if ($variable) {
$set_variable_type = static function (UnionType $new_type) use ($code_base, $context, $variable, $argument): void { $set_variable_type = static function (UnionType $new_type) use ($code_base, $context, $variable, $argument): void {
if ($variable instanceof Variable) { if ($variable instanceof Variable) {
$variable = clone($variable); $variable = clone $variable;
AssignmentVisitor::analyzeSetUnionTypeInContext($code_base, $context, $variable, $new_type, $argument); AssignmentVisitor::analyzeSetUnionTypeInContext($code_base, $context, $variable, $new_type, $argument);
$context->addScopeVariable($variable); $context->addScopeVariable($variable);
} else { } else {
@@ -4349,12 +4346,12 @@ class PostOrderAnalysisVisitor extends AnalysisVisitor
} }
$original_method_scope = $method->getInternalScope(); $original_method_scope = $method->getInternalScope();
$method->setInternalScope(clone($original_method_scope)); $method->setInternalScope(clone $original_method_scope);
try { try {
// Even though we don't modify the parameter list, we still need to know the types // Even though we don't modify the parameter list, we still need to know the types
// -- as an optimization, we don't run quick mode again if the types didn't change? // -- as an optimization, we don't run quick mode again if the types didn't change?
$parameter_list = \array_map(static function (Parameter $parameter): Parameter { $parameter_list = \array_map(static function (Parameter $parameter): Parameter {
return clone($parameter); return clone $parameter;
}, $method->getParameterList()); }, $method->getParameterList());
foreach ($parameter_list as $i => $parameter_clone) { foreach ($parameter_list as $i => $parameter_clone) {
@@ -4436,7 +4433,7 @@ class PostOrderAnalysisVisitor extends AnalysisVisitor
): void { ): void {
$method = $this->findDefiningMethod($method); $method = $this->findDefiningMethod($method);
$original_method_scope = $method->getInternalScope(); $original_method_scope = $method->getInternalScope();
$method->setInternalScope(clone($original_method_scope)); $method->setInternalScope(clone $original_method_scope);
$method_context = $method->getContext(); $method_context = $method->getContext();
try { try {
@@ -5046,12 +5043,12 @@ class PostOrderAnalysisVisitor extends AnalysisVisitor
* @return bool * @return bool
* True when the decl can only throw an exception or return or exit() * True when the decl can only throw an exception or return or exit()
*/ */
private static function declOnlyThrows(Node $node): bool private static function declNeverReturns(Node $node): bool
{ {
// Work around fallback parser generating methods without statements list. // Work around fallback parser generating methods without statements list.
// Otherwise, 'stmts' would always be a Node due to preconditions. // Otherwise, 'stmts' would always be a Node due to preconditions.
$stmts_node = $node->children['stmts']; $stmts_node = $node->children['stmts'];
return $stmts_node instanceof Node && BlockExitStatusChecker::willUnconditionallyThrowOrReturn($stmts_node); return $stmts_node instanceof Node && BlockExitStatusChecker::willUnconditionallyNeverReturn($stmts_node);
} }
/** /**
+11 -4
View File
@@ -1177,7 +1177,7 @@ class BlockAnalysisVisitor extends AnalysisVisitor
RedundantCondition::emitInstance( RedundantCondition::emitInstance(
$node->children['expr'], $node->children['expr'],
$this->code_base, $this->code_base,
(clone($this->context))->withLineNumberStart($node->children['expr']->lineno ?? $node->lineno), (clone $this->context)->withLineNumberStart($node->children['expr']->lineno ?? $node->lineno),
Issue::EmptyForeach, Issue::EmptyForeach,
[(string)$union_type], [(string)$union_type],
Closure::fromCallable([self::class, 'isEmptyIterable']) Closure::fromCallable([self::class, 'isEmptyIterable'])
@@ -1188,7 +1188,7 @@ class BlockAnalysisVisitor extends AnalysisVisitor
RedundantCondition::emitInstance( RedundantCondition::emitInstance(
$node->children['expr'], $node->children['expr'],
$this->code_base, $this->code_base,
(clone($this->context))->withLineNumberStart($node->children['expr']->lineno ?? $node->lineno), (clone $this->context)->withLineNumberStart($node->children['expr']->lineno ?? $node->lineno),
Issue::EmptyForeachBody, Issue::EmptyForeachBody,
[(string)$union_type], [(string)$union_type],
Closure::fromCallable([self::class, 'isDefinitelyNotObject']) Closure::fromCallable([self::class, 'isDefinitelyNotObject'])
@@ -2535,6 +2535,13 @@ class BlockAnalysisVisitor extends AnalysisVisitor
// Step into each catch node and get an // Step into each catch node and get an
// updated context for the node // updated context for the node
$catch_context = $this->analyzeAndGetUpdatedContext($catch_context, $node, $catch_node); $catch_context = $this->analyzeAndGetUpdatedContext($catch_context, $node, $catch_node);
$catch_stmts_node = $catch_node->children['stmts'];
if ($catch_stmts_node instanceof Node && BlockExitStatusChecker::willUnconditionallySkipRemainingStatements($catch_stmts_node)) {
// e.g. "} catch (Exception $e) { break; }"
if (!BlockExitStatusChecker::willUnconditionallyThrowOrReturn($catch_stmts_node)) {
$this->recordLoopContextForBreakOrContinue($catch_context);
}
}
// NOTE: We let ContextMergeVisitor->mergeCatchContext decide if the block exit status is valid. // NOTE: We let ContextMergeVisitor->mergeCatchContext decide if the block exit status is valid.
$catch_context_list[] = $catch_context; $catch_context_list[] = $catch_context;
} }
@@ -2891,7 +2898,7 @@ class BlockAnalysisVisitor extends AnalysisVisitor
RedundantCondition::emitInstance( RedundantCondition::emitInstance(
$left_node, $left_node,
$this->code_base, $this->code_base,
(clone($context))->withLineNumberStart($node->lineno), (clone $context)->withLineNumberStart($node->lineno),
Issue::CoalescingNeverNull, Issue::CoalescingNeverNull,
[ [
ASTReverter::toShortString($left_node), ASTReverter::toShortString($left_node),
@@ -2907,7 +2914,7 @@ class BlockAnalysisVisitor extends AnalysisVisitor
RedundantCondition::emitInstance( RedundantCondition::emitInstance(
$left_node, $left_node,
$this->code_base, $this->code_base,
(clone($context))->withLineNumberStart($node->lineno), (clone $context)->withLineNumberStart($node->lineno),
Issue::CoalescingAlwaysNull, Issue::CoalescingAlwaysNull,
[ [
ASTReverter::toShortString($left_node), ASTReverter::toShortString($left_node),
+1
View File
@@ -214,6 +214,7 @@ if (!extension_loaded('filter') && !function_exists('filter_var')) {
/** /**
* Print more of the backtrace than is done by default * Print more of the backtrace than is done by default
* @suppress PhanAccessMethodInternal * @suppress PhanAccessMethodInternal
* @return never
*/ */
set_exception_handler(static function (Throwable $throwable): void { set_exception_handler(static function (Throwable $throwable): void {
fwrite(STDERR, "ERROR: $throwable\n"); fwrite(STDERR, "ERROR: $throwable\n");
+37 -29
View File
@@ -52,6 +52,7 @@ use function min;
use function phpversion; use function phpversion;
use function printf; use function printf;
use function shell_exec; use function shell_exec;
use function sprintf;
use function str_repeat; use function str_repeat;
use function strcasecmp; use function strcasecmp;
use function strlen; use function strlen;
@@ -82,7 +83,7 @@ class CLI
/** /**
* This should be updated to x.y.z-dev after every release, and x.y.z before a release. * This should be updated to x.y.z-dev after every release, and x.y.z before a release.
*/ */
public const PHAN_VERSION = '5.0.0'; public const PHAN_VERSION = '5.2.1';
/** /**
* List of short flags passed to getopt * List of short flags passed to getopt
@@ -518,7 +519,7 @@ class CLI
case 'output-mode': case 'output-mode':
if (!is_string($value) || !in_array($value, $factory->getTypes(), true)) { if (!is_string($value) || !in_array($value, $factory->getTypes(), true)) {
throw new UsageException( throw new UsageException(
\sprintf( sprintf(
'Unknown output mode %s. Known values are [%s]', 'Unknown output mode %s. Known values are [%s]',
StringUtil::jsonEncode($value), StringUtil::jsonEncode($value),
\implode(',', $factory->getTypes()) \implode(',', $factory->getTypes())
@@ -614,7 +615,7 @@ class CLI
case 'o': case 'o':
case 'output': case 'output':
if (!is_string($value)) { if (!is_string($value)) {
throw new UsageException(\sprintf("Invalid arguments to --output: args=%s\n", StringUtil::jsonEncode($value)), EXIT_FAILURE); throw new UsageException(sprintf("Invalid arguments to --output: args=%s\n", StringUtil::jsonEncode($value)), EXIT_FAILURE);
} }
$output_file = \fopen($value, 'w'); $output_file = \fopen($value, 'w');
if (!$output_file) { if (!$output_file) {
@@ -646,7 +647,7 @@ class CLI
case 'processes': case 'processes':
$processes = \filter_var($value, FILTER_VALIDATE_INT); $processes = \filter_var($value, FILTER_VALIDATE_INT);
if ($processes <= 0) { if ($processes <= 0) {
throw new UsageException(\sprintf("Invalid arguments to --processes: %s (expected a positive integer)\n", StringUtil::jsonEncode($value)), EXIT_FAILURE); throw new UsageException(sprintf("Invalid arguments to --processes: %s (expected a positive integer)\n", StringUtil::jsonEncode($value)), EXIT_FAILURE);
} }
Config::setValue('processes', $processes); Config::setValue('processes', $processes);
break; break;
@@ -690,7 +691,7 @@ class CLI
break; break;
case 'native-syntax-check': case 'native-syntax-check':
if ($value === '') { if ($value === '') {
throw new UsageException(\sprintf("Invalid arguments to --native-syntax-check: args=%s\n", StringUtil::jsonEncode($value)), EXIT_FAILURE); throw new UsageException(sprintf("Invalid arguments to --native-syntax-check: args=%s\n", StringUtil::jsonEncode($value)), EXIT_FAILURE);
} }
if (!is_array($value)) { if (!is_array($value)) {
$value = [$value]; $value = [$value];
@@ -741,11 +742,11 @@ class CLI
case 'daemonize-socket': case 'daemonize-socket':
self::checkCanDaemonize('unix', $key); self::checkCanDaemonize('unix', $key);
if (!is_string($value)) { if (!is_string($value)) {
throw new UsageException(\sprintf("Invalid arguments to --daemonize-socket: args=%s", StringUtil::jsonEncode($value)), EXIT_FAILURE); throw new UsageException(sprintf("Invalid arguments to --daemonize-socket: args=%s", StringUtil::jsonEncode($value)), EXIT_FAILURE);
} }
$socket_dirname = \realpath(\dirname($value)); $socket_dirname = \realpath(\dirname($value));
if (!is_string($socket_dirname) || !\file_exists($socket_dirname) || !\is_dir($socket_dirname)) { if (!is_string($socket_dirname) || !\file_exists($socket_dirname) || !\is_dir($socket_dirname)) {
$msg = \sprintf( $msg = sprintf(
'Requested to create Unix socket server in %s, but folder %s does not exist', 'Requested to create Unix socket server in %s, but folder %s does not exist',
StringUtil::jsonEncode($value), StringUtil::jsonEncode($value),
StringUtil::jsonEncode($socket_dirname) StringUtil::jsonEncode($socket_dirname)
@@ -1010,7 +1011,7 @@ class CLI
$resolved_binaries = []; $resolved_binaries = [];
foreach ($binaries as $binary) { foreach ($binaries as $binary) {
if ($binary === '') { if ($binary === '') {
throw new UsageException(\sprintf("Invalid arguments to --native-syntax-check: args=%s\n", StringUtil::jsonEncode($binaries)), EXIT_FAILURE); throw new UsageException(sprintf("Invalid arguments to --native-syntax-check: args=%s\n", StringUtil::jsonEncode($binaries)), EXIT_FAILURE);
} }
if (DIRECTORY_SEPARATOR === '\\') { if (DIRECTORY_SEPARATOR === '\\') {
$cmd = 'where ' . escapeshellarg($binary); $cmd = 'where ' . escapeshellarg($binary);
@@ -1019,10 +1020,10 @@ class CLI
} }
$resolved = trim((string) shell_exec($cmd)); $resolved = trim((string) shell_exec($cmd));
if ($resolved === '') { if ($resolved === '') {
throw new UsageException(\sprintf("Could not find PHP binary for --native-syntax-check: arg=%s\n", StringUtil::jsonEncode($binary)), EXIT_FAILURE); throw new UsageException(sprintf("Could not find PHP binary for --native-syntax-check: arg=%s\n", StringUtil::jsonEncode($binary)), EXIT_FAILURE);
} }
if (!is_executable($resolved)) { if (!is_executable($resolved)) {
throw new UsageException(\sprintf("PHP binary for --native-syntax-check is not executable: arg=%s\n", StringUtil::jsonEncode($binary)), EXIT_FAILURE); throw new UsageException(sprintf("PHP binary for --native-syntax-check is not executable: arg=%s\n", StringUtil::jsonEncode($binary)), EXIT_FAILURE);
} }
$resolved_binaries[] = $resolved; $resolved_binaries[] = $resolved;
} }
@@ -1124,7 +1125,7 @@ class CLI
} }
if ($valid_files === 0) { if ($valid_files === 0) {
// TODO convert this to an error in Phan 5. // TODO convert this to an error in Phan 5.
$error_message = \sprintf( $error_message = sprintf(
"None of the files to analyze in %s exist - This will be an error in future Phan releases." . PHP_EOL, "None of the files to analyze in %s exist - This will be an error in future Phan releases." . PHP_EOL,
Config::getProjectRootDirectory() Config::getProjectRootDirectory()
); );
@@ -1223,7 +1224,7 @@ class CLI
$details = ' (Referenced as ' . StringUtil::jsonEncode($plugin_path_or_name) . ')'; $details = ' (Referenced as ' . StringUtil::jsonEncode($plugin_path_or_name) . ')';
$details .= self::getPluginSuggestionText($plugin_path_or_name); $details .= self::getPluginSuggestionText($plugin_path_or_name);
} }
self::printErrorToStderr(\sprintf( self::printErrorToStderr(sprintf(
"Phan %s could not find plugin %s%s\n", "Phan %s could not find plugin %s%s\n",
CLI::PHAN_VERSION, CLI::PHAN_VERSION,
StringUtil::jsonEncode($plugin_file_name), StringUtil::jsonEncode($plugin_file_name),
@@ -1531,13 +1532,13 @@ $init_help
-b, --backward-compatibility-checks -b, --backward-compatibility-checks
Check for potential PHP 5 -> PHP 7 BC issues Check for potential PHP 5 -> PHP 7 BC issues
--target-php-version {7.0,7.1,7.2,7.3,7.4,8.0,native} --target-php-version {5.6,7.0,7.1,7.2,7.3,7.4,8.0,8.1,native}
The PHP version that the codebase will be checked for compatibility against. The PHP version that the codebase will be checked for compatibility against.
For best results, the PHP binary used to run Phan should have the same PHP version. For best results, the PHP binary used to run Phan should have the same PHP version.
(Phan relies on Reflection for some param counts (Phan relies on Reflection for some param counts
and checks for undefined classes/methods/functions) and checks for undefined classes/methods/functions)
--minimum-target-php-version {7.0,7.1,7.2,7.3,7.4,8.0,native} --minimum-target-php-version {5.6,7.0,7.1,7.2,7.3,7.4,8.0,8.1,native}
The PHP version that will be used for feature/syntax compatibility warnings. The PHP version that will be used for feature/syntax compatibility warnings.
-i, --ignore-undeclared -i, --ignore-undeclared
@@ -1945,7 +1946,7 @@ EOB
*/ */
public static function colorizeHelpSectionIfSupported(string $section): string public static function colorizeHelpSectionIfSupported(string $section): string
{ {
if (Config::getValue('color_issue_messages') ?? (!self::hasNoColorEnv() && self::supportsColor(\STDOUT))) { if (Config::getValue('color_issue_messages') ?? (!self::hasNoColorEnv() && \defined('STDOUT') && self::supportsColor(\STDOUT))) {
$section = self::colorizeHelpSection($section); $section = self::colorizeHelpSection($section);
} }
return $section; return $section;
@@ -2138,7 +2139,7 @@ EOB
} }
if (!$file_info->isReadable()) { if (!$file_info->isReadable()) {
$file_path = $file_info->getRealPath(); $file_path = $file_info->getRealPath();
CLI::printErrorToStderr("Unable to read file $file_path: SplFileInfo->isReadable() is false, getPerms()=" . \sprintf("%o(octal)", @$file_info->getPerms()) . "\n"); CLI::printErrorToStderr("Unable to read file $file_path: SplFileInfo->isReadable() is false, getPerms()=" . sprintf("%o(octal)", @$file_info->getPerms()) . "\n");
return false; return false;
} }
@@ -2148,7 +2149,7 @@ EOB
return false; return false;
} }
} catch (Exception $e) { } catch (Exception $e) {
CLI::printErrorToStderr(\sprintf("Unexpected error checking if %s should be parsed: %s %s\n", $file_info->getPathname(), \get_class($e), $e->getMessage())); CLI::printErrorToStderr(sprintf("Unexpected error checking if %s should be parsed: %s %s\n", $file_info->getPathname(), \get_class($e), $e->getMessage()));
return false; return false;
} }
@@ -2357,15 +2358,15 @@ EOB
$columns = self::getColumns(); $columns = self::getColumns();
$left_side = \str_pad($msg, 10, ' ', STR_PAD_LEFT) . ' '; $left_side = \str_pad($msg, 10, ' ', STR_PAD_LEFT) . ' ';
if ($columns - (60 + 10) > 19) { if ($columns - (60 + 10) > 19) {
$percent_progress = \sprintf('%1$ 5.1f', (int)(1000 * $p) / 10); $percent_progress = sprintf('%1$ 5.1f', (int)(1000 * $p) / 10);
} else { } else {
$percent_progress = \sprintf("%1$ 3d", (int)(100 * $p)); $percent_progress = sprintf("%1$ 3d", (int)(100 * $p));
} }
// Don't make the current memory usage in the progress bar shorter (avoid showing "MBB") // Don't make the current memory usage in the progress bar shorter (avoid showing "MBB")
$width = \max(2, strlen((string)(int)$peak)); $width = \max(2, strlen((string)(int)$peak));
$right_side = $right_side =
" " . $percent_progress . "%" . " " . $percent_progress . "%" .
\sprintf(' %' . $width . 'dMB/%' . $width . 'dMB', (int)$memory, (int)$peak); sprintf(' %' . $width . 'dMB/%' . $width . 'dMB', (int)$memory, (int)$peak);
// @phan-suppress-previous-line PhanPluginPrintfVariableFormatString // @phan-suppress-previous-line PhanPluginPrintfVariableFormatString
// strlen(" 99% 999MB/999MB") == 17 // strlen(" 99% 999MB/999MB") == 17
@@ -2415,7 +2416,7 @@ EOB
*/ */
public static function debugProgress(string $msg, float $p, $details): void public static function debugProgress(string $msg, float $p, $details): void
{ {
$pct = \sprintf("%d%%", (int)(100 * self::boundPercentage($p))); $pct = sprintf("%d%%", (int)(100 * self::boundPercentage($p)));
if ($details === null) { if ($details === null) {
return; return;
@@ -2578,7 +2579,7 @@ EOB
$buf .= str_repeat(" ", self::PROGRESS_WIDTH - $mod); $buf .= str_repeat(" ", self::PROGRESS_WIDTH - $mod);
} }
// @phan-suppress-next-line PhanPluginPrintfVariableFormatString // @phan-suppress-next-line PhanPluginPrintfVariableFormatString
$buf .= " " . \sprintf( $buf .= " " . sprintf(
"%" . strlen((string)(int)$count) . "d / %d (%3d%%) %.0fMB" . PHP_EOL, "%" . strlen((string)(int)$count) . "d / %d (%3d%%) %.0fMB" . PHP_EOL,
min(self::$current_progress_offset_long_progress, $count), min(self::$current_progress_offset_long_progress, $count),
(int)$count, (int)$count,
@@ -2593,7 +2594,7 @@ EOB
$buf .= self::colorizeProgressBarSegment(str_repeat($chr, $offset - self::$current_progress_offset_long_progress)); $buf .= self::colorizeProgressBarSegment(str_repeat($chr, $offset - self::$current_progress_offset_long_progress));
self::$current_progress_offset_long_progress = $offset; self::$current_progress_offset_long_progress = $offset;
if (self::$current_progress_offset_long_progress === self::PROGRESS_WIDTH) { if (self::$current_progress_offset_long_progress === self::PROGRESS_WIDTH) {
$buf .= ' ' . \sprintf("%.0fMB" . PHP_EOL, $memory); $buf .= ' ' . sprintf("%.0fMB" . PHP_EOL, $memory);
} }
} }
} }
@@ -2650,7 +2651,7 @@ EOB
if ($config_file_name !== false) { if ($config_file_name !== false) {
throw new UsageException("Could not find a config file at '$config_file_name', but --require-config-exists was set", EXIT_FAILURE, UsageException::PRINT_EXTENDED); throw new UsageException("Could not find a config file at '$config_file_name', but --require-config-exists was set", EXIT_FAILURE, UsageException::PRINT_EXTENDED);
} else { } else {
$msg = \sprintf( $msg = sprintf(
"Could not figure out the path for config file %s, but --require-config-exists was set", "Could not figure out the path for config file %s, but --require-config-exists was set",
StringUtil::encodeValue($this->config_file) StringUtil::encodeValue($this->config_file)
); );
@@ -2739,20 +2740,27 @@ EOB
if (\version_compare($ast_version, '1.0.0') <= 0) { if (\version_compare($ast_version, '1.0.0') <= 0) {
if ($ast_version === '') { if ($ast_version === '') {
// Seen in php 7.3 with file_cache when ast is initially enabled but later disabled, due to the result of extension_loaded being assumed to be a constant by opcache. // Seen in php 7.3 with file_cache when ast is initially enabled but later disabled, due to the result of extension_loaded being assumed to be a constant by opcache.
fwrite(STDERR, "ERROR: extension_loaded('ast') is true, but phpversion('ast') is the empty string. You probably need to clear opcache (opcache.file_cache='" . \ini_get('opcache.file_cache') . "')" . PHP_EOL); CLI::printErrorToStderr("ERROR: extension_loaded('ast') is true, but phpversion('ast') is the empty string. You probably need to clear opcache (opcache.file_cache='" . \ini_get('opcache.file_cache') . "')" . PHP_EOL);
} }
// NOTE: We haven't loaded the autoloader yet, so these issue messages can't be colorized. // NOTE: We haven't loaded the autoloader yet, so these issue messages can't be colorized.
\fprintf( CLI::printErrorToStderr(sprintf(
STDERR, "Phan 5.x requires php-ast %s+ because it depends on AST version 85. php-ast '%s' is installed." . PHP_EOL,
"ERROR: Phan 5.x requires php-ast %s+ because it depends on AST version 85. php-ast '%s' is installed." . PHP_EOL,
Config::MINIMUM_AST_EXTENSION_VERSION, Config::MINIMUM_AST_EXTENSION_VERSION,
$ast_version $ast_version
); ));
require_once __DIR__ . '/Bootstrap.php'; require_once __DIR__ . '/Bootstrap.php';
\phan_output_ast_installation_instructions(); \phan_output_ast_installation_instructions();
\fwrite(STDERR, "Exiting without analyzing files." . PHP_EOL); \fwrite(STDERR, "Exiting without analyzing files." . PHP_EOL);
exit(1); exit(1);
} }
if (\version_compare($ast_version, '1.0.11') < 0) {
CLI::printWarningToStderr(sprintf("php-ast %s is being used with Phan 5. php-ast 1.0.11 or newer is recommended for compatibility with plugins and support for AST version 85.\n", $ast_version));
// Reuse PHAN_SUPPRESS_AST_DEPRECATION for this purpose as well.
if (!getenv('PHAN_SUPPRESS_AST_DEPRECATION')) {
\phan_output_ast_installation_instructions();
fwrite(STDERR, "(Set PHAN_SUPPRESS_AST_DEPRECATION=1 to suppress this message)" . PHP_EOL);
}
}
} }
/** /**
+7 -3
View File
@@ -22,6 +22,10 @@ use const PHP_EOL;
use const PHP_VERSION; use const PHP_VERSION;
use const STDERR; use const STDERR;
/** @internal hack to use dynamic configuration in class constant */
\define('Phan\AST_VERSION', \version_compare(\phpversion('ast') ?: '1.0.14', '1.0.11') >= 0 || \PHP_VERSION_ID >= 80100 ? 85 : 80);
/** /**
* Program configuration. * Program configuration.
* *
@@ -41,12 +45,12 @@ class Config
* The version of the AST (defined in php-ast) that we're using. * The version of the AST (defined in php-ast) that we're using.
* @see https://github.com/nikic/php-ast#ast-versioning * @see https://github.com/nikic/php-ast#ast-versioning
*/ */
public const AST_VERSION = 85; public const AST_VERSION = namespace\AST_VERSION;
/** /**
* The minimum AST extension version in the oldest php version supported by Phan. * The minimum AST extension version in the oldest php version supported by Phan.
*/ */
public const MINIMUM_AST_EXTENSION_VERSION = '1.0.11'; public const MINIMUM_AST_EXTENSION_VERSION = namespace\AST_VERSION === 85 ? '1.0.11' : '1.0.7';
/** /**
* The version of the Phan plugin system. * The version of the Phan plugin system.
@@ -57,7 +61,7 @@ class Config
* New features increment minor versions, and bug fixes increment patch versions. * New features increment minor versions, and bug fixes increment patch versions.
* @suppress PhanUnreferencedPublicClassConstant * @suppress PhanUnreferencedPublicClassConstant
*/ */
public const PHAN_PLUGIN_VERSION = '3.4.0'; public const PHAN_PLUGIN_VERSION = '3.5.0';
/** /**
* @var string|null * @var string|null
+1 -1
View File
@@ -170,7 +170,7 @@ class Request
} }
/** /**
* @return void (unreachable) * @return never
* @throws ExitException to imitate an exit without actually exiting * @throws ExitException to imitate an exit without actually exiting
*/ */
public function exit(int $exit_code): void public function exit(int $exit_code): void
+10 -1
View File
@@ -650,6 +650,7 @@ class Issue
public const CommentDuplicateMagicMethod = 'PhanCommentDuplicateMagicMethod'; public const CommentDuplicateMagicMethod = 'PhanCommentDuplicateMagicMethod';
public const CommentDuplicateMagicProperty = 'PhanCommentDuplicateMagicProperty'; public const CommentDuplicateMagicProperty = 'PhanCommentDuplicateMagicProperty';
public const CommentObjectInClassConstantType = 'PhanCommentObjectInClassConstantType'; public const CommentObjectInClassConstantType = 'PhanCommentObjectInClassConstantType';
public const CommentUnsupportedUnionType = 'PhanCommentUnsupportedUnionType';
// phpcs:enable Generic.NamingConventions.UpperCaseConstantName.ClassConstantNotUpperCase // phpcs:enable Generic.NamingConventions.UpperCaseConstantName.ClassConstantNotUpperCase
// end of issue name constants // end of issue name constants
@@ -2082,7 +2083,7 @@ class Issue
new Issue( new Issue(
self::TypeNonVarPassByRef, self::TypeNonVarPassByRef,
self::CATEGORY_TYPE, self::CATEGORY_TYPE,
self::SEVERITY_NORMAL, self::SEVERITY_CRITICAL,
"Only variables can be passed by reference at argument {INDEX} of {FUNCTIONLIKE}", "Only variables can be passed by reference at argument {INDEX} of {FUNCTIONLIKE}",
self::REMEDIATION_B, self::REMEDIATION_B,
10018 10018
@@ -5586,6 +5587,14 @@ class Issue
self::REMEDIATION_B, self::REMEDIATION_B,
16021 16021
), ),
new Issue(
self::CommentUnsupportedUnionType,
self::CATEGORY_COMMENT,
self::SEVERITY_LOW,
"Saw a union type {TYPE} with more than 1 type in a location that does not support union types",
self::REMEDIATION_B,
16027
),
]; ];
// phpcs:enable Generic.Files.LineLength // phpcs:enable Generic.Files.LineLength
+1 -1
View File
@@ -121,7 +121,7 @@ class AnnotatedUnionType extends UnionType
{ {
$result = parent::__toString(); $result = parent::__toString();
if ($this->is_possibly_undefined) { if ($this->is_possibly_undefined) {
return $result . '='; return ($result !== '' ? $result : 'mixed') . '=';
} }
return $result; return $result;
} }
@@ -168,7 +168,7 @@ class ClassConstant extends ClassElement implements ConstantInterface
// show public class constants as 'const', not 'public const'. // show public class constants as 'const', not 'public const'.
// Also, PHP modules probably won't have private/protected constants. // Also, PHP modules probably won't have private/protected constants.
$string .= 'const ' . $this->name . ' = '; $string .= 'const ' . $this->name . ' = ';
$fqsen = $this->getFQSEN()->__toString(); $fqsen = $this->fqsen->__toString();
if (\defined($fqsen)) { if (\defined($fqsen)) {
// TODO: Could start using $this->getNodeForValue()? // TODO: Could start using $this->getNodeForValue()?
// NOTE: This is used by tool/make_stubs, which is why it uses reflection instead of getting a node. // NOTE: This is used by tool/make_stubs, which is why it uses reflection instead of getting a node.
+68 -60
View File
@@ -14,8 +14,8 @@ use Phan\Analysis\ClassInheritanceAnalyzer;
use Phan\Analysis\CompositionAnalyzer; use Phan\Analysis\CompositionAnalyzer;
use Phan\Analysis\DuplicateClassAnalyzer; use Phan\Analysis\DuplicateClassAnalyzer;
use Phan\Analysis\ParentConstructorCalledAnalyzer; use Phan\Analysis\ParentConstructorCalledAnalyzer;
use Phan\Analysis\PropertyTypesAnalyzer;
use Phan\Analysis\PostOrderAnalysisVisitor; use Phan\Analysis\PostOrderAnalysisVisitor;
use Phan\Analysis\PropertyTypesAnalyzer;
use Phan\AST\ASTReverter; use Phan\AST\ASTReverter;
use Phan\AST\UnionTypeVisitor; use Phan\AST\UnionTypeVisitor;
use Phan\CodeBase; use Phan\CodeBase;
@@ -71,6 +71,7 @@ use function strtolower;
* *
* @phan-file-suppress PhanPluginDescriptionlessCommentOnPublicMethod * @phan-file-suppress PhanPluginDescriptionlessCommentOnPublicMethod
* @phan-file-suppress PhanPluginNoCommentOnPublicMethod TODO: Add comments * @phan-file-suppress PhanPluginNoCommentOnPublicMethod TODO: Add comments
* @property FullyQualifiedClassName $fqsen
*/ */
class Clazz extends AddressableElement class Clazz extends AddressableElement
{ {
@@ -807,7 +808,7 @@ class Clazz extends AddressableElement
} }
$property_fqsen = FullyQualifiedPropertyName::make( $property_fqsen = FullyQualifiedPropertyName::make(
$this->getFQSEN(), $this->fqsen,
$property_name $property_name
); );
@@ -817,7 +818,7 @@ class Clazz extends AddressableElement
$property = clone($property); $property = clone($property);
$property->setFQSEN($property_fqsen); $property->setFQSEN($property_fqsen);
if ($property->hasStaticInUnionType()) { if ($property->hasStaticInUnionType()) {
$property->inheritStaticUnionType($original_property_fqsen->getFullyQualifiedClassName(), $this->getFQSEN()); $property->inheritStaticUnionType($original_property_fqsen->getFullyQualifiedClassName(), $this->fqsen);
} }
// Private properties of traits are accessible from the class that used that trait // Private properties of traits are accessible from the class that used that trait
@@ -918,7 +919,7 @@ class Clazz extends AddressableElement
if (count($magic_property_map) === 0) { if (count($magic_property_map) === 0) {
return true; // Vacuously true. return true; // Vacuously true.
} }
$class_fqsen = $this->getFQSEN(); $class_fqsen = $this->fqsen;
$context = $this->internal_context; $context = $this->internal_context;
foreach ($magic_property_map as $comment_parameter) { foreach ($magic_property_map as $comment_parameter) {
// $phan_flags can be used to indicate if something is property-read or property-write // $phan_flags can be used to indicate if something is property-read or property-write
@@ -931,7 +932,7 @@ class Clazz extends AddressableElement
$original_union_type = $comment_parameter->getUnionType(); $original_union_type = $comment_parameter->getUnionType();
$union_type = $original_union_type->withStaticResolvedInContext($context); $union_type = $original_union_type->withStaticResolvedInContext($context);
$property = new Property( $property = new Property(
(clone($context))->withLineNumberStart($comment_parameter->getLine()), (clone $context)->withLineNumberStart($comment_parameter->getLine()),
$property_name, $property_name,
$union_type, $union_type,
0, 0,
@@ -961,7 +962,7 @@ class Clazz extends AddressableElement
if (count($magic_method_map) === 0) { if (count($magic_method_map) === 0) {
return true; // Vacuously true. return true; // Vacuously true.
} }
$class_fqsen = $this->getFQSEN(); $class_fqsen = $this->fqsen;
$context = $this->internal_context; $context = $this->internal_context;
$is_pure = $this->isPure(); $is_pure = $this->isPure();
foreach ($magic_method_map as $comment_method) { foreach ($magic_method_map as $comment_method) {
@@ -980,7 +981,7 @@ class Clazz extends AddressableElement
$class_fqsen, $class_fqsen,
$method_name $method_name
); );
$method_context = (clone($context))->withLineNumberStart($comment_method->getLine()); $method_context = (clone $context)->withLineNumberStart($comment_method->getLine());
$real_parameter_list = \array_map(static function (\Phan\Language\Element\Comment\Parameter $parameter) use ($method_context): Parameter { $real_parameter_list = \array_map(static function (\Phan\Language\Element\Comment\Parameter $parameter) use ($method_context): Parameter {
return $parameter->asRealParameter($method_context); return $parameter->asRealParameter($method_context);
}, $comment_method->getParameterList()); }, $comment_method->getParameterList());
@@ -1012,7 +1013,7 @@ class Clazz extends AddressableElement
): bool { ): bool {
return $code_base->hasPropertyWithFQSEN( return $code_base->hasPropertyWithFQSEN(
FullyQualifiedPropertyName::make( FullyQualifiedPropertyName::make(
$this->getFQSEN(), $this->fqsen,
$name $name
) )
); );
@@ -1028,7 +1029,7 @@ class Clazz extends AddressableElement
): Property { ): Property {
return $code_base->getPropertyByFQSEN( return $code_base->getPropertyByFQSEN(
FullyQualifiedPropertyName::make( FullyQualifiedPropertyName::make(
$this->getFQSEN(), $this->fqsen,
$name $name
) )
); );
@@ -1066,7 +1067,7 @@ class Clazz extends AddressableElement
// Get the FQSEN of the property we're looking for // Get the FQSEN of the property we're looking for
$property_fqsen = FullyQualifiedPropertyName::make( $property_fqsen = FullyQualifiedPropertyName::make(
$this->getFQSEN(), $this->fqsen,
$name $name
); );
@@ -1233,7 +1234,7 @@ class Clazz extends AddressableElement
Issue::fromType(Issue::UndeclaredProperty)( Issue::fromType(Issue::UndeclaredProperty)(
$context->getFile(), $context->getFile(),
$context->getLineNumberStart(), $context->getLineNumberStart(),
[$this->getFQSEN() . ($is_static ? '::$' : '->') . $name], [$this->fqsen . ($is_static ? '::$' : '->') . $name],
IssueFixSuggester::suggestSimilarProperty($code_base, $context, $this, $name, $is_static) IssueFixSuggester::suggestSimilarProperty($code_base, $context, $this, $name, $is_static)
) )
); );
@@ -1461,7 +1462,7 @@ class Clazz extends AddressableElement
public function getPropertyMap(CodeBase $code_base): array public function getPropertyMap(CodeBase $code_base): array
{ {
return $code_base->getPropertyMapByFullyQualifiedClassName( return $code_base->getPropertyMapByFullyQualifiedClassName(
$this->getFQSEN() $this->fqsen
); );
} }
@@ -1473,7 +1474,7 @@ class Clazz extends AddressableElement
ClassConstant $constant ClassConstant $constant
): void { ): void {
$constant_fqsen = FullyQualifiedClassConstantName::make( $constant_fqsen = FullyQualifiedClassConstantName::make(
$this->getFQSEN(), $this->fqsen,
$constant->getName() $constant->getName()
); );
@@ -1498,7 +1499,7 @@ class Clazz extends AddressableElement
$this->getContext(), $this->getContext(),
Issue::CommentAbstractOnInheritedConstant, Issue::CommentAbstractOnInheritedConstant,
$this->getContext()->getLineNumberStart(), $this->getContext()->getLineNumberStart(),
$this->getFQSEN(), $this->fqsen,
$constant->getRealDefiningFQSEN(), $constant->getRealDefiningFQSEN(),
$constant->getContext()->getFile(), $constant->getContext()->getFile(),
$constant->getContext()->getLineNumberStart(), $constant->getContext()->getLineNumberStart(),
@@ -1604,7 +1605,7 @@ class Clazz extends AddressableElement
$enum_case->setEnumCaseValue($value); $enum_case->setEnumCaseValue($value);
$old_name = $this->enum_case_map[$value] ?? null; $old_name = $this->enum_case_map[$value] ?? null;
if (is_string($old_name)) { if (is_string($old_name)) {
$old_enum_case_fqsen = FullyQualifiedClassConstantName::make($this->getFQSEN(), $old_name); $old_enum_case_fqsen = FullyQualifiedClassConstantName::make($this->fqsen, $old_name);
$old_enum_case = $code_base->getClassConstantByFQSEN($old_enum_case_fqsen); $old_enum_case = $code_base->getClassConstantByFQSEN($old_enum_case_fqsen);
Issue::maybeEmit( Issue::maybeEmit(
$code_base, $code_base,
@@ -1650,7 +1651,7 @@ class Clazz extends AddressableElement
ClassConstant $constant ClassConstant $constant
): void { ): void {
$constant_fqsen = FullyQualifiedClassConstantName::make( $constant_fqsen = FullyQualifiedClassConstantName::make(
$this->getFQSEN(), $this->fqsen,
$constant->getName() $constant->getName()
); );
@@ -1675,7 +1676,7 @@ class Clazz extends AddressableElement
): bool { ): bool {
if ($code_base->hasClassConstantWithFQSEN( if ($code_base->hasClassConstantWithFQSEN(
FullyQualifiedClassConstantName::make( FullyQualifiedClassConstantName::make(
$this->getFQSEN(), $this->fqsen,
$name $name
) )
)) { )) {
@@ -1686,7 +1687,7 @@ class Clazz extends AddressableElement
} }
return $code_base->hasClassConstantWithFQSEN( return $code_base->hasClassConstantWithFQSEN(
FullyQualifiedClassConstantName::make( FullyQualifiedClassConstantName::make(
$this->getFQSEN(), $this->fqsen,
$name $name
) )
); );
@@ -1718,7 +1719,7 @@ class Clazz extends AddressableElement
): ClassConstant { ): ClassConstant {
$constant_fqsen = FullyQualifiedClassConstantName::make( $constant_fqsen = FullyQualifiedClassConstantName::make(
$this->getFQSEN(), $this->fqsen,
$name $name
); );
@@ -1728,7 +1729,7 @@ class Clazz extends AddressableElement
$context->getFile(), $context->getFile(),
$context->getLineNumberStart(), $context->getLineNumberStart(),
[ [
$this->getFQSEN() . '::' . $constant_fqsen $this->fqsen . '::' . $constant_fqsen
], ],
IssueFixSuggester::suggestSimilarClassConstant($code_base, $context, $constant_fqsen) IssueFixSuggester::suggestSimilarClassConstant($code_base, $context, $constant_fqsen)
) )
@@ -1787,7 +1788,7 @@ class Clazz extends AddressableElement
public function getConstantMap(CodeBase $code_base): array public function getConstantMap(CodeBase $code_base): array
{ {
return $code_base->getClassConstantMapByFullyQualifiedClassName( return $code_base->getClassConstantMapByFullyQualifiedClassName(
$this->getFQSEN() $this->fqsen
); );
} }
@@ -1810,7 +1811,7 @@ class Clazz extends AddressableElement
Option $type_option Option $type_option
): void { ): void {
$method_fqsen = FullyQualifiedMethodName::make( $method_fqsen = FullyQualifiedMethodName::make(
$this->getFQSEN(), $this->fqsen,
$method->getName(), $method->getName(),
$method->getFQSEN()->getAlternateId() $method->getFQSEN()->getAlternateId()
); );
@@ -1824,6 +1825,9 @@ class Clazz extends AddressableElement
// TODO: Consider all permutations of abstract and real methods on classes, interfaces, and traits. // TODO: Consider all permutations of abstract and real methods on classes, interfaces, and traits.
$existing_method = $existing_method =
$code_base->getMethodByFQSEN($method_fqsen); $code_base->getMethodByFQSEN($method_fqsen);
if ($existing_method->getRealDefiningFQSEN() === $method->getRealDefiningFQSEN()) {
return;
}
$existing_method_defining_fqsen = $existing_method->getDefiningFQSEN(); $existing_method_defining_fqsen = $existing_method->getDefiningFQSEN();
// Note: For private/protected methods, the defining FQSEN is set to the FQSEN of the inheriting class. // Note: For private/protected methods, the defining FQSEN is set to the FQSEN of the inheriting class.
// So, when multiple traits are inherited, they may have identical defining FQSENs, but some may be abstract, and others may be implemented. // So, when multiple traits are inherited, they may have identical defining FQSENs, but some may be abstract, and others may be implemented.
@@ -1831,26 +1835,21 @@ class Clazz extends AddressableElement
if ($method->isAbstract() === $existing_method->isAbstract()) { if ($method->isAbstract() === $existing_method->isAbstract()) {
return; return;
} }
} else {
self::markMethodAsOverridden($code_base, $existing_method_defining_fqsen);
} }
if ($existing_method->getRealDefiningFQSEN() === $method->getRealDefiningFQSEN()) {
return;
}
if ($existing_method->getRealDefiningFQSEN() === $method_fqsen || $method->isAbstract() || !$existing_method->isAbstract() || $existing_method->isNewConstructor()) { if ($existing_method->getRealDefiningFQSEN() === $method_fqsen || $method->isAbstract() || !$existing_method->isAbstract() || $existing_method->isNewConstructor()) {
// TODO: What if both of these are abstract, and those get combined into an abstract class? // TODO: What if both of these are abstract, and those get combined into an abstract class?
// Should phan check compatibility of the abstract methods it inherits? // Should phan check compatibility of the abstract methods it inherits?
$existing_method->setIsOverride(true); $existing_method->setIsOverride(true);
// TODO: What happens for protected methods and traits with getDefiningFQSEN // TODO: What happens for protected methods and traits with getDefiningFQSEN
self::markMethodAsOverridden($code_base, $method->getDefiningFQSEN()); self::markMethodAsOverridden($code_base, $method->getDefiningFQSEN(), $method_fqsen);
// Don't add the method since it was already added // Don't add the method since it was already added
return; return;
} elseif ($method->getRealDefiningFQSEN() === $method_fqsen) { } elseif ($method->getRealDefiningFQSEN() === $method_fqsen) {
$method->setIsOverride(true); $method->setIsOverride(true);
// TODO: What happens for traits with getDefiningFQSEN // TODO: What happens for traits with getDefiningFQSEN
self::markMethodAsOverridden($code_base, $existing_method->getDefiningFQSEN()); self::markMethodAsOverridden($code_base, $existing_method->getDefiningFQSEN(), $method_fqsen);
} }
} }
@@ -1944,7 +1943,7 @@ class Clazz extends AddressableElement
} }
$method_fqsen = FullyQualifiedMethodName::make( $method_fqsen = FullyQualifiedMethodName::make(
$this->getFQSEN(), $this->fqsen,
$name $name
); );
@@ -1968,7 +1967,7 @@ class Clazz extends AddressableElement
string $name string $name
): Method { ): Method {
$method_fqsen = FullyQualifiedMethodName::make( $method_fqsen = FullyQualifiedMethodName::make(
$this->getFQSEN(), $this->fqsen,
$name $name
); );
@@ -1989,7 +1988,7 @@ class Clazz extends AddressableElement
throw new CodeBaseException( throw new CodeBaseException(
$method_fqsen, $method_fqsen,
"Method with name $name does not exist for class {$this->getFQSEN()}." "Method with name $name does not exist for class {$this->fqsen}."
); );
} }
@@ -2003,7 +2002,7 @@ class Clazz extends AddressableElement
public function getMethodMap(CodeBase $code_base): array public function getMethodMap(CodeBase $code_base): array
{ {
return $code_base->getMethodMapByFullyQualifiedClassName( return $code_base->getMethodMapByFullyQualifiedClassName(
$this->getFQSEN() $this->fqsen
); );
} }
@@ -2381,7 +2380,7 @@ class Clazz extends AddressableElement
if ($this->isEnum()) { if ($this->isEnum()) {
return true; return true;
} }
return array_key_exists(strtolower($this->getFQSEN()->__toString()), self::IMMUTABLE_CLASS_SET); return array_key_exists(strtolower($this->fqsen->__toString()), self::IMMUTABLE_CLASS_SET);
} }
/** /**
@@ -2669,7 +2668,7 @@ class Clazz extends AddressableElement
// Treat it as if all of the properties were added, with their real and phpdoc union types. // Treat it as if all of the properties were added, with their real and phpdoc union types.
// TODO: Finalize behavior for edge cases such as `static` and templates in union types // TODO: Finalize behavior for edge cases such as `static` and templates in union types
$new_property = clone($property); $new_property = clone($property);
$new_property->setFQSEN(FullyQualifiedPropertyName::make($this->getFQSEN(), $name)); $new_property->setFQSEN(FullyQualifiedPropertyName::make($this->fqsen, $name));
$new_property->setPhanFlags($new_property->getPhanFlags() | Flags::IS_FROM_PHPDOC); $new_property->setPhanFlags($new_property->getPhanFlags() | Flags::IS_FROM_PHPDOC);
$this->addProperty($code_base, $new_property, None::instance()); $this->addProperty($code_base, $new_property, None::instance());
} }
@@ -2692,7 +2691,7 @@ class Clazz extends AddressableElement
return; return;
} }
if ($this->getParentClassFQSEN() === $this->getFQSEN()) { if ($this->getParentClassFQSEN() === $this->fqsen) {
return; return;
} }
@@ -2728,7 +2727,7 @@ class Clazz extends AddressableElement
return; return;
} }
if ($this->getParentClassFQSEN() === $this->getFQSEN()) { if ($this->getParentClassFQSEN() === $this->fqsen) {
return; return;
} }
@@ -2930,7 +2929,7 @@ class Clazz extends AddressableElement
$this->getContext(), $this->getContext(),
Issue::CommentAbstractOnInheritedProperty, Issue::CommentAbstractOnInheritedProperty,
$this->getContext()->getLineNumberStart(), $this->getContext()->getLineNumberStart(),
$this->getFQSEN(), $this->fqsen,
$property->getRealDefiningFQSEN(), $property->getRealDefiningFQSEN(),
$property->getContext()->getFile(), $property->getContext()->getFile(),
$property->getContext()->getLineNumberStart(), $property->getContext()->getLineNumberStart(),
@@ -2998,7 +2997,7 @@ class Clazz extends AddressableElement
$old_type = $parameter->getNonVariadicUnionType(); $old_type = $parameter->getNonVariadicUnionType();
$type = $old_type->withSelfResolvedInContext($context); $type = $old_type->withSelfResolvedInContext($context);
if ($type->hasStaticType()) { if ($type->hasStaticType()) {
$type = $type->withType($this->getFQSEN()->asType()); $type = $type->withType($this->fqsen->asType());
} }
if ($old_type !== $type) { if ($old_type !== $type) {
$changed = true; $changed = true;
@@ -3017,7 +3016,7 @@ class Clazz extends AddressableElement
$old_type = $parameter->getNonVariadicUnionType(); $old_type = $parameter->getNonVariadicUnionType();
$type = $old_type->withSelfResolvedInContext($context); $type = $old_type->withSelfResolvedInContext($context);
if ($type->hasStaticType()) { if ($type->hasStaticType()) {
$type = $type->withType($this->getFQSEN()->asType()); $type = $type->withType($this->fqsen->asType());
} }
if ($old_type !== $type) { if ($old_type !== $type) {
$changed = true; $changed = true;
@@ -3061,7 +3060,7 @@ class Clazz extends AddressableElement
$this->getContext(), $this->getContext(),
Issue::UndeclaredAliasedMethodOfTrait, Issue::UndeclaredAliasedMethodOfTrait,
$original_trait_alias_source->getAliasLineno(), // TODO: Track line number in TraitAdaptation $original_trait_alias_source->getAliasLineno(), // TODO: Track line number in TraitAdaptation
\sprintf('%s::%s', (string)$this->getFQSEN(), $alias_method_name), \sprintf('%s::%s', (string)$this->fqsen, $alias_method_name),
\sprintf('%s::%s', (string)$class->getFQSEN(), $source_method_name), \sprintf('%s::%s', (string)$class->getFQSEN(), $source_method_name),
$class->getName() $class->getName()
); );
@@ -3100,7 +3099,7 @@ class Clazz extends AddressableElement
$this->getContext(), $this->getContext(),
$issue_type, $issue_type,
$this->getContext()->getLineNumberStart(), $this->getContext()->getLineNumberStart(),
$this->getFQSEN(), $this->fqsen,
$inherited_class->__toString(), $inherited_class->__toString(),
$first_context->getFile(), $first_context->getFile(),
$first_context->getLineNumberStart(), $first_context->getLineNumberStart(),
@@ -3192,7 +3191,7 @@ class Clazz extends AddressableElement
$string .= 'Class '; $string .= 'Class ';
} }
$string .= (string)$this->getFQSEN()->getCanonicalFQSEN(); $string .= (string)$this->fqsen->getCanonicalFQSEN();
return $string; return $string;
} }
@@ -3220,7 +3219,7 @@ class Clazz extends AddressableElement
$string .= 'class '; $string .= 'class ';
} }
$string .= $this->getFQSEN()->getName(); $string .= $this->fqsen->getName();
$extend_types = []; $extend_types = [];
$implements_types = []; $implements_types = [];
@@ -3253,7 +3252,7 @@ class Clazz extends AddressableElement
public function getMarkupDescription(): string public function getMarkupDescription(): string
{ {
$fqsen = $this->getFQSEN(); $fqsen = $this->fqsen;
$string = ''; $string = '';
$namespace = \ltrim($fqsen->getNamespace(), '\\'); $namespace = \ltrim($fqsen->getNamespace(), '\\');
if ($namespace !== '') { if ($namespace !== '') {
@@ -3327,7 +3326,7 @@ class Clazz extends AddressableElement
return $property->toStub(); return $property->toStub();
}, $property_map)); }, $property_map));
} }
$reflection_class = new \ReflectionClass((string)$this->getFQSEN()); $reflection_class = new \ReflectionClass((string)$this->fqsen);
$method_map = \array_filter($this->getMethodMap($code_base), static function (Method $method) use ($reflection_class): bool { $method_map = \array_filter($this->getMethodMap($code_base), static function (Method $method) use ($reflection_class): bool {
if ($method->getFQSEN()->isAlternate()) { if ($method->getFQSEN()->isAlternate()) {
return false; return false;
@@ -3345,7 +3344,7 @@ class Clazz extends AddressableElement
} }
$stub .= "\n}\n\n"; $stub .= "\n}\n\n";
$namespace = \ltrim($this->getFQSEN()->getNamespace(), '\\'); $namespace = \ltrim($this->fqsen->getNamespace(), '\\');
return [$namespace, $stub]; return [$namespace, $stub];
} }
@@ -3360,7 +3359,7 @@ class Clazz extends AddressableElement
} }
// Create the 'class' constant // Create the 'class' constant
$class_constant_value = \ltrim($this->getFQSEN()->__toString(), '\\'); $class_constant_value = \ltrim($this->fqsen->__toString(), '\\');
$class_constant = new ClassConstant( $class_constant = new ClassConstant(
$this->getContext(), $this->getContext(),
'class', 'class',
@@ -3370,7 +3369,7 @@ class Clazz extends AddressableElement
)->asRealUnionType(), )->asRealUnionType(),
0, 0,
FullyQualifiedClassConstantName::make( FullyQualifiedClassConstantName::make(
$this->getFQSEN(), $this->fqsen,
'class' 'class'
) )
); );
@@ -3538,7 +3537,7 @@ class Clazz extends AddressableElement
$this->getContext(), $this->getContext(),
Issue::CommentAbstractOnInheritedMethod, Issue::CommentAbstractOnInheritedMethod,
$this->getContext()->getLineNumberStart(), $this->getContext()->getLineNumberStart(),
$this->getFQSEN(), $this->fqsen,
$method->getRealDefiningFQSEN(), $method->getRealDefiningFQSEN(),
$method->getContext()->getFile(), $method->getContext()->getFile(),
$method->getContext()->getLineNumberStart(), $method->getContext()->getLineNumberStart(),
@@ -3784,7 +3783,7 @@ class Clazz extends AddressableElement
Issue::GenericConstructorTypes, Issue::GenericConstructorTypes,
$constructor_method->getContext()->getLineNumberStart(), $constructor_method->getContext()->getLineNumberStart(),
$template_type, $template_type,
$this->getFQSEN() $this->fqsen
); );
} }
/** @param list<\ast\Node|mixed> $unused_arg_list */ /** @param list<\ast\Node|mixed> $unused_arg_list */
@@ -3837,13 +3836,22 @@ class Clazz extends AddressableElement
return null; return null;
} }
private static function markMethodAsOverridden(CodeBase $code_base, FullyQualifiedMethodName $method_fqsen): void private static function markMethodAsOverridden(
{ CodeBase $code_base,
FullyQualifiedMethodName $method_fqsen,
FullyQualifiedMethodName $overriding_method_fqsen
): void {
if (!$code_base->hasMethodWithFQSEN($method_fqsen)) { if (!$code_base->hasMethodWithFQSEN($method_fqsen)) {
return; return;
} }
$method = $code_base->getMethodByFQSEN($method_fqsen); $method = $code_base->getMethodByFQSEN($method_fqsen);
$method->setIsOverriddenByAnother(true); /*
if ($method->getName() === 'getBaz') {
echo "Marking $method_fqsen as overridden by $overriding_method_fqsen\n";
debug_print_backtrace(DEBUG_BACKTRACE_IGNORE_ARGS);
}
*/
$method->setIsOverriddenByAnother(true, $overriding_method_fqsen);
} }
/** /**
@@ -3968,7 +3976,7 @@ class Clazz extends AddressableElement
// Inherit properties from traits // Inherit properties from traits
$this->hydrate($code_base); $this->hydrate($code_base);
$fqsen = $this->getFQSEN(); $fqsen = $this->fqsen;
foreach ($this->getPropertyMap($code_base) as $property) { foreach ($this->getPropertyMap($code_base) as $property) {
$context = $property->getRealDefiningFQSEN()->getFullyQualifiedClassName() === $fqsen ? $property->getContext() : $this->getContext(); $context = $property->getRealDefiningFQSEN()->getFullyQualifiedClassName() === $fqsen ? $property->getContext() : $this->getContext();
Issue::maybeEmit( Issue::maybeEmit(
@@ -3976,7 +3984,7 @@ class Clazz extends AddressableElement
$context, $context,
Issue::EnumCannotHaveProperties, Issue::EnumCannotHaveProperties,
$context->getLineNumberStart(), $context->getLineNumberStart(),
$this->getFQSEN(), $this->fqsen,
$property->getName(), $property->getName(),
$property->getContext()->getFile(), $property->getContext()->getFile(),
$property->getContext()->getLineNumberStart() $property->getContext()->getLineNumberStart()
@@ -3994,7 +4002,7 @@ class Clazz extends AddressableElement
$context, $context,
Issue::EnumForbiddenMagicMethod, Issue::EnumForbiddenMagicMethod,
$context->getLineNumberStart(), $context->getLineNumberStart(),
$this->getFQSEN(), $this->fqsen,
$method->getName() . '()', $method->getName() . '()',
$method->getContext()->getFile(), $method->getContext()->getFile(),
$method->getContext()->getLineNumberStart() $method->getContext()->getLineNumberStart()
@@ -4009,7 +4017,7 @@ class Clazz extends AddressableElement
$context, $context,
Issue::InstanceMethodWithNoEnumCases, Issue::InstanceMethodWithNoEnumCases,
$context->getLineNumberStart(), $context->getLineNumberStart(),
$this->getFQSEN(), $this->fqsen,
$method->getName() . '()', $method->getName() . '()',
$method->getContext()->getFile(), $method->getContext()->getFile(),
$method->getContext()->getLineNumberStart() $method->getContext()->getLineNumberStart()
@@ -4041,7 +4049,7 @@ class Clazz extends AddressableElement
'name', 'name',
$string_type, $string_type,
ast\flags\MODIFIER_PUBLIC, ast\flags\MODIFIER_PUBLIC,
FullyQualifiedPropertyName::make($this->getFQSEN(), 'name'), FullyQualifiedPropertyName::make($this->fqsen, 'name'),
$string_type $string_type
); );
$name_property->setPhanFlags(Flags::IS_READ_ONLY | Flags::IS_ENUM_PROPERTY); $name_property->setPhanFlags(Flags::IS_READ_ONLY | Flags::IS_ENUM_PROPERTY);
@@ -4053,7 +4061,7 @@ class Clazz extends AddressableElement
'value', 'value',
$value_type, $value_type,
ast\flags\MODIFIER_PUBLIC, ast\flags\MODIFIER_PUBLIC,
FullyQualifiedPropertyName::make($this->getFQSEN(), 'name'), FullyQualifiedPropertyName::make($this->fqsen, 'name'),
$value_type $value_type
); );
$value_property->setPhanFlags(Flags::IS_READ_ONLY | Flags::IS_ENUM_PROPERTY); $value_property->setPhanFlags(Flags::IS_READ_ONLY | Flags::IS_ENUM_PROPERTY);
+5 -4
View File
@@ -29,6 +29,7 @@ use Phan\Memoize;
* Phan's representation of a closure or global function. * Phan's representation of a closure or global function.
* *
* @phan-file-suppress PhanPartialTypeMismatchArgument * @phan-file-suppress PhanPartialTypeMismatchArgument
* @property FullyQualifiedFunctionName $fqsen
*/ */
class Func extends AddressableElement implements FunctionInterface class Func extends AddressableElement implements FunctionInterface
{ {
@@ -334,7 +335,7 @@ class Func extends AddressableElement implements FunctionInterface
public function alternateGenerator(CodeBase $code_base): \Generator public function alternateGenerator(CodeBase $code_base): \Generator
{ {
$alternate_id = 0; $alternate_id = 0;
$fqsen = $this->getFQSEN(); $fqsen = $this->fqsen;
while ($code_base->hasFunctionWithFQSEN($fqsen)) { while ($code_base->hasFunctionWithFQSEN($fqsen)) {
yield $code_base->getFunctionByFQSEN($fqsen); yield $code_base->getFunctionByFQSEN($fqsen);
@@ -394,7 +395,7 @@ class Func extends AddressableElement implements FunctionInterface
*/ */
public function isClosure(): bool public function isClosure(): bool
{ {
return $this->getFQSEN()->isClosure(); return $this->fqsen->isClosure();
} }
/** /**
@@ -411,7 +412,7 @@ class Func extends AddressableElement implements FunctionInterface
public function getMarkupDescription(): string public function getMarkupDescription(): string
{ {
$fqsen = $this->getFQSEN(); $fqsen = $this->fqsen;
$namespace = \ltrim($fqsen->getNamespace(), '\\'); $namespace = \ltrim($fqsen->getNamespace(), '\\');
$stub = ''; $stub = '';
if (StringUtil::isNonZeroLengthString($namespace)) { if (StringUtil::isNonZeroLengthString($namespace)) {
@@ -438,7 +439,7 @@ class Func extends AddressableElement implements FunctionInterface
*/ */
public function toStubInfo(): array public function toStubInfo(): array
{ {
$fqsen = $this->getFQSEN(); $fqsen = $this->fqsen;
$stub = ''; $stub = '';
if (self::shouldAddDescriptionsToStubs()) { if (self::shouldAddDescriptionsToStubs()) {
$description = (string)MarkupDescription::extractDescriptionFromDocComment($this); $description = (string)MarkupDescription::extractDescriptionFromDocComment($this);
@@ -15,6 +15,7 @@ use Phan\Language\Type;
use Phan\Language\Type\FunctionLikeDeclarationType; use Phan\Language\Type\FunctionLikeDeclarationType;
use Phan\Language\Type\TemplateType; use Phan\Language\Type\TemplateType;
use Phan\Language\UnionType; use Phan\Language\UnionType;
use Phan\PluginV3;
/** /**
* Interface defining the behavior of both Methods and Functions * Interface defining the behavior of both Methods and Functions
@@ -360,14 +361,17 @@ interface FunctionInterface extends AddressableElementInterface
/** /**
* Make additional analysis logic of this function/method use $closure * Make additional analysis logic of this function/method use $closure
* If callers need to invoke multiple closures, they should pass in a closure to invoke multiple closures or use addFunctionCallAnalyzer. * If callers need to invoke multiple closures, they should pass in a closure to invoke multiple closures with addFunctionCallAnalyzer and the plugin that created the closure.
* @suppress PhanUnreferencedPublicMethod
* @deprecated
*/ */
public function setFunctionCallAnalyzer(Closure $closure): void; public function setFunctionCallAnalyzer(Closure $closure): void;
/** /**
* If callers need to invoke multiple closures, they should pass in a closure to invoke multiple closures. * If callers need to invoke multiple closures, they should pass in a closure to invoke multiple closures.
* @param ?PluginV3 $plugin @phan-mandatory-param
*/ */
public function addFunctionCallAnalyzer(Closure $closure): void; public function addFunctionCallAnalyzer(Closure $closure, ?PluginV3 $plugin = null): void;
/** /**
* Initialize the inner scope of this method with variables created from the parameters. * Initialize the inner scope of this method with variables created from the parameters.
@@ -40,6 +40,7 @@ use Phan\Language\Type\TrueType;
use Phan\Language\Type\VoidType; use Phan\Language\Type\VoidType;
use Phan\Language\UnionType; use Phan\Language\UnionType;
use Phan\Plugin\ConfigPluginSet; use Phan\Plugin\ConfigPluginSet;
use Phan\PluginV3;
use function count; use function count;
use function end; use function end;
@@ -1151,6 +1152,7 @@ trait FunctionTrait
/** /**
* Make additional analysis logic of this function/method use $closure * Make additional analysis logic of this function/method use $closure
* If callers need to invoke multiple closures, they should pass in a closure to invoke multiple closures or use addFunctionCallAnalyzer. * If callers need to invoke multiple closures, they should pass in a closure to invoke multiple closures or use addFunctionCallAnalyzer.
* @suppress PhanUnreferencedPublicMethod
*/ */
public function setFunctionCallAnalyzer(Closure $closure): void public function setFunctionCallAnalyzer(Closure $closure): void
{ {
@@ -1163,10 +1165,11 @@ trait FunctionTrait
/** /**
* Make additional analysis logic of this function/method use $closure in addition to any other closures. * Make additional analysis logic of this function/method use $closure in addition to any other closures.
* @param ?PluginV3 $plugin @phan-mandatory-param
*/ */
public function addFunctionCallAnalyzer(Closure $closure): void public function addFunctionCallAnalyzer(Closure $closure, PluginV3 $plugin = null): void
{ {
$closure_id = spl_object_id($closure); $closure_id = spl_object_id($plugin ?? $closure);
if (isset($this->function_call_analyzer_callback_set[$closure_id])) { if (isset($this->function_call_analyzer_callback_set[$closure_id])) {
return; return;
} }
@@ -15,6 +15,7 @@ use Phan\Library\StringUtil;
/** /**
* Phan's representation of a global constant * Phan's representation of a global constant
* @property FullyQualifiedGlobalConstantName $fqsen
*/ */
class GlobalConstant extends AddressableElement implements ConstantInterface class GlobalConstant extends AddressableElement implements ConstantInterface
{ {
@@ -137,7 +138,7 @@ class GlobalConstant extends AddressableElement implements ConstantInterface
/** @return array{0:string,1:string} [string $namespace, string $text] */ /** @return array{0:string,1:string} [string $namespace, string $text] */
public function toStubInfo(): array public function toStubInfo(): array
{ {
$fqsen = (string)$this->getFQSEN(); $fqsen = (string)$this->fqsen;
$pos = \strrpos($fqsen, '\\'); $pos = \strrpos($fqsen, '\\');
if ($pos !== false) { if ($pos !== false) {
$name = (string)\substr($fqsen, $pos + 1); $name = (string)\substr($fqsen, $pos + 1);
@@ -153,7 +154,7 @@ class GlobalConstant extends AddressableElement implements ConstantInterface
$repr = 'null'; $repr = 'null';
$comment = ' // could not find'; $comment = ' // could not find';
} }
$namespace = \ltrim($this->getFQSEN()->getNamespace(), '\\'); $namespace = \ltrim($this->fqsen->getNamespace(), '\\');
if (\preg_match('@^[a-zA-Z_\x7f-\xff\\\][a-zA-Z0-9_\x7f-\xff\\\]*$@D', $name)) { if (\preg_match('@^[a-zA-Z_\x7f-\xff\\\][a-zA-Z0-9_\x7f-\xff\\\]*$@D', $name)) {
$string = "const $name = $repr;$comment\n"; $string = "const $name = $repr;$comment\n";
} else { } else {
@@ -23,6 +23,7 @@ class GlobalVariable extends Variable
{ {
$this->type = $type; $this->type = $type;
// Always merge the type on the actual global. // Always merge the type on the actual global.
$this->element->setUnionType($this->element->getUnionType()->withUnionType($type->eraseRealTypeSetRecursively())); // Convert undefined to null before merging in the type.
$this->element->setUnionType($this->element->getUnionType()->withUnionType($type->eraseRealTypeSetRecursively())->withIsPossiblyUndefined(false));
} }
} }
+45 -3
View File
@@ -19,6 +19,7 @@ use Phan\Language\Scope\ClassScope;
use Phan\Language\Scope\FunctionLikeScope; use Phan\Language\Scope\FunctionLikeScope;
use Phan\Language\Scope\GlobalScope; use Phan\Language\Scope\GlobalScope;
use Phan\Language\UnionType; use Phan\Language\UnionType;
use Phan\Library\Set;
use Phan\Memoize; use Phan\Memoize;
/** /**
@@ -26,6 +27,7 @@ use Phan\Memoize;
* *
* @phan-file-suppress PhanPartialTypeMismatchArgument * @phan-file-suppress PhanPartialTypeMismatchArgument
* @method FullyQualifiedMethodName getDefiningFQSEN() @phan-suppress-current-line PhanParamSignaturePHPDocMismatchReturnType * @method FullyQualifiedMethodName getDefiningFQSEN() @phan-suppress-current-line PhanParamSignaturePHPDocMismatchReturnType
* @property FullyQualifiedMethodName $fqsen
*/ */
class Method extends ClassElement implements FunctionInterface class Method extends ClassElement implements FunctionInterface
{ {
@@ -49,6 +51,11 @@ class Method extends ClassElement implements FunctionInterface
*/ */
private $defining_method_for_type_fetching; private $defining_method_for_type_fetching;
/**
* @var Set<FullyQualifiedMethodName> FQSENs of methods potentially overriding this one.
*/
private $method_overrides;
/** /**
* @param Context $context * @param Context $context
* The context in which the structural element lives * The context in which the structural element lives
@@ -110,6 +117,8 @@ class Method extends ClassElement implements FunctionInterface
$this->setParameterList($parameter_list); $this->setParameterList($parameter_list);
} }
$this->checkForTemplateTypes(); $this->checkForTemplateTypes();
$this->method_overrides = new Set();
} }
public function __clone() public function __clone()
@@ -166,19 +175,52 @@ class Method extends ClassElement implements FunctionInterface
return $this->getPhanFlagsHasState(Flags::IS_OVERRIDDEN_BY_ANOTHER); return $this->getPhanFlagsHasState(Flags::IS_OVERRIDDEN_BY_ANOTHER);
} }
/**
* Returns a (possibly incomplete) list of methods overriding this one.
* @param CodeBase $code_base
* @return list<Method>
* @suppress PhanUnreferencedPublicMethod May be called by plugins (#4502)
*/
public function getPossibleOverrides(CodeBase $code_base): array
{
$ret = [];
foreach ($this->method_overrides as $fqsen) {
// Consistency checks, mostly for language server mode.
/** @var FullyQualifiedMethodName $fqsen */
if (!$code_base->hasMethodWithFQSEN($fqsen)) {
continue;
}
$method = $code_base->getMethodByFQSEN($fqsen);
if ($method->getDefiningFQSEN() !== $fqsen) {
continue;
}
$subclassExpanded = $method->getClassFQSEN()->asType()->asExpandedTypes($code_base);
$thisClassType = $this->getClassFQSEN()->asType();
if ($subclassExpanded->hasType($thisClassType)) {
$ret[] = $method;
}
}
return $ret;
}
/** /**
* Sets whether this method is overridden by another method * Sets whether this method is overridden by another method
* *
* @param bool $is_overridden_by_another * @param bool $is_overridden_by_another
* True if this method is overridden by another method * True if this method is overridden by another method
* @param FullyQualifiedMethodName|null $fqsen
* FQSEN of the overriding method, if available and $is_overridden_by_another is true.
*/ */
public function setIsOverriddenByAnother(bool $is_overridden_by_another): void public function setIsOverriddenByAnother(bool $is_overridden_by_another, FullyQualifiedMethodName $fqsen = null): void
{ {
$this->setPhanFlags(Flags::bitVectorWithState( $this->setPhanFlags(Flags::bitVectorWithState(
$this->getPhanFlags(), $this->getPhanFlags(),
Flags::IS_OVERRIDDEN_BY_ANOTHER, Flags::IS_OVERRIDDEN_BY_ANOTHER,
$is_overridden_by_another $is_overridden_by_another
)); ));
if ($is_overridden_by_another && $fqsen) {
$this->method_overrides->attach($fqsen);
}
} }
/** /**
@@ -675,7 +717,7 @@ class Method extends ClassElement implements FunctionInterface
// If the type contains 'static', add this method's class // If the type contains 'static', add this method's class
// to the return type. // to the return type.
$scope = new ClassScope(new GlobalScope(), $this->getFQSEN()->getFullyQualifiedClassName(), 0); $scope = new ClassScope(new GlobalScope(), $this->fqsen->getFullyQualifiedClassName(), 0);
$new_union_type = $union_type->withStaticResolvedInContext((clone $this->getContext())->withScope($scope)); $new_union_type = $union_type->withStaticResolvedInContext((clone $this->getContext())->withScope($scope));
if ($new_union_type !== $union_type) { if ($new_union_type !== $union_type) {
$union_type = $union_type->withUnionType($new_union_type); $union_type = $union_type->withUnionType($new_union_type);
@@ -704,7 +746,7 @@ class Method extends ClassElement implements FunctionInterface
{ {
// Workaround so that methods of generic classes will have the resolved template types // Workaround so that methods of generic classes will have the resolved template types
yield $this; yield $this;
$fqsen = $this->getFQSEN(); $fqsen = $this->fqsen;
$alternate_id = $fqsen->getAlternateId() + 1; $alternate_id = $fqsen->getAlternateId() + 1;
$fqsen = $fqsen->withAlternateId($alternate_id); $fqsen = $fqsen->withAlternateId($alternate_id);
+2 -2
View File
@@ -382,7 +382,7 @@ class Parameter extends Variable
); );
} }
$parameter = Parameter::create( $parameter = Parameter::create(
(clone($context))->withLineNumberStart($node->lineno), (clone $context)->withLineNumberStart($node->lineno),
$parameter_name, $parameter_name,
$union_type, $union_type,
$node->flags $node->flags
@@ -448,7 +448,7 @@ class Parameter extends Variable
if (!$has_error) { if (!$has_error) {
$parameter->setDefaultValueFutureType(new FutureUnionType( $parameter->setDefaultValueFutureType(new FutureUnionType(
$code_base, $code_base,
(clone($context))->withLineNumberStart($default_node->lineno ?? 0), (clone $context)->withLineNumberStart($default_node->lineno ?? 0),
$default_node $default_node
)); ));
} }
+1 -1
View File
@@ -473,7 +473,7 @@ class Property extends ClassElement
try { try {
$union_type = $future_union_type->get(); $union_type = $future_union_type->get();
if (!$this->real_union_type->isEmpty() if (!$this->real_union_type->isEmpty()
&& !$union_type->canStrictCastToUnionType($future_union_type->getCodeBase(), $this->real_union_type)) { && !$union_type->canCastToUnionType($this->real_union_type, $future_union_type->getCodeBase())) {
Issue::maybeEmit( Issue::maybeEmit(
$future_union_type->getCodeBase(), $future_union_type->getCodeBase(),
$future_union_type->getContext(), $future_union_type->getContext(),
+1 -1
View File
@@ -290,7 +290,7 @@ class Variable extends UnaddressableTypedElement implements TypedElementInterfac
{ {
$string = ''; $string = '';
if (!$this->type->isEmpty()) { if (!$this->type->isEmpty() || $this->type->isPossiblyUndefined()) {
$string .= "{$this->type->getDebugRepresentation()} "; $string .= "{$this->type->getDebugRepresentation()} ";
} }
+19 -1
View File
@@ -979,13 +979,31 @@ final class EmptyUnionType extends UnionType
/** /**
* @return bool * @return bool
* True if this is exclusively generic types * True if this is non-empty and exclusively generic array types
*/ */
public function isGenericArray(): bool public function isGenericArray(): bool
{ {
return false; // empty return false; // empty
} }
/**
* @return bool
* True if this is non-empty and exclusively array types.
*/
public function isArray(): bool
{
return false; // empty
}
/**
* @return bool
* True if this is non-empty and exclusively object types.
*/
public function isObject(): bool
{
return false; // empty
}
/** /**
* @return bool * @return bool
* True if any of the types in this UnionType made $matcher_callback return true * True if any of the types in this UnionType made $matcher_callback return true
+5 -1
View File
@@ -98,6 +98,7 @@ abstract class AbstractFQSEN implements FQSEN, Serializable
abstract public function __toString(): string; abstract public function __toString(): string;
/** /**
* @return never
* @throws Error to prevent accidentally calling this * @throws Error to prevent accidentally calling this
*/ */
public function __clone() public function __clone()
@@ -108,6 +109,7 @@ abstract class AbstractFQSEN implements FQSEN, Serializable
/** /**
* @throws Error to prevent accidentally calling this * @throws Error to prevent accidentally calling this
* @return never
*/ */
public function serialize(): string public function serialize(): string
{ {
@@ -117,6 +119,7 @@ abstract class AbstractFQSEN implements FQSEN, Serializable
/** /**
* @param string $serialized * @param string $serialized
* @return never
* @throws Error to prevent accidentally calling this * @throws Error to prevent accidentally calling this
*/ */
public function unserialize($serialized): void public function unserialize($serialized): void
@@ -127,7 +130,7 @@ abstract class AbstractFQSEN implements FQSEN, Serializable
/** /**
* @throws Error to prevent accidentally calling this * @throws Error to prevent accidentally calling this
* @return array<string,mixed> TODO: Switch to phpdoc never * @return never
*/ */
public function __serialize(): array public function __serialize(): array
{ {
@@ -138,6 +141,7 @@ abstract class AbstractFQSEN implements FQSEN, Serializable
* @unused-param $data * @unused-param $data
* @param array<string,mixed> $data * @param array<string,mixed> $data
* @throws Error to prevent accidentally calling this * @throws Error to prevent accidentally calling this
* @return never
*/ */
public function __unserialize(array $data): void public function __unserialize(array $data): void
{ {
@@ -264,6 +264,7 @@ abstract class FullyQualifiedGlobalStructuralElement extends AbstractFQSEN
$key, $key,
/** /**
* @throws FQSENException * @throws FQSENException
* @return never
*/ */
static function (): self { static function (): self {
// Reuse the exception to save time generating an unused stack trace. // Reuse the exception to save time generating an unused stack trace.
@@ -40,7 +40,7 @@ namespace Phan\Language\Internal;
* 1. '&rw_name' indicates that a parameter with a value is expected to be passed in, and may be modified. * 1. '&rw_name' indicates that a parameter with a value is expected to be passed in, and may be modified.
* 2. '&w_name' indicates that a parameter is expected to be passed in, and the value will be ignored, and may be overwritten. * 2. '&w_name' indicates that a parameter is expected to be passed in, and the value will be ignored, and may be overwritten.
* *
* This file contains the signatures for the most recent minor release of PHP supported by phan (php 7.2) * This file contains the signatures for the most recent minor release of PHP supported by phan (php 8.0)
* *
* Changes: * Changes:
* *
@@ -245,7 +245,7 @@ return [
'apache_getenv' => ['string|false', 'variable'=>'string', 'walk_to_top='=>'bool'], 'apache_getenv' => ['string|false', 'variable'=>'string', 'walk_to_top='=>'bool'],
'apache_lookup_uri' => ['object', 'filename'=>'string'], 'apache_lookup_uri' => ['object', 'filename'=>'string'],
'apache_note' => ['string|false', 'note_name'=>'string', 'note_value='=>'string'], 'apache_note' => ['string|false', 'note_name'=>'string', 'note_value='=>'string'],
'apache_request_headers' => ['array<string,mixed>|false'], 'apache_request_headers' => ['array<string,mixed>'],
'apache_reset_timeout' => ['bool'], 'apache_reset_timeout' => ['bool'],
'apache_response_headers' => ['array<string,mixed>'], 'apache_response_headers' => ['array<string,mixed>'],
'apache_setenv' => ['bool', 'variable'=>'string', 'value'=>'string', 'walk_to_top='=>'bool'], 'apache_setenv' => ['bool', 'variable'=>'string', 'value'=>'string', 'walk_to_top='=>'bool'],
@@ -359,7 +359,7 @@ return [
'array_change_key_case' => ['associative-array', 'array'=>'array', 'case='=>'int'], 'array_change_key_case' => ['associative-array', 'array'=>'array', 'case='=>'int'],
'array_chunk' => ['list<array>', 'array'=>'array', 'length'=>'int', 'preserve_keys='=>'bool'], 'array_chunk' => ['list<array>', 'array'=>'array', 'length'=>'int', 'preserve_keys='=>'bool'],
'array_column' => ['array', 'array'=>'array', 'column_key'=>'?int|?string', 'index_key='=>'?int|?string'], 'array_column' => ['array', 'array'=>'array', 'column_key'=>'?int|?string', 'index_key='=>'?int|?string'],
'array_combine' => ['associative-array|false', 'keys'=>'string[]|int[]', 'values'=>'array'], 'array_combine' => ['associative-array', 'keys'=>'string[]|int[]', 'values'=>'array'],
'array_count_values' => ['associative-array<mixed,int>', 'array'=>'array'], 'array_count_values' => ['associative-array<mixed,int>', 'array'=>'array'],
'array_diff' => ['associative-array', 'array'=>'array', 'arrays'=>'array', '...args='=>'array'], 'array_diff' => ['associative-array', 'array'=>'array', 'arrays'=>'array', '...args='=>'array'],
'array_diff_assoc' => ['associative-array', 'array'=>'array', 'arrays'=>'array', '...args='=>'array'], 'array_diff_assoc' => ['associative-array', 'array'=>'array', 'arrays'=>'array', '...args='=>'array'],
@@ -379,7 +379,7 @@ return [
'array_intersect_uassoc\'1' => ['associative-array', 'array'=>'array', 'rest'=>'array', 'arr3'=>'array', 'arg4'=>'array|callable(mixed,mixed):int', '...rest'=>'array|callable(mixed,mixed):int'], 'array_intersect_uassoc\'1' => ['associative-array', 'array'=>'array', 'rest'=>'array', 'arr3'=>'array', 'arg4'=>'array|callable(mixed,mixed):int', '...rest'=>'array|callable(mixed,mixed):int'],
'array_intersect_ukey' => ['associative-array', 'array'=>'array', 'rest'=>'array', 'key_compare_func'=>'callable(mixed,mixed):int'], 'array_intersect_ukey' => ['associative-array', 'array'=>'array', 'rest'=>'array', 'key_compare_func'=>'callable(mixed,mixed):int'],
'array_intersect_ukey\'1' => ['associative-array', 'array'=>'array', 'rest'=>'array', 'arr3'=>'array', 'arg4'=>'array|callable(mixed,mixed):int', '...rest'=>'array|callable(mixed,mixed):int'], 'array_intersect_ukey\'1' => ['associative-array', 'array'=>'array', 'rest'=>'array', 'arr3'=>'array', 'arg4'=>'array|callable(mixed,mixed):int', '...rest'=>'array|callable(mixed,mixed):int'],
'array_key_exists' => ['bool', 'key'=>'string|int', 'array'=>'array|ArrayObject'], 'array_key_exists' => ['bool', 'key'=>'string|int', 'array'=>'array'],
'array_key_first' => ['int|string|null', 'array'=>'array'], 'array_key_first' => ['int|string|null', 'array'=>'array'],
'array_key_last' => ['int|string|null', 'array'=>'array'], 'array_key_last' => ['int|string|null', 'array'=>'array'],
'array_keys' => ['list<string>|list<int>', 'array'=>'array', 'filter_value='=>'mixed', 'strict='=>'bool'], 'array_keys' => ['list<string>|list<int>', 'array'=>'array', 'filter_value='=>'mixed', 'strict='=>'bool'],
@@ -518,8 +518,8 @@ return [
'bbcode_set_flags' => ['bool', 'bbcode_container'=>'resource', 'flags'=>'int', 'mode='=>'int'], 'bbcode_set_flags' => ['bool', 'bbcode_container'=>'resource', 'flags'=>'int', 'mode='=>'int'],
'bcadd' => ['string', 'num1'=>'string', 'num2'=>'string', 'scale='=>'int'], 'bcadd' => ['string', 'num1'=>'string', 'num2'=>'string', 'scale='=>'int'],
'bccomp' => ['int', 'num1'=>'string', 'num2'=>'string', 'scale='=>'int'], 'bccomp' => ['int', 'num1'=>'string', 'num2'=>'string', 'scale='=>'int'],
'bcdiv' => ['?string', 'num1'=>'string', 'num2'=>'string', 'scale='=>'int'], 'bcdiv' => ['string', 'num1'=>'string', 'num2'=>'string', 'scale='=>'int'],
'bcmod' => ['?string', 'num1'=>'string', 'num2'=>'string', 'scale='=>'int'], 'bcmod' => ['string', 'num1'=>'string', 'num2'=>'string', 'scale='=>'int'],
'bcmul' => ['string', 'num1'=>'string', 'num2'=>'string', 'scale='=>'int'], 'bcmul' => ['string', 'num1'=>'string', 'num2'=>'string', 'scale='=>'int'],
'bcompiler_load' => ['bool', 'filename'=>'string'], 'bcompiler_load' => ['bool', 'filename'=>'string'],
'bcompiler_load_exe' => ['bool', 'filename'=>'string'], 'bcompiler_load_exe' => ['bool', 'filename'=>'string'],
@@ -535,7 +535,7 @@ return [
'bcompiler_write_header' => ['bool', 'filehandle'=>'resource', 'write_ver='=>'string'], 'bcompiler_write_header' => ['bool', 'filehandle'=>'resource', 'write_ver='=>'string'],
'bcompiler_write_included_filename' => ['bool', 'filehandle'=>'resource', 'filename'=>'string'], 'bcompiler_write_included_filename' => ['bool', 'filehandle'=>'resource', 'filename'=>'string'],
'bcpow' => ['string', 'num'=>'string', 'exponent'=>'string', 'scale='=>'int'], 'bcpow' => ['string', 'num'=>'string', 'exponent'=>'string', 'scale='=>'int'],
'bcpowmod' => ['?string', 'num'=>'string', 'exponent'=>'string', 'modulus'=>'string', 'scale='=>'int'], 'bcpowmod' => ['string', 'num'=>'string', 'exponent'=>'string', 'modulus'=>'string', 'scale='=>'int'],
'bcscale' => ['int', 'scale='=>'int'], 'bcscale' => ['int', 'scale='=>'int'],
'bcsqrt' => ['string', 'num'=>'string', 'scale='=>'int'], 'bcsqrt' => ['string', 'num'=>'string', 'scale='=>'int'],
'bcsub' => ['string', 'num1'=>'string', 'num2'=>'string', 'scale='=>'int'], 'bcsub' => ['string', 'num1'=>'string', 'num2'=>'string', 'scale='=>'int'],
@@ -1105,7 +1105,7 @@ return [
'collator_get_error_message' => ['string', 'object'=>'collator'], 'collator_get_error_message' => ['string', 'object'=>'collator'],
'collator_get_locale' => ['string', 'object'=>'collator', 'type'=>'int'], 'collator_get_locale' => ['string', 'object'=>'collator', 'type'=>'int'],
'collator_get_sort_key' => ['string', 'object'=>'collator', 'string'=>'string'], 'collator_get_sort_key' => ['string', 'object'=>'collator', 'string'=>'string'],
'collator_get_strength' => ['int|false', 'object'=>'collator'], 'collator_get_strength' => ['int', 'object'=>'collator'],
'collator_set_attribute' => ['bool', 'object'=>'collator', 'attribute'=>'int', 'value'=>'int'], 'collator_set_attribute' => ['bool', 'object'=>'collator', 'attribute'=>'int', 'value'=>'int'],
'collator_set_strength' => ['bool', 'object'=>'collator', 'strength'=>'int'], 'collator_set_strength' => ['bool', 'object'=>'collator', 'strength'=>'int'],
'collator_sort' => ['bool', 'object'=>'collator', '&rw_array'=>'array', 'flags='=>'int'], 'collator_sort' => ['bool', 'object'=>'collator', '&rw_array'=>'array', 'flags='=>'int'],
@@ -1123,7 +1123,7 @@ return [
'com_event_sink' => ['bool', 'variant'=>'variant', 'sink_object'=>'object', 'sink_interface='=>'?array|?string'], 'com_event_sink' => ['bool', 'variant'=>'variant', 'sink_object'=>'object', 'sink_interface='=>'?array|?string'],
'com_get_active_object' => ['variant', 'prog_id'=>'string', 'codepage='=>'int'], 'com_get_active_object' => ['variant', 'prog_id'=>'string', 'codepage='=>'int'],
'com_isenum' => ['bool', 'com_module'=>'variant'], 'com_isenum' => ['bool', 'com_module'=>'variant'],
'com_load_typelib' => ['bool', 'typelib'=>'string', 'case_insensitive='=>'bool'], 'com_load_typelib' => ['bool', 'typelib'=>'string', 'case_insensitive='=>'true'],
'com_message_pump' => ['bool', 'timeout_milliseconds='=>'int'], 'com_message_pump' => ['bool', 'timeout_milliseconds='=>'int'],
'com_print_typeinfo' => ['bool', 'variant'=>'variant|string', 'dispatch_interface='=>'string', 'display_sink='=>'bool'], 'com_print_typeinfo' => ['bool', 'variant'=>'variant|string', 'dispatch_interface='=>'string', 'display_sink='=>'bool'],
'commonmark\cql::__invoke' => ['', 'root'=>'CommonMark\Node', 'handler'=>'callable'], 'commonmark\cql::__invoke' => ['', 'root'=>'CommonMark\Node', 'handler'=>'callable'],
@@ -1540,7 +1540,7 @@ return [
'Couchbase\zlibCompress' => ['string', 'data'=>'string'], 'Couchbase\zlibCompress' => ['string', 'data'=>'string'],
'Couchbase\zlibDecompress' => ['string', 'data'=>'string'], 'Couchbase\zlibDecompress' => ['string', 'data'=>'string'],
'count' => ['int', 'value'=>'Countable|array|SimpleXMLElement|ResourceBundle', 'mode='=>'int'], 'count' => ['int', 'value'=>'Countable|array|SimpleXMLElement|ResourceBundle', 'mode='=>'int'],
'count_chars' => ['array<int,int>|false|string', 'string'=>'string', 'mode='=>'int'], 'count_chars' => ['array<int,int>|string', 'string'=>'string', 'mode='=>'int'],
'Countable::count' => ['int'], 'Countable::count' => ['int'],
'crack_check' => ['bool', 'dictionary'=>'', 'password'=>'string'], 'crack_check' => ['bool', 'dictionary'=>'', 'password'=>'string'],
'crack_closedict' => ['bool', 'dictionary='=>'resource'], 'crack_closedict' => ['bool', 'dictionary='=>'resource'],
@@ -1548,7 +1548,6 @@ return [
'crack_opendict' => ['resource|false', 'dictionary'=>'string'], 'crack_opendict' => ['resource|false', 'dictionary'=>'string'],
'crash' => [''], 'crash' => [''],
'crc32' => ['int', 'string'=>'string'], 'crc32' => ['int', 'string'=>'string'],
'create_function' => ['string', 'args'=>'string', 'code'=>'string'],
'crypt' => ['string', 'string'=>'string', 'salt'=>'string'], 'crypt' => ['string', 'string'=>'string', 'salt'=>'string'],
'Crypto\Base64::__construct' => ['void'], 'Crypto\Base64::__construct' => ['void'],
'Crypto\Base64::decode' => ['string', 'data'=>'string'], 'Crypto\Base64::decode' => ['string', 'data'=>'string'],
@@ -1734,37 +1733,37 @@ return [
'cubrid_set_query_timeout' => ['bool', 'req_identifier'=>'resource', 'timeout'=>'int'], 'cubrid_set_query_timeout' => ['bool', 'req_identifier'=>'resource', 'timeout'=>'int'],
'cubrid_unbuffered_query' => ['resource', 'query'=>'string', 'conn_identifier='=>''], 'cubrid_unbuffered_query' => ['resource', 'query'=>'string', 'conn_identifier='=>''],
'cubrid_version' => ['string'], 'cubrid_version' => ['string'],
'curl_close' => ['void', 'handle'=>'resource'], 'curl_close' => ['void', 'handle'=>'CurlHandle'],
'curl_copy_handle' => ['resource', 'handle'=>'resource'], 'curl_copy_handle' => ['CurlHandle', 'handle'=>'CurlHandle'],
'curl_errno' => ['int', 'handle'=>'resource'], 'curl_errno' => ['int', 'handle'=>'CurlHandle'],
'curl_error' => ['string', 'handle'=>'resource'], 'curl_error' => ['string', 'handle'=>'CurlHandle'],
'curl_escape' => ['string|false', 'handle'=>'resource', 'string'=>'string'], 'curl_escape' => ['string|false', 'handle'=>'CurlHandle', 'string'=>'string'],
'curl_exec' => ['bool|string', 'handle'=>'resource'], 'curl_exec' => ['bool|string', 'handle'=>'CurlHandle'],
'curl_file_create' => ['CURLFile', 'filename'=>'string', 'mime_type='=>'string', 'posted_filename='=>'string'], 'curl_file_create' => ['CURLFile', 'filename'=>'string', 'mime_type='=>'string', 'posted_filename='=>'string'],
'curl_getinfo' => ['mixed', 'handle'=>'resource', 'option='=>'int'], 'curl_getinfo' => ['mixed', 'handle'=>'CurlHandle', 'option='=>'int'],
'curl_init' => ['resource|false', 'url='=>'string'], 'curl_init' => ['CurlHandle|false', 'url='=>'string'],
'curl_multi_add_handle' => ['int', 'multi_handle'=>'resource', 'handle'=>'resource'], 'curl_multi_add_handle' => ['int', 'multi_handle'=>'CurlMultiHandle', 'handle'=>'CurlHandle'],
'curl_multi_close' => ['void', 'multi_handle'=>'resource'], 'curl_multi_close' => ['void', 'multi_handle'=>'CurlMultiHandle'],
'curl_multi_errno' => ['int', 'multi_handle'=>'resource'], 'curl_multi_errno' => ['int', 'multi_handle'=>'CurlMultiHandle'],
'curl_multi_exec' => ['int', 'multi_handle'=>'resource', '&w_still_running'=>'int'], 'curl_multi_exec' => ['int', 'multi_handle'=>'CurlMultiHandle', '&w_still_running'=>'int'],
'curl_multi_getcontent' => ['string', 'handle'=>'resource'], 'curl_multi_getcontent' => ['string', 'handle'=>'CurlHandle'],
'curl_multi_info_read' => ['array|false', 'multi_handle'=>'resource', '&w_queued_messages='=>'int'], 'curl_multi_info_read' => ['array|false', 'multi_handle'=>'CurlMultiHandle', '&w_queued_messages='=>'int'],
'curl_multi_init' => ['resource'], 'curl_multi_init' => ['CurlMultiHandle'],
'curl_multi_remove_handle' => ['int', 'multi_handle'=>'resource', 'handle'=>'resource'], 'curl_multi_remove_handle' => ['int', 'multi_handle'=>'CurlMultiHandle', 'handle'=>'CurlHandle'],
'curl_multi_select' => ['int', 'multi_handle'=>'resource', 'timeout='=>'float'], 'curl_multi_select' => ['int', 'multi_handle'=>'CurlMultiHandle', 'timeout='=>'float'],
'curl_multi_setopt' => ['bool', 'multi_handle'=>'resource', 'option'=>'int', 'value'=>'mixed'], 'curl_multi_setopt' => ['bool', 'multi_handle'=>'CurlMultiHandle', 'option'=>'int', 'value'=>'mixed'],
'curl_multi_strerror' => ['?string', 'error_code'=>'int'], 'curl_multi_strerror' => ['?string', 'error_code'=>'int'],
'curl_pause' => ['int', 'handle'=>'resource', 'flags'=>'int'], 'curl_pause' => ['int', 'handle'=>'CurlHandle', 'flags'=>'int'],
'curl_reset' => ['void', 'handle'=>'resource'], 'curl_reset' => ['void', 'handle'=>'CurlHandle'],
'curl_setopt' => ['bool', 'handle'=>'resource', 'option'=>'int', 'value'=>'mixed'], 'curl_setopt' => ['bool', 'handle'=>'CurlHandle', 'option'=>'int', 'value'=>'mixed'],
'curl_setopt_array' => ['bool', 'handle'=>'resource', 'options'=>'array'], 'curl_setopt_array' => ['bool', 'handle'=>'CurlHandle', 'options'=>'array'],
'curl_share_close' => ['void', 'share_handle'=>'resource'], 'curl_share_close' => ['void', 'share_handle'=>'CurlShareHandle'],
'curl_share_errno' => ['int', 'share_handle'=>'resource'], 'curl_share_errno' => ['int', 'share_handle'=>'CurlShareHandle'],
'curl_share_init' => ['resource'], 'curl_share_init' => ['CurlShareHandle'],
'curl_share_setopt' => ['bool', 'share_handle'=>'resource', 'option'=>'int', 'value'=>'mixed'], 'curl_share_setopt' => ['bool', 'share_handle'=>'CurlShareHandle', 'option'=>'int', 'value'=>'mixed'],
'curl_share_strerror' => ['string', 'error_code'=>'int'], 'curl_share_strerror' => ['string', 'error_code'=>'int'],
'curl_strerror' => ['?string', 'error_code'=>'int'], 'curl_strerror' => ['?string', 'error_code'=>'int'],
'curl_unescape' => ['string|false', 'handle'=>'resource', 'string'=>'string'], 'curl_unescape' => ['string|false', 'handle'=>'CurlHandle', 'string'=>'string'],
'curl_version' => ['array<string,mixed>', 'version='=>'int'], 'curl_version' => ['array<string,mixed>', 'version='=>'int'],
'CURLFile::__construct' => ['void', 'filename'=>'string', 'mime_type='=>'string', 'posted_filename='=>'string'], 'CURLFile::__construct' => ['void', 'filename'=>'string', 'mime_type='=>'string', 'posted_filename='=>'string'],
'CURLFile::__wakeup' => ['void'], 'CURLFile::__wakeup' => ['void'],
@@ -1781,33 +1780,33 @@ return [
'cyrus_query' => ['array', 'connection'=>'resource', 'query'=>'string'], 'cyrus_query' => ['array', 'connection'=>'resource', 'query'=>'string'],
'cyrus_unbind' => ['bool', 'connection'=>'resource', 'trigger_name'=>'string'], 'cyrus_unbind' => ['bool', 'connection'=>'resource', 'trigger_name'=>'string'],
'date' => ['string', 'format'=>'string', 'timestamp='=>'int'], 'date' => ['string', 'format'=>'string', 'timestamp='=>'int'],
'date_add' => ['DateTime|false', 'object'=>'DateTime', 'interval'=>'DateInterval'], 'date_add' => ['DateTime', 'object'=>'DateTime', 'interval'=>'DateInterval'],
'date_create' => ['DateTime|false', 'datetime='=>'string', 'timezone='=>'?DateTimeZone'], 'date_create' => ['DateTime|false', 'datetime='=>'string', 'timezone='=>'?DateTimeZone'],
'date_create_from_format' => ['DateTime|false', 'format'=>'string', 'datetime'=>'string', 'timezone='=>'DateTimeZone'], 'date_create_from_format' => ['DateTime|false', 'format'=>'string', 'datetime'=>'string', 'timezone='=>'DateTimeZone'],
'date_create_immutable' => ['DateTimeImmutable|false', 'datetime='=>'string', 'timezone='=>'?DateTimeZone'], 'date_create_immutable' => ['DateTimeImmutable|false', 'datetime='=>'string', 'timezone='=>'?DateTimeZone'],
'date_create_immutable_from_format' => ['DateTimeImmutable', 'format'=>'string', 'datetime'=>'string', 'timezone='=>'?DateTimeZone'], 'date_create_immutable_from_format' => ['DateTimeImmutable', 'format'=>'string', 'datetime'=>'string', 'timezone='=>'?DateTimeZone'],
'date_date_set' => ['DateTime|false', 'object'=>'DateTime', 'year'=>'int', 'month'=>'int', 'day'=>'int'], 'date_date_set' => ['DateTime', 'object'=>'DateTime', 'year'=>'int', 'month'=>'int', 'day'=>'int'],
'date_default_timezone_get' => ['string'], 'date_default_timezone_get' => ['string'],
'date_default_timezone_set' => ['bool', 'timezoneId'=>'string'], 'date_default_timezone_set' => ['bool', 'timezoneId'=>'string'],
'date_diff' => ['DateInterval|false', 'baseObject'=>'DateTimeInterface', 'targetObject'=>'DateTimeInterface', 'absolute='=>'bool'], 'date_diff' => ['DateInterval', 'baseObject'=>'DateTimeInterface', 'targetObject'=>'DateTimeInterface', 'absolute='=>'bool'],
'date_format' => ['string|false', 'object'=>'DateTimeInterface', 'format'=>'string'], 'date_format' => ['string', 'object'=>'DateTimeInterface', 'format'=>'string'],
'date_get_last_errors' => ['array<string,mixed>'], 'date_get_last_errors' => ['array<string,mixed>'],
'date_interval_create_from_date_string' => ['DateInterval', 'datetime'=>'string'], 'date_interval_create_from_date_string' => ['DateInterval', 'datetime'=>'string'],
'date_interval_format' => ['string', 'object'=>'DateInterval', 'format'=>'string'], 'date_interval_format' => ['string', 'object'=>'DateInterval', 'format'=>'string'],
'date_isodate_set' => ['DateTime|false', 'object'=>'DateTime', 'year'=>'int', 'week'=>'int', 'dayOfWeek='=>'int'], 'date_isodate_set' => ['DateTime', 'object'=>'DateTime', 'year'=>'int', 'week'=>'int', 'dayOfWeek='=>'int'],
'date_modify' => ['DateTime|false', 'object'=>'DateTime', 'modifier'=>'string'], 'date_modify' => ['DateTime|false', 'object'=>'DateTime', 'modifier'=>'string'],
'date_offset_get' => ['int', 'object'=>'DateTimeInterface'], 'date_offset_get' => ['int', 'object'=>'DateTimeInterface'],
'date_parse' => ['array<string,mixed>|false', 'datetime'=>'string'], 'date_parse' => ['array<string,mixed>', 'datetime'=>'string'],
'date_parse_from_format' => ['array<string,mixed>', 'format'=>'string', 'datetime'=>'string'], 'date_parse_from_format' => ['array<string,mixed>', 'format'=>'string', 'datetime'=>'string'],
'date_sub' => ['DateTime|false', 'object'=>'DateTime', 'interval'=>'DateInterval'], 'date_sub' => ['DateTime', 'object'=>'DateTime', 'interval'=>'DateInterval'],
'date_sun_info' => ['array<string,bool|int>|false', 'timestamp'=>'int', 'latitude'=>'float', 'longitude'=>'float'], 'date_sun_info' => ['array<string,bool|int>', 'timestamp'=>'int', 'latitude'=>'float', 'longitude'=>'float'],
'date_sunrise' => ['false|float|int|string', 'timestamp'=>'int', 'returnFormat='=>'int', 'latitude='=>'float', 'longitude='=>'float', 'zenith='=>'float', 'utcOffset='=>'float'], 'date_sunrise' => ['false|float|int|string', 'timestamp'=>'int', 'returnFormat='=>'int', 'latitude='=>'float', 'longitude='=>'float', 'zenith='=>'float', 'utcOffset='=>'float'],
'date_sunset' => ['false|float|int|string', 'timestamp'=>'int', 'returnFormat='=>'int', 'latitude='=>'float', 'longitude='=>'float', 'zenith='=>'float', 'utcOffset='=>'float'], 'date_sunset' => ['false|float|int|string', 'timestamp'=>'int', 'returnFormat='=>'int', 'latitude='=>'float', 'longitude='=>'float', 'zenith='=>'float', 'utcOffset='=>'float'],
'date_time_set' => ['DateTime|false', 'object'=>'DateTime', 'hour'=>'int', 'minute'=>'int', 'second='=>'int', 'microsecond='=>'int'], 'date_time_set' => ['DateTime', 'object'=>'DateTime', 'hour'=>'int', 'minute'=>'int', 'second='=>'int', 'microsecond='=>'int'],
'date_timestamp_get' => ['int', 'object'=>'DateTimeInterface'], 'date_timestamp_get' => ['int', 'object'=>'DateTimeInterface'],
'date_timestamp_set' => ['DateTime|false', 'object'=>'DateTime', 'timestamp'=>'int'], 'date_timestamp_set' => ['DateTime', 'object'=>'DateTime', 'timestamp'=>'int'],
'date_timezone_get' => ['DateTimeZone|false', 'object'=>'DateTimeInterface'], 'date_timezone_get' => ['DateTimeZone|false', 'object'=>'DateTimeInterface'],
'date_timezone_set' => ['DateTime|false', 'object'=>'DateTime', 'timezone'=>'DateTimeZone'], 'date_timezone_set' => ['DateTime', 'object'=>'DateTime', 'timezone'=>'DateTimeZone'],
'datefmt_create' => ['IntlDateFormatter', 'locale'=>'string', 'dateType'=>'int', 'timeType'=>'int', 'timezone='=>'string|IntlTimeZone|DateTimeZone|null', 'calendar='=>'int|IntlCalendar|null', 'pattern='=>'string'], 'datefmt_create' => ['IntlDateFormatter', 'locale'=>'string', 'dateType'=>'int', 'timeType'=>'int', 'timezone='=>'string|IntlTimeZone|DateTimeZone|null', 'calendar='=>'int|IntlCalendar|null', 'pattern='=>'string'],
'datefmt_format' => ['string', 'formatter'=>'IntlDateFormatter', 'datetime'=>'DateTime|IntlCalendar|array|int'], 'datefmt_format' => ['string', 'formatter'=>'IntlDateFormatter', 'datetime'=>'DateTime|IntlCalendar|array|int'],
'datefmt_format_object' => ['string', 'datetime'=>'DateTimeInterface|IntlCalendar', 'format='=>'array|int|null|string', 'locale='=>'string'], 'datefmt_format_object' => ['string', 'datetime'=>'DateTimeInterface|IntlCalendar', 'format='=>'array|int|null|string', 'locale='=>'string'],
@@ -1841,6 +1840,7 @@ return [
'DatePeriod::__wakeup' => ['void'], 'DatePeriod::__wakeup' => ['void'],
'DatePeriod::getDateInterval' => ['DateInterval'], 'DatePeriod::getDateInterval' => ['DateInterval'],
'DatePeriod::getEndDate' => ['?DateTimeInterface'], 'DatePeriod::getEndDate' => ['?DateTimeInterface'],
'DatePeriod::getRecurrences' => ['int'],
'DatePeriod::getStartDate' => ['DateTimeInterface'], 'DatePeriod::getStartDate' => ['DateTimeInterface'],
'DateTime::__construct' => ['void', 'datetime='=>'?string', 'timezone='=>'?DateTimeZone'], 'DateTime::__construct' => ['void', 'datetime='=>'?string', 'timezone='=>'?DateTimeZone'],
'DateTime::__set_state' => ['static', 'array'=>'array'], 'DateTime::__set_state' => ['static', 'array'=>'array'],
@@ -1848,6 +1848,7 @@ return [
'DateTime::add' => ['static', 'interval'=>'DateInterval'], 'DateTime::add' => ['static', 'interval'=>'DateInterval'],
'DateTime::createFromFormat' => ['static|false', 'format'=>'string', 'datetime'=>'string', 'timezone='=>'?DateTimeZone'], 'DateTime::createFromFormat' => ['static|false', 'format'=>'string', 'datetime'=>'string', 'timezone='=>'?DateTimeZone'],
'DateTime::createFromImmutable' => ['static', 'object'=>'DateTimeImmutable'], 'DateTime::createFromImmutable' => ['static', 'object'=>'DateTimeImmutable'],
'DateTime::createFromInterface' => ['self', 'object'=>'DateTimeInterface'],
'DateTime::diff' => ['DateInterval', 'targetObject'=>'DateTimeInterface', 'absolute='=>'bool'], 'DateTime::diff' => ['DateInterval', 'targetObject'=>'DateTimeInterface', 'absolute='=>'bool'],
'DateTime::format' => ['string', 'format'=>'string'], 'DateTime::format' => ['string', 'format'=>'string'],
'DateTime::getLastErrors' => ['array'], 'DateTime::getLastErrors' => ['array'],
@@ -1866,6 +1867,7 @@ return [
'DateTimeImmutable::__wakeup' => ['void'], 'DateTimeImmutable::__wakeup' => ['void'],
'DateTimeImmutable::add' => ['static', 'interval'=>'DateInterval'], 'DateTimeImmutable::add' => ['static', 'interval'=>'DateInterval'],
'DateTimeImmutable::createFromFormat' => ['static|false', 'format'=>'string', 'datetime'=>'string', 'timezone='=>'?DateTimeZone'], 'DateTimeImmutable::createFromFormat' => ['static|false', 'format'=>'string', 'datetime'=>'string', 'timezone='=>'?DateTimeZone'],
'DateTimeImmutable::createFromInterface' => ['self', 'object'=>'DateTimeInterface'],
'DateTimeImmutable::createFromMutable' => ['static', 'object'=>'DateTime'], 'DateTimeImmutable::createFromMutable' => ['static', 'object'=>'DateTime'],
'DateTimeImmutable::diff' => ['DateInterval', 'targetObject'=>'DateTimeInterface', 'absolute='=>'bool'], 'DateTimeImmutable::diff' => ['DateInterval', 'targetObject'=>'DateTimeInterface', 'absolute='=>'bool'],
'DateTimeImmutable::format' => ['string|false', 'format'=>'string'], 'DateTimeImmutable::format' => ['string|false', 'format'=>'string'],
@@ -2079,8 +2081,8 @@ return [
'ddtrace_config_trace_enabled' => [''], 'ddtrace_config_trace_enabled' => [''],
'ddtrace_init' => ['', 'dir'=>''], 'ddtrace_init' => ['', 'dir'=>''],
'deaggregate' => ['', 'object'=>'object', 'class_name='=>'string'], 'deaggregate' => ['', 'object'=>'object', 'class_name='=>'string'],
'debug_backtrace' => ['list<array>', 'options='=>'int|bool', 'limit='=>'int'], 'debug_backtrace' => ['list<array>', 'options='=>'int', 'limit='=>'int'],
'debug_print_backtrace' => ['void', 'options='=>'int|bool', 'limit='=>'int'], 'debug_print_backtrace' => ['void', 'options='=>'int', 'limit='=>'int'],
'debug_zval_dump' => ['void', '...value'=>'mixed'], 'debug_zval_dump' => ['void', '...value'=>'mixed'],
'debugger_connect' => [''], 'debugger_connect' => [''],
'debugger_connector_pid' => [''], 'debugger_connector_pid' => [''],
@@ -2095,8 +2097,8 @@ return [
'define' => ['bool', 'constant_name'=>'string', 'value'=>'mixed', 'case_insensitive='=>'bool'], 'define' => ['bool', 'constant_name'=>'string', 'value'=>'mixed', 'case_insensitive='=>'bool'],
'define_syslog_variables' => ['void'], 'define_syslog_variables' => ['void'],
'defined' => ['bool', 'constant_name'=>'string'], 'defined' => ['bool', 'constant_name'=>'string'],
'deflate_add' => ['string|false', 'context'=>'resource', 'data'=>'string', 'flush_mode='=>'int'], 'deflate_add' => ['string|false', 'context'=>'DeflateContext', 'data'=>'string', 'flush_mode='=>'int'],
'deflate_init' => ['resource|false', 'encoding'=>'int', 'options='=>'array'], 'deflate_init' => ['DeflateContext|false', 'encoding'=>'int', 'options='=>'array'],
'deg2rad' => ['float', 'num'=>'float'], 'deg2rad' => ['float', 'num'=>'float'],
'dgettext' => ['string', 'domain'=>'string', 'message'=>'string'], 'dgettext' => ['string', 'domain'=>'string', 'message'=>'string'],
'dio_close' => ['void', 'fd'=>'resource'], 'dio_close' => ['void', 'fd'=>'resource'],
@@ -2168,7 +2170,7 @@ return [
'dom_document_schema_validate' => ['bool', 'source'=>'string', 'flags'=>'int'], 'dom_document_schema_validate' => ['bool', 'source'=>'string', 'flags'=>'int'],
'dom_document_schema_validate_file' => ['bool', 'filename'=>'string', 'flags'=>'int'], 'dom_document_schema_validate_file' => ['bool', 'filename'=>'string', 'flags'=>'int'],
'dom_document_xinclude' => ['int', 'options'=>'int'], 'dom_document_xinclude' => ['int', 'options'=>'int'],
'dom_import_simplexml' => ['DOMElement|false|null', 'node'=>'SimpleXMLElement'], 'dom_import_simplexml' => ['DOMElement|null', 'node'=>'SimpleXMLElement'],
'dom_xpath_evaluate' => ['', 'expr'=>'string', 'context'=>'DOMNode', 'registernodens'=>'bool'], 'dom_xpath_evaluate' => ['', 'expr'=>'string', 'context'=>'DOMNode', 'registernodens'=>'bool'],
'dom_xpath_query' => ['DOMNodeList', 'expr'=>'string', 'context'=>'DOMNode', 'registernodens'=>'bool'], 'dom_xpath_query' => ['DOMNodeList', 'expr'=>'string', 'context'=>'DOMNode', 'registernodens'=>'bool'],
'dom_xpath_register_ns' => ['bool', 'prefix'=>'string', 'uri'=>'string'], 'dom_xpath_register_ns' => ['bool', 'prefix'=>'string', 'uri'=>'string'],
@@ -2578,8 +2580,7 @@ return [
'Ds\Vector::sum' => ['int|float'], 'Ds\Vector::sum' => ['int|float'],
'Ds\Vector::toArray' => ['array'], 'Ds\Vector::toArray' => ['array'],
'Ds\Vector::unshift' => ['void', '...values='=>'mixed'], 'Ds\Vector::unshift' => ['void', '...values='=>'mixed'],
'each' => ['array{0:int|string,key:int|string,1:mixed,value:mixed}', '&r_arr'=>'array'], 'easter_date' => ['int', 'year='=>'?int', 'mode='=>'int'],
'easter_date' => ['int', 'year='=>'int', 'mode='=>'int'],
'easter_days' => ['int', 'year='=>'int', 'mode='=>'int'], 'easter_days' => ['int', 'year='=>'int', 'mode='=>'int'],
'echo' => ['void', 'arg1'=>'string', '...args='=>'string'], 'echo' => ['void', 'arg1'=>'string', '...args='=>'string'],
'eio_busy' => ['resource', 'delay'=>'int', 'pri='=>'int', 'callback='=>'callable', 'data='=>'mixed'], 'eio_busy' => ['resource', 'delay'=>'int', 'pri='=>'int', 'callback='=>'callable', 'data='=>'mixed'],
@@ -2647,27 +2648,27 @@ return [
'EmptyIterator::next' => ['void'], 'EmptyIterator::next' => ['void'],
'EmptyIterator::rewind' => ['void'], 'EmptyIterator::rewind' => ['void'],
'EmptyIterator::valid' => ['bool'], 'EmptyIterator::valid' => ['bool'],
'enchant_broker_describe' => ['array', 'broker'=>'resource'], 'enchant_broker_describe' => ['array', 'broker'=>'EnchantBroker'],
'enchant_broker_dict_exists' => ['bool', 'broker'=>'resource', 'tag'=>'string'], 'enchant_broker_dict_exists' => ['bool', 'broker'=>'EnchantBroker', 'tag'=>'string'],
'enchant_broker_free' => ['bool', 'broker'=>'resource'], 'enchant_broker_free' => ['bool', 'broker'=>'EnchantBroker'],
'enchant_broker_free_dict' => ['bool', 'dictionary'=>'resource'], 'enchant_broker_free_dict' => ['bool', 'dictionary'=>'EnchantDictionary'],
'enchant_broker_get_dict_path' => ['string', 'broker'=>'resource', 'type'=>'int'], 'enchant_broker_get_dict_path' => ['string', 'broker'=>'EnchantBroker', 'type'=>'int'],
'enchant_broker_get_error' => ['string|false', 'broker'=>'resource'], 'enchant_broker_get_error' => ['string|false', 'broker'=>'EnchantBroker'],
'enchant_broker_init' => ['resource|false'], 'enchant_broker_init' => ['EnchantBroker|false'],
'enchant_broker_list_dicts' => ['array', 'broker'=>'resource'], 'enchant_broker_list_dicts' => ['array', 'broker'=>'EnchantBroker'],
'enchant_broker_request_dict' => ['resource|false', 'broker'=>'resource', 'tag'=>'string'], 'enchant_broker_request_dict' => ['EnchantDictionary|false', 'broker'=>'EnchantBroker', 'tag'=>'string'],
'enchant_broker_request_pwl_dict' => ['resource|false', 'broker'=>'resource', 'filename'=>'string'], 'enchant_broker_request_pwl_dict' => ['EnchantDictionary|false', 'broker'=>'EnchantBroker', 'filename'=>'string'],
'enchant_broker_set_dict_path' => ['bool', 'broker'=>'resource', 'type'=>'int', 'path'=>'string'], 'enchant_broker_set_dict_path' => ['bool', 'broker'=>'EnchantBroker', 'type'=>'int', 'path'=>'string'],
'enchant_broker_set_ordering' => ['bool', 'broker'=>'resource', 'tag'=>'string', 'ordering'=>'string'], 'enchant_broker_set_ordering' => ['bool', 'broker'=>'EnchantBroker', 'tag'=>'string', 'ordering'=>'string'],
'enchant_dict_add_to_personal' => ['void', 'dictionary'=>'resource', 'word'=>'string'], 'enchant_dict_add_to_personal' => ['void', 'dictionary'=>'EnchantDictionary', 'word'=>'string'],
'enchant_dict_add_to_session' => ['void', 'dictionary'=>'resource', 'word'=>'string'], 'enchant_dict_add_to_session' => ['void', 'dictionary'=>'EnchantDictionary', 'word'=>'string'],
'enchant_dict_check' => ['bool', 'dictionary'=>'resource', 'word'=>'string'], 'enchant_dict_check' => ['bool', 'dictionary'=>'EnchantDictionary', 'word'=>'string'],
'enchant_dict_describe' => ['array', 'dictionary'=>'resource'], 'enchant_dict_describe' => ['array', 'dictionary'=>'EnchantDictionary'],
'enchant_dict_get_error' => ['string', 'dictionary'=>'resource'], 'enchant_dict_get_error' => ['string', 'dictionary'=>'EnchantDictionary'],
'enchant_dict_is_in_session' => ['bool', 'dictionary'=>'resource', 'word'=>'string'], 'enchant_dict_is_in_session' => ['bool', 'dictionary'=>'EnchantDictionary', 'word'=>'string'],
'enchant_dict_quick_check' => ['bool', 'dictionary'=>'resource', 'word'=>'string', '&w_suggestions='=>'array<int,string>'], 'enchant_dict_quick_check' => ['bool', 'dictionary'=>'EnchantDictionary', 'word'=>'string', '&w_suggestions='=>'array<int,string>'],
'enchant_dict_store_replacement' => ['void', 'dictionary'=>'resource', 'misspelled'=>'string', 'correct'=>'string'], 'enchant_dict_store_replacement' => ['void', 'dictionary'=>'EnchantDictionary', 'misspelled'=>'string', 'correct'=>'string'],
'enchant_dict_suggest' => ['array', 'dictionary'=>'resource', 'word'=>'string'], 'enchant_dict_suggest' => ['array', 'dictionary'=>'EnchantDictionary', 'word'=>'string'],
'end' => ['mixed|false', '&r_array'=>'array|object'], 'end' => ['mixed|false', '&r_array'=>'array|object'],
'Error::__clone' => ['void'], 'Error::__clone' => ['void'],
'Error::__construct' => ['void', 'message='=>'string', 'code='=>'int', 'previous='=>'?Throwable|?Error'], 'Error::__construct' => ['void', 'message='=>'string', 'code='=>'int', 'previous='=>'?Throwable|?Error'],
@@ -3338,7 +3339,25 @@ return [
'fdf_set_target_frame' => ['bool', 'fdf_document'=>'resource', 'frame_name'=>'string'], 'fdf_set_target_frame' => ['bool', 'fdf_document'=>'resource', 'frame_name'=>'string'],
'fdf_set_value' => ['bool', 'fdf_document'=>'resource', 'fieldname'=>'string', 'value'=>'mixed', 'isname='=>'int'], 'fdf_set_value' => ['bool', 'fdf_document'=>'resource', 'fieldname'=>'string', 'value'=>'mixed', 'isname='=>'int'],
'fdf_set_version' => ['bool', 'fdf_document'=>'resource', 'version'=>'string'], 'fdf_set_version' => ['bool', 'fdf_document'=>'resource', 'version'=>'string'],
'fdiv' => ['float', 'num1'=>'float', 'num2'=>'float'],
'feof' => ['bool', 'stream'=>'resource'], 'feof' => ['bool', 'stream'=>'resource'],
'FFI::addr' => ['FFI\CData', '&ptr'=>'FFI\CData'],
'FFI::alignof' => ['int', '&ptr'=>'mixed'],
'FFI::arrayType' => ['FFI\CType', 'type'=>'string|FFI\CType', 'dimensions'=>'list<int>'],
'FFI::cast' => ['FFI\CData', 'type'=>'string|FFI\CType', '&ptr'=>''],
'FFI::cdef' => ['FFI', 'code='=>'string', 'lib='=>'?string'],
'FFI::free' => ['void', '&ptr'=>'FFI\CData'],
'FFI::isNull' => ['bool', '&ptr'=>'FFI\CData'],
'FFI::load' => ['FFI', 'filename'=>'string'],
'FFI::memcmp' => ['int', '&ptr1'=>'FFI\CData|string', '&ptr2'=>'FFI\CData|string', 'size'=>'int'],
'FFI::memcpy' => ['void', '&to'=>'FFI\CData', '&from'=>'string|FFI\CData', 'size'=>'int'],
'FFI::memset' => ['void', '&ptr'=>'FFI\CData', 'value'=>'int', 'size'=>'int'],
'FFI::new' => ['FFI\CData', 'type'=>'string|FFI\CType', 'owned='=>'bool', 'persistent='=>'bool'],
'FFI::scope' => ['FFI', 'name'=>'string'],
'FFI::sizeof' => ['int', '&ptr'=>'FFI\CData|FFI\CType'],
'FFI::string' => ['string', '&ptr'=>'FFI\CData', 'size='=>'int'],
'FFI::type' => ['FFI\CType', 'type'=>'string'],
'FFI::typeof' => ['FFI\CType', '&ptr'=>'FFI\CData'],
'fflush' => ['bool', 'stream'=>'resource'], 'fflush' => ['bool', 'stream'=>'resource'],
'ffmpeg_animated_gif::__construct' => ['void', 'output_file_path'=>'string', 'width'=>'int', 'height'=>'int', 'frame_rate'=>'int', 'loop_count='=>'int'], 'ffmpeg_animated_gif::__construct' => ['void', 'output_file_path'=>'string', 'width'=>'int', 'height'=>'int', 'frame_rate'=>'int', 'loop_count='=>'int'],
'ffmpeg_animated_gif::addFrame' => ['', 'frame_to_add'=>'ffmpeg_frame'], 'ffmpeg_animated_gif::addFrame' => ['', 'frame_to_add'=>'ffmpeg_frame'],
@@ -3474,7 +3493,7 @@ return [
'fopen' => ['resource|false', 'filename'=>'string', 'mode'=>'string', 'use_include_path='=>'bool', 'context='=>'resource'], 'fopen' => ['resource|false', 'filename'=>'string', 'mode'=>'string', 'use_include_path='=>'bool', 'context='=>'resource'],
'forward_static_call' => ['mixed|false', 'callback'=>'callable', '...args='=>'mixed'], 'forward_static_call' => ['mixed|false', 'callback'=>'callable', '...args='=>'mixed'],
'forward_static_call_array' => ['mixed|false', 'callback'=>'callable', 'args'=>'list<mixed>'], 'forward_static_call_array' => ['mixed|false', 'callback'=>'callable', 'args'=>'list<mixed>'],
'fpassthru' => ['int|false', 'stream'=>'resource'], 'fpassthru' => ['int', 'stream'=>'resource'],
'fpm_get_status' => ['array|false'], 'fpm_get_status' => ['array|false'],
'fprintf' => ['int', 'stream'=>'resource', 'format'=>'string', '...values='=>'string|int|float|Stringable'], 'fprintf' => ['int', 'stream'=>'resource', 'format'=>'string', '...values='=>'string|int|float|Stringable'],
'fputcsv' => ['int|false', 'stream'=>'resource', 'fields'=>'array', 'separator='=>'string', 'enclosure='=>'string', 'escape='=>'string'], 'fputcsv' => ['int|false', 'stream'=>'resource', 'fields'=>'array', 'separator='=>'string', 'enclosure='=>'string', 'escape='=>'string'],
@@ -3783,6 +3802,7 @@ return [
'get_class_methods' => ['list<string>', 'object_or_class'=>'object|class-string'], 'get_class_methods' => ['list<string>', 'object_or_class'=>'object|class-string'],
'get_class_vars' => ['array<string,mixed>', 'class'=>'class-string'], 'get_class_vars' => ['array<string,mixed>', 'class'=>'class-string'],
'get_current_user' => ['string'], 'get_current_user' => ['string'],
'get_debug_type' => ['string', 'value'=>'mixed'],
'get_declared_classes' => ['list<class-string>'], 'get_declared_classes' => ['list<class-string>'],
'get_declared_interfaces' => ['list<class-string>'], 'get_declared_interfaces' => ['list<class-string>'],
'get_declared_traits' => ['list<class-string>'], 'get_declared_traits' => ['list<class-string>'],
@@ -3797,10 +3817,12 @@ return [
'get_loaded_extensions' => ['list<string>', 'zend_extensions='=>'bool'], 'get_loaded_extensions' => ['list<string>', 'zend_extensions='=>'bool'],
'get_magic_quotes_gpc' => ['false'], 'get_magic_quotes_gpc' => ['false'],
'get_magic_quotes_runtime' => ['false'], 'get_magic_quotes_runtime' => ['false'],
'get_mangled_object_vars' => ['array', 'object'=>'object'],
'get_meta_tags' => ['array<string,string>', 'filename'=>'string', 'use_include_path='=>'bool'], 'get_meta_tags' => ['array<string,string>', 'filename'=>'string', 'use_include_path='=>'bool'],
'get_object_vars' => ['array<string,mixed>', 'object'=>'object'], 'get_object_vars' => ['array<string,mixed>', 'object'=>'object'],
'get_parent_class' => ['class-string|false', 'object_or_class='=>'object|string'], 'get_parent_class' => ['class-string|false', 'object_or_class='=>'object|string'],
'get_required_files' => ['string[]'], 'get_required_files' => ['string[]'],
'get_resource_id' => ['int', 'resource'=>'resource'],
'get_resource_type' => ['string', 'resource'=>'resource'], 'get_resource_type' => ['string', 'resource'=>'resource'],
'get_resources' => ['array<int,resource>', 'type='=>'string'], 'get_resources' => ['array<int,resource>', 'type='=>'string'],
'getallheaders' => ['array'], 'getallheaders' => ['array'],
@@ -4051,7 +4073,7 @@ return [
'GmagickPixel::getcolorvalue' => ['float', 'color'=>'int'], 'GmagickPixel::getcolorvalue' => ['float', 'color'=>'int'],
'GmagickPixel::setcolor' => ['GmagickPixel', 'color'=>'string'], 'GmagickPixel::setcolor' => ['GmagickPixel', 'color'=>'string'],
'GmagickPixel::setcolorvalue' => ['GmagickPixel', 'color'=>'int', 'value'=>'float'], 'GmagickPixel::setcolorvalue' => ['GmagickPixel', 'color'=>'int', 'value'=>'float'],
'gmdate' => ['string|false', 'format'=>'string', 'timestamp='=>'int'], 'gmdate' => ['string', 'format'=>'string', 'timestamp='=>'int'],
'gmmktime' => ['int|false', 'hour'=>'int', 'minute='=>'int', 'second='=>'int', 'month='=>'int', 'day='=>'int', 'year='=>'int'], 'gmmktime' => ['int|false', 'hour'=>'int', 'minute='=>'int', 'second='=>'int', 'month='=>'int', 'day='=>'int', 'year='=>'int'],
'GMP::__construct' => ['void'], 'GMP::__construct' => ['void'],
'GMP::__toString' => ['string'], 'GMP::__toString' => ['string'],
@@ -4060,7 +4082,7 @@ return [
'gmp_abs' => ['GMP', 'num'=>'GMP|string|int'], 'gmp_abs' => ['GMP', 'num'=>'GMP|string|int'],
'gmp_add' => ['GMP', 'num1'=>'GMP|string|int', 'num2'=>'GMP|string|int'], 'gmp_add' => ['GMP', 'num1'=>'GMP|string|int', 'num2'=>'GMP|string|int'],
'gmp_and' => ['GMP', 'num1'=>'GMP|string|int', 'num2'=>'GMP|string|int'], 'gmp_and' => ['GMP', 'num1'=>'GMP|string|int', 'num2'=>'GMP|string|int'],
'gmp_binomial' => ['GMP|false', 'n'=>'GMP|string|int', 'k'=>'int'], 'gmp_binomial' => ['GMP', 'n'=>'GMP|string|int', 'k'=>'int'],
'gmp_clrbit' => ['void', 'num'=>'GMP', 'index'=>'int'], 'gmp_clrbit' => ['void', 'num'=>'GMP', 'index'=>'int'],
'gmp_cmp' => ['int', 'num1'=>'GMP|string|int', 'num2'=>'GMP|string|int'], 'gmp_cmp' => ['int', 'num1'=>'GMP|string|int', 'num2'=>'GMP|string|int'],
'gmp_com' => ['GMP', 'num'=>'GMP|string|int'], 'gmp_com' => ['GMP', 'num'=>'GMP|string|int'],
@@ -4069,12 +4091,12 @@ return [
'gmp_div_qr' => ['array<int,GMP>', 'num1'=>'GMP|string|int', 'num2'=>'GMP|string|int', 'rounding_mode='=>'int'], 'gmp_div_qr' => ['array<int,GMP>', 'num1'=>'GMP|string|int', 'num2'=>'GMP|string|int', 'rounding_mode='=>'int'],
'gmp_div_r' => ['GMP', 'num1'=>'GMP|string|int', 'num2'=>'GMP|string|int', 'rounding_mode='=>'int'], 'gmp_div_r' => ['GMP', 'num1'=>'GMP|string|int', 'num2'=>'GMP|string|int', 'rounding_mode='=>'int'],
'gmp_divexact' => ['GMP', 'num1'=>'GMP|string|int', 'num2'=>'GMP|string|int'], 'gmp_divexact' => ['GMP', 'num1'=>'GMP|string|int', 'num2'=>'GMP|string|int'],
'gmp_export' => ['string|false', 'num'=>'GMP|string|int', 'word_size='=>'int', 'flags='=>'int'], 'gmp_export' => ['string', 'num'=>'GMP|string|int', 'word_size='=>'int', 'flags='=>'int'],
'gmp_fact' => ['GMP', 'num'=>'int'], 'gmp_fact' => ['GMP', 'num'=>'int'],
'gmp_gcd' => ['GMP', 'num1'=>'GMP|string|int', 'num2'=>'GMP|string|int'], 'gmp_gcd' => ['GMP', 'num1'=>'GMP|string|int', 'num2'=>'GMP|string|int'],
'gmp_gcdext' => ['array<string,GMP>', 'num1'=>'GMP|string|int', 'num2'=>'GMP|string|int'], 'gmp_gcdext' => ['array<string,GMP>', 'num1'=>'GMP|string|int', 'num2'=>'GMP|string|int'],
'gmp_hamdist' => ['int', 'num1'=>'GMP|string|int', 'num2'=>'GMP|string|int'], 'gmp_hamdist' => ['int', 'num1'=>'GMP|string|int', 'num2'=>'GMP|string|int'],
'gmp_import' => ['GMP|false', 'data'=>'string', 'word_size='=>'int', 'flags='=>'int'], 'gmp_import' => ['GMP', 'data'=>'string', 'word_size='=>'int', 'flags='=>'int'],
'gmp_init' => ['GMP', 'num'=>'int|string', 'base='=>'int'], 'gmp_init' => ['GMP', 'num'=>'int|string', 'base='=>'int'],
'gmp_intval' => ['int', 'num'=>'GMP|string|int'], 'gmp_intval' => ['int', 'num'=>'GMP|string|int'],
'gmp_invert' => ['GMP|false', 'num1'=>'GMP|string|int', 'num2'=>'GMP|string|int'], 'gmp_invert' => ['GMP|false', 'num1'=>'GMP|string|int', 'num2'=>'GMP|string|int'],
@@ -4093,10 +4115,9 @@ return [
'gmp_pow' => ['GMP', 'num'=>'GMP|string|int', 'exponent'=>'int'], 'gmp_pow' => ['GMP', 'num'=>'GMP|string|int', 'exponent'=>'int'],
'gmp_powm' => ['GMP', 'num'=>'GMP|string|int', 'exponent'=>'GMP|string|int', 'modulus'=>'GMP|string|int'], 'gmp_powm' => ['GMP', 'num'=>'GMP|string|int', 'exponent'=>'GMP|string|int', 'modulus'=>'GMP|string|int'],
'gmp_prob_prime' => ['int', 'num'=>'GMP|string|int', 'repetitions='=>'int'], 'gmp_prob_prime' => ['int', 'num'=>'GMP|string|int', 'repetitions='=>'int'],
'gmp_random' => ['GMP', 'limiter='=>'int'],
'gmp_random_bits' => ['GMP', 'bits'=>'int'], 'gmp_random_bits' => ['GMP', 'bits'=>'int'],
'gmp_random_range' => ['GMP', 'min'=>'GMP|string|int', 'max'=>'GMP|string|int'], 'gmp_random_range' => ['GMP', 'min'=>'GMP|string|int', 'max'=>'GMP|string|int'],
'gmp_random_seed' => ['void|false', 'seed'=>'GMP|string|int'], 'gmp_random_seed' => ['void', 'seed'=>'GMP|string|int'],
'gmp_root' => ['GMP', 'num'=>'GMP|string|int', 'nth'=>'int'], 'gmp_root' => ['GMP', 'num'=>'GMP|string|int', 'nth'=>'int'],
'gmp_rootrem' => ['array<int,GMP>', 'num'=>'GMP|string|int', 'nth'=>'int'], 'gmp_rootrem' => ['array<int,GMP>', 'num'=>'GMP|string|int', 'nth'=>'int'],
'gmp_scan0' => ['int', 'num1'=>'GMP|string|int', 'start'=>'int'], 'gmp_scan0' => ['int', 'num1'=>'GMP|string|int', 'start'=>'int'],
@@ -4449,7 +4470,7 @@ return [
'Grpc\ChannelCredentials::createComposite' => ['Grpc\ChannelCredentials', 'cred1'=>'Grpc\ChannelCredentials', 'cred2'=>'Grpc\CallCredentials'], 'Grpc\ChannelCredentials::createComposite' => ['Grpc\ChannelCredentials', 'cred1'=>'Grpc\ChannelCredentials', 'cred2'=>'Grpc\CallCredentials'],
'Grpc\ChannelCredentials::createDefault' => ['Grpc\ChannelCredentials'], 'Grpc\ChannelCredentials::createDefault' => ['Grpc\ChannelCredentials'],
'Grpc\ChannelCredentials::createInsecure' => ['null'], 'Grpc\ChannelCredentials::createInsecure' => ['null'],
'Grpc\ChannelCredentials::createSsl' => ['Grpc\ChannelCredentials', 'pem_root_certs'=>'string', 'pem_private_key='=>'string', 'pem_cert_chain='=>'string'], 'Grpc\ChannelCredentials::createSsl' => ['Grpc\ChannelCredentials', 'pem_root_certs='=>'string|null', 'pem_private_key='=>'string|null', 'pem_cert_chain='=>'string|null'],
'Grpc\ChannelCredentials::invalidateDefaultRootsPem' => [''], 'Grpc\ChannelCredentials::invalidateDefaultRootsPem' => [''],
'Grpc\ChannelCredentials::isDefaultRootsPemSet' => [''], 'Grpc\ChannelCredentials::isDefaultRootsPemSet' => [''],
'Grpc\ChannelCredentials::setDefaultRootsPem' => ['', 'pem_roots'=>'string'], 'Grpc\ChannelCredentials::setDefaultRootsPem' => ['', 'pem_roots'=>'string'],
@@ -4517,10 +4538,9 @@ return [
'gzfile' => ['list<string>', 'filename'=>'string', 'use_include_path='=>'int'], 'gzfile' => ['list<string>', 'filename'=>'string', 'use_include_path='=>'int'],
'gzgetc' => ['string|false', 'stream'=>'resource'], 'gzgetc' => ['string|false', 'stream'=>'resource'],
'gzgets' => ['string|false', 'stream'=>'resource', 'length='=>'int'], 'gzgets' => ['string|false', 'stream'=>'resource', 'length='=>'int'],
'gzgetss' => ['string|false', 'zp'=>'resource', 'length'=>'int', 'allowable_tags='=>'string'],
'gzinflate' => ['string|false', 'data'=>'string', 'max_length='=>'int'], 'gzinflate' => ['string|false', 'data'=>'string', 'max_length='=>'int'],
'gzopen' => ['resource|false', 'filename'=>'string', 'mode'=>'string', 'use_include_path='=>'int'], 'gzopen' => ['resource|false', 'filename'=>'string', 'mode'=>'string', 'use_include_path='=>'int'],
'gzpassthru' => ['int|false', 'stream'=>'resource'], 'gzpassthru' => ['int', 'stream'=>'resource'],
'gzputs' => ['int', 'stream'=>'resource', 'data'=>'string', 'length='=>'int'], 'gzputs' => ['int', 'stream'=>'resource', 'data'=>'string', 'length='=>'int'],
'gzread' => ['string', 'stream'=>'resource', 'length'=>'int'], 'gzread' => ['string', 'stream'=>'resource', 'length'=>'int'],
'gzrewind' => ['bool', 'stream'=>'resource'], 'gzrewind' => ['bool', 'stream'=>'resource'],
@@ -4698,7 +4718,7 @@ return [
'hash_equals' => ['bool', 'known_string'=>'string', 'user_string'=>'string'], 'hash_equals' => ['bool', 'known_string'=>'string', 'user_string'=>'string'],
'hash_file' => ['string', 'algo'=>'string', 'filename'=>'string', 'binary='=>'bool'], 'hash_file' => ['string', 'algo'=>'string', 'filename'=>'string', 'binary='=>'bool'],
'hash_final' => ['string', 'context'=>'HashContext', 'binary='=>'bool'], 'hash_final' => ['string', 'context'=>'HashContext', 'binary='=>'bool'],
'hash_hkdf' => ['string|false', 'algo'=>'string', 'key'=>'string', 'length='=>'int', 'info='=>'string', 'salt='=>'string'], 'hash_hkdf' => ['string', 'algo'=>'string', 'key'=>'string', 'length='=>'int', 'info='=>'string', 'salt='=>'string'],
'hash_hmac' => ['string', 'algo'=>'string', 'data'=>'string', 'key'=>'string', 'binary='=>'bool'], 'hash_hmac' => ['string', 'algo'=>'string', 'data'=>'string', 'key'=>'string', 'binary='=>'bool'],
'hash_hmac_algos' => ['list<string>'], 'hash_hmac_algos' => ['list<string>'],
'hash_hmac_file' => ['string', 'algo'=>'string', 'data'=>'string', 'key'=>'string', 'binary='=>'bool'], 'hash_hmac_file' => ['string', 'algo'=>'string', 'data'=>'string', 'key'=>'string', 'binary='=>'bool'],
@@ -5776,116 +5796,117 @@ return [
'iis_start_service' => ['int', 'service_id'=>'string'], 'iis_start_service' => ['int', 'service_id'=>'string'],
'iis_stop_server' => ['int', 'server_instance'=>'int'], 'iis_stop_server' => ['int', 'server_instance'=>'int'],
'iis_stop_service' => ['int', 'service_id'=>'string'], 'iis_stop_service' => ['int', 'service_id'=>'string'],
'image2wbmp' => ['bool', 'im'=>'resource', 'filename='=>'?string', 'threshold='=>'int'],
'image_type_to_extension' => ['string', 'image_type'=>'int', 'include_dot='=>'bool'], 'image_type_to_extension' => ['string', 'image_type'=>'int', 'include_dot='=>'bool'],
'image_type_to_mime_type' => ['string', 'image_type'=>'int'], 'image_type_to_mime_type' => ['string', 'image_type'=>'int'],
'imageaffine' => ['resource|false', 'image'=>'resource', 'affine'=>'array', 'clip='=>'array'], 'imageaffine' => ['false|GdImage', 'image'=>'GdImage', 'affine'=>'array', 'clip='=>'array'],
'imageaffineconcat' => ['array|false', 'm1'=>'array', 'm2'=>'array'], 'imageaffineconcat' => ['array|false', 'm1'=>'array', 'm2'=>'array'],
'imageaffinematrixconcat' => ['array{0:float,1:float,2:float,3:float,4:float,5:float}|false', 'matrix1'=>'array', 'matrix2'=>'array'], 'imageaffinematrixconcat' => ['array{0:float,1:float,2:float,3:float,4:float,5:float}|false', 'matrix1'=>'array', 'matrix2'=>'array'],
'imageaffinematrixget' => ['array{0:float,1:float,2:float,3:float,4:float,5:float}|false', 'type'=>'int', 'options'=>'array|float'], 'imageaffinematrixget' => ['array{0:float,1:float,2:float,3:float,4:float,5:float}|false', 'type'=>'int', 'options'=>'array|float'],
'imagealphablending' => ['bool', 'image'=>'resource', 'enable'=>'bool'], 'imagealphablending' => ['bool', 'image'=>'GdImage', 'enable'=>'bool'],
'imageantialias' => ['bool', 'image'=>'resource', 'enable'=>'bool'], 'imageantialias' => ['bool', 'image'=>'GdImage', 'enable'=>'bool'],
'imagearc' => ['bool', 'image'=>'resource', 'center_x'=>'int', 'center_y'=>'int', 'width'=>'int', 'height'=>'int', 'start_angle'=>'int', 'end_angle'=>'int', 'color'=>'int'], 'imagearc' => ['bool', 'image'=>'GdImage', 'center_x'=>'int', 'center_y'=>'int', 'width'=>'int', 'height'=>'int', 'start_angle'=>'int', 'end_angle'=>'int', 'color'=>'int'],
'imagebmp' => ['bool', 'image'=>'resource', 'file='=>'null|resource|string', 'compressed='=>'bool'], 'imagebmp' => ['bool', 'image'=>'GdImage', 'file='=>'null|resource|string', 'compressed='=>'bool'],
'imagechar' => ['bool', 'image'=>'resource', 'font'=>'int', 'x'=>'int', 'y'=>'int', 'char'=>'string', 'color'=>'int'], 'imagechar' => ['bool', 'image'=>'GdImage', 'font'=>'int', 'x'=>'int', 'y'=>'int', 'char'=>'string', 'color'=>'int'],
'imagecharup' => ['bool', 'image'=>'resource', 'font'=>'int', 'x'=>'int', 'y'=>'int', 'char'=>'string', 'color'=>'int'], 'imagecharup' => ['bool', 'image'=>'GdImage', 'font'=>'int', 'x'=>'int', 'y'=>'int', 'char'=>'string', 'color'=>'int'],
'imagecolorallocate' => ['int|false', 'image'=>'resource', 'red'=>'int', 'green'=>'int', 'blue'=>'int'], 'imagecolorallocate' => ['int|false', 'image'=>'GdImage', 'red'=>'int', 'green'=>'int', 'blue'=>'int'],
'imagecolorallocatealpha' => ['int|false', 'image'=>'resource', 'red'=>'int', 'green'=>'int', 'blue'=>'int', 'alpha'=>'int'], 'imagecolorallocatealpha' => ['int|false', 'image'=>'GdImage', 'red'=>'int', 'green'=>'int', 'blue'=>'int', 'alpha'=>'int'],
'imagecolorat' => ['int|false', 'image'=>'resource', 'x'=>'int', 'y'=>'int'], 'imagecolorat' => ['int|false', 'image'=>'GdImage', 'x'=>'int', 'y'=>'int'],
'imagecolorclosest' => ['int|false', 'image'=>'resource', 'red'=>'int', 'green'=>'int', 'blue'=>'int'], 'imagecolorclosest' => ['int|false', 'image'=>'GdImage', 'red'=>'int', 'green'=>'int', 'blue'=>'int'],
'imagecolorclosestalpha' => ['int|false', 'image'=>'resource', 'red'=>'int', 'green'=>'int', 'blue'=>'int', 'alpha'=>'int'], 'imagecolorclosestalpha' => ['int|false', 'image'=>'GdImage', 'red'=>'int', 'green'=>'int', 'blue'=>'int', 'alpha'=>'int'],
'imagecolorclosesthwb' => ['int|false', 'image'=>'resource', 'red'=>'int', 'green'=>'int', 'blue'=>'int'], 'imagecolorclosesthwb' => ['int|false', 'image'=>'GdImage', 'red'=>'int', 'green'=>'int', 'blue'=>'int'],
'imagecolordeallocate' => ['bool', 'image'=>'resource', 'color'=>'int'], 'imagecolordeallocate' => ['bool', 'image'=>'GdImage', 'color'=>'int'],
'imagecolorexact' => ['int|false', 'image'=>'resource', 'red'=>'int', 'green'=>'int', 'blue'=>'int'], 'imagecolorexact' => ['int|false', 'image'=>'GdImage', 'red'=>'int', 'green'=>'int', 'blue'=>'int'],
'imagecolorexactalpha' => ['int|false', 'image'=>'resource', 'red'=>'int', 'green'=>'int', 'blue'=>'int', 'alpha'=>'int'], 'imagecolorexactalpha' => ['int|false', 'image'=>'GdImage', 'red'=>'int', 'green'=>'int', 'blue'=>'int', 'alpha'=>'int'],
'imagecolormatch' => ['bool', 'image1'=>'resource', 'image2'=>'resource'], 'imagecolormatch' => ['bool', 'image1'=>'GdImage', 'image2'=>'GdImage'],
'imagecolorresolve' => ['int|false', 'image'=>'resource', 'red'=>'int', 'green'=>'int', 'blue'=>'int'], 'imagecolorresolve' => ['int|false', 'image'=>'GdImage', 'red'=>'int', 'green'=>'int', 'blue'=>'int'],
'imagecolorresolvealpha' => ['int|false', 'image'=>'resource', 'red'=>'int', 'green'=>'int', 'blue'=>'int', 'alpha'=>'int'], 'imagecolorresolvealpha' => ['int|false', 'image'=>'GdImage', 'red'=>'int', 'green'=>'int', 'blue'=>'int', 'alpha'=>'int'],
'imagecolorset' => ['void', 'image'=>'resource', 'color'=>'int', 'red'=>'int', 'green'=>'int', 'blue'=>'int', 'alpha='=>'int'], 'imagecolorset' => ['void', 'image'=>'GdImage', 'color'=>'int', 'red'=>'int', 'green'=>'int', 'blue'=>'int', 'alpha='=>'int'],
'imagecolorsforindex' => ['array<string,int>|false', 'image'=>'resource', 'color'=>'int'], 'imagecolorsforindex' => ['array<string,int>|false', 'image'=>'GdImage', 'color'=>'int'],
'imagecolorstotal' => ['int|false', 'image'=>'resource'], 'imagecolorstotal' => ['int', 'image'=>'GdImage'],
'imagecolortransparent' => ['int|false', 'image'=>'resource', 'color='=>'int'], 'imagecolortransparent' => ['int|null', 'image'=>'GdImage', 'color='=>'int'],
'imageconvolution' => ['bool', 'image'=>'resource', 'matrix'=>'array', 'divisor'=>'float', 'offset'=>'float'], 'imageconvolution' => ['bool', 'image'=>'GdImage', 'matrix'=>'array', 'divisor'=>'float', 'offset'=>'float'],
'imagecopy' => ['bool', 'dst_image'=>'resource', 'src_image'=>'resource', 'dst_x'=>'int', 'dst_y'=>'int', 'src_x'=>'int', 'src_y'=>'int', 'src_width'=>'int', 'src_height'=>'int'], 'imagecopy' => ['bool', 'dst_image'=>'GdImage', 'src_image'=>'GdImage', 'dst_x'=>'int', 'dst_y'=>'int', 'src_x'=>'int', 'src_y'=>'int', 'src_width'=>'int', 'src_height'=>'int'],
'imagecopymerge' => ['bool', 'dst_image'=>'resource', 'src_image'=>'resource', 'dst_x'=>'int', 'dst_y'=>'int', 'src_x'=>'int', 'src_y'=>'int', 'src_width'=>'int', 'src_height'=>'int', 'pct'=>'int'], 'imagecopymerge' => ['bool', 'dst_image'=>'GdImage', 'src_image'=>'GdImage', 'dst_x'=>'int', 'dst_y'=>'int', 'src_x'=>'int', 'src_y'=>'int', 'src_width'=>'int', 'src_height'=>'int', 'pct'=>'int'],
'imagecopymergegray' => ['bool', 'dst_image'=>'resource', 'src_image'=>'resource', 'dst_x'=>'int', 'dst_y'=>'int', 'src_x'=>'int', 'src_y'=>'int', 'src_width'=>'int', 'src_height'=>'int', 'pct'=>'int'], 'imagecopymergegray' => ['bool', 'dst_image'=>'GdImage', 'src_image'=>'GdImage', 'dst_x'=>'int', 'dst_y'=>'int', 'src_x'=>'int', 'src_y'=>'int', 'src_width'=>'int', 'src_height'=>'int', 'pct'=>'int'],
'imagecopyresampled' => ['bool', 'dst_image'=>'resource', 'src_image'=>'resource', 'dst_x'=>'int', 'dst_y'=>'int', 'src_x'=>'int', 'src_y'=>'int', 'dst_width'=>'int', 'dst_height'=>'int', 'src_width'=>'int', 'src_height'=>'int'], 'imagecopyresampled' => ['bool', 'dst_image'=>'GdImage', 'src_image'=>'GdImage', 'dst_x'=>'int', 'dst_y'=>'int', 'src_x'=>'int', 'src_y'=>'int', 'dst_width'=>'int', 'dst_height'=>'int', 'src_width'=>'int', 'src_height'=>'int'],
'imagecopyresized' => ['bool', 'dst_image'=>'resource', 'src_image'=>'resource', 'dst_x'=>'int', 'dst_y'=>'int', 'src_x'=>'int', 'src_y'=>'int', 'dst_width'=>'int', 'dst_height'=>'int', 'src_width'=>'int', 'src_height'=>'int'], 'imagecopyresized' => ['bool', 'dst_image'=>'GdImage', 'src_image'=>'GdImage', 'dst_x'=>'int', 'dst_y'=>'int', 'src_x'=>'int', 'src_y'=>'int', 'dst_width'=>'int', 'dst_height'=>'int', 'src_width'=>'int', 'src_height'=>'int'],
'imagecreate' => ['resource|false', 'width'=>'int', 'height'=>'int'], 'imagecreate' => ['false|GdImage', 'width'=>'int', 'height'=>'int'],
'imagecreatefrombmp' => ['resource|false', 'filename'=>'string'], 'imagecreatefrombmp' => ['false|GdImage', 'filename'=>'string'],
'imagecreatefromgd' => ['resource|false', 'filename'=>'string'], 'imagecreatefromgd' => ['false|GdImage', 'filename'=>'string'],
'imagecreatefromgd2' => ['resource|false', 'filename'=>'string'], 'imagecreatefromgd2' => ['false|GdImage', 'filename'=>'string'],
'imagecreatefromgd2part' => ['resource|false', 'filename'=>'string', 'x'=>'int', 'y'=>'int', 'width'=>'int', 'height'=>'int'], 'imagecreatefromgd2part' => ['false|GdImage', 'filename'=>'string', 'x'=>'int', 'y'=>'int', 'width'=>'int', 'height'=>'int'],
'imagecreatefromgif' => ['resource|false', 'filename'=>'string'], 'imagecreatefromgif' => ['false|GdImage', 'filename'=>'string'],
'imagecreatefromjpeg' => ['resource|false', 'filename'=>'string'], 'imagecreatefromjpeg' => ['false|GdImage', 'filename'=>'string'],
'imagecreatefrompng' => ['resource|false', 'filename'=>'string'], 'imagecreatefrompng' => ['false|GdImage', 'filename'=>'string'],
'imagecreatefromstring' => ['resource|false', 'data'=>'string'], 'imagecreatefromstring' => ['false|GdImage', 'data'=>'string'],
'imagecreatefromwbmp' => ['resource|false', 'filename'=>'string'], 'imagecreatefromtga' => ['false|GdImage', 'filename'=>'string'],
'imagecreatefromwebp' => ['resource|false', 'filename'=>'string'], 'imagecreatefromwbmp' => ['false|GdImage', 'filename'=>'string'],
'imagecreatefromxbm' => ['resource|false', 'filename'=>'string'], 'imagecreatefromwebp' => ['false|GdImage', 'filename'=>'string'],
'imagecreatefromxpm' => ['resource|false', 'filename'=>'string'], 'imagecreatefromxbm' => ['false|GdImage', 'filename'=>'string'],
'imagecreatetruecolor' => ['resource|false', 'width'=>'int', 'height'=>'int'], 'imagecreatefromxpm' => ['false|GdImage', 'filename'=>'string'],
'imagecrop' => ['resource|false', 'image'=>'resource', 'rectangle'=>'array'], 'imagecreatetruecolor' => ['false|GdImage', 'width'=>'int', 'height'=>'int'],
'imagecropauto' => ['resource|false', 'image'=>'resource', 'mode='=>'int', 'threshold='=>'float', 'color='=>'int'], 'imagecrop' => ['false|GdImage', 'image'=>'GdImage', 'rectangle'=>'array'],
'imagedashedline' => ['bool', 'image'=>'resource', 'x1'=>'int', 'y1'=>'int', 'x2'=>'int', 'y2'=>'int', 'color'=>'int'], 'imagecropauto' => ['false|GdImage', 'image'=>'GdImage', 'mode='=>'int', 'threshold='=>'float', 'color='=>'int'],
'imagedestroy' => ['bool', 'image'=>'resource'], 'imagedashedline' => ['bool', 'image'=>'GdImage', 'x1'=>'int', 'y1'=>'int', 'x2'=>'int', 'y2'=>'int', 'color'=>'int'],
'imageellipse' => ['bool', 'image'=>'resource', 'center_x'=>'int', 'center_y'=>'int', 'width'=>'int', 'height'=>'int', 'color'=>'int'], 'imagedestroy' => ['bool', 'image'=>'GdImage'],
'imagefill' => ['bool', 'image'=>'resource', 'x'=>'int', 'y'=>'int', 'color'=>'int'], 'imageellipse' => ['bool', 'image'=>'GdImage', 'center_x'=>'int', 'center_y'=>'int', 'width'=>'int', 'height'=>'int', 'color'=>'int'],
'imagefilledarc' => ['bool', 'image'=>'resource', 'center_x'=>'int', 'center_y'=>'int', 'width'=>'int', 'height'=>'int', 'start_angle'=>'int', 'end_angle'=>'int', 'color'=>'int', 'style'=>'int'], 'imagefill' => ['bool', 'image'=>'GdImage', 'x'=>'int', 'y'=>'int', 'color'=>'int'],
'imagefilledellipse' => ['bool', 'image'=>'resource', 'center_x'=>'int', 'center_y'=>'int', 'width'=>'int', 'height'=>'int', 'color'=>'int'], 'imagefilledarc' => ['bool', 'image'=>'GdImage', 'center_x'=>'int', 'center_y'=>'int', 'width'=>'int', 'height'=>'int', 'start_angle'=>'int', 'end_angle'=>'int', 'color'=>'int', 'style'=>'int'],
'imagefilledpolygon' => ['bool', 'image'=>'resource', 'points'=>'array', 'num_points_or_color'=>'int', 'color='=>'int'], 'imagefilledellipse' => ['bool', 'image'=>'GdImage', 'center_x'=>'int', 'center_y'=>'int', 'width'=>'int', 'height'=>'int', 'color'=>'int'],
'imagefilledrectangle' => ['bool', 'image'=>'resource', 'x1'=>'int', 'y1'=>'int', 'x2'=>'int', 'y2'=>'int', 'color'=>'int'], 'imagefilledpolygon' => ['bool', 'image'=>'GdImage', 'points'=>'array', 'num_points_or_color'=>'int', 'color='=>'int'],
'imagefilltoborder' => ['bool', 'image'=>'resource', 'x'=>'int', 'y'=>'int', 'border_color'=>'int', 'color'=>'int'], 'imagefilledrectangle' => ['bool', 'image'=>'GdImage', 'x1'=>'int', 'y1'=>'int', 'x2'=>'int', 'y2'=>'int', 'color'=>'int'],
'imagefilter' => ['bool', 'image'=>'resource', 'filter'=>'int', '...args='=>'int', 'arg2='=>'int', 'arg3='=>'int', 'arg4='=>'int'], 'imagefilltoborder' => ['bool', 'image'=>'GdImage', 'x'=>'int', 'y'=>'int', 'border_color'=>'int', 'color'=>'int'],
'imageflip' => ['bool', 'image'=>'resource', 'mode'=>'int'], 'imagefilter' => ['bool', 'image'=>'GdImage', 'filter'=>'int', '...args='=>'int', 'arg2='=>'int', 'arg3='=>'int', 'arg4='=>'int'],
'imageflip' => ['bool', 'image'=>'GdImage', 'mode'=>'int'],
'imagefontheight' => ['int', 'font'=>'int'], 'imagefontheight' => ['int', 'font'=>'int'],
'imagefontwidth' => ['int', 'font'=>'int'], 'imagefontwidth' => ['int', 'font'=>'int'],
'imageftbbox' => ['array<int,int>|false', 'size'=>'float', 'angle'=>'float', 'font_filename'=>'string', 'string'=>'string', 'options='=>'array'], 'imageftbbox' => ['array<int,int>|false', 'size'=>'float', 'angle'=>'float', 'font_filename'=>'string', 'string'=>'string', 'options='=>'array'],
'imagefttext' => ['array<int,int>|false', 'image'=>'resource', 'size'=>'float', 'angle'=>'float', 'x'=>'int', 'y'=>'int', 'color'=>'int', 'font_filename'=>'string', 'text'=>'string', 'options='=>'array'], 'imagefttext' => ['array<int,int>|false', 'image'=>'GdImage', 'size'=>'float', 'angle'=>'float', 'x'=>'int', 'y'=>'int', 'color'=>'int', 'font_filename'=>'string', 'text'=>'string', 'options='=>'array'],
'imagegammacorrect' => ['bool', 'image'=>'resource', 'input_gamma'=>'float', 'output_gamma'=>'float'], 'imagegammacorrect' => ['bool', 'image'=>'GdImage', 'input_gamma'=>'float', 'output_gamma'=>'float'],
'imagegd' => ['bool', 'image'=>'resource', 'file='=>'?string'], 'imagegd' => ['bool', 'image'=>'GdImage', 'file='=>'string'],
'imagegd2' => ['bool', 'image'=>'resource', 'file='=>'?string', 'chunk_size='=>'int', 'mode='=>'int'], 'imagegd2' => ['bool', 'image'=>'GdImage', 'file='=>'string', 'chunk_size='=>'int', 'mode='=>'int'],
'imagegetclip' => ['array<int,int>|false', 'image'=>'resource'], 'imagegetclip' => ['array<int,int>', 'image'=>'GdImage'],
'imagegif' => ['bool', 'image'=>'resource', 'file='=>'?string'], 'imagegetinterpolation' => ['int', 'image'=>'GdImage'],
'imagegrabscreen' => ['false|resource'], 'imagegif' => ['bool', 'image'=>'GdImage', 'file='=>'?string'],
'imagegrabwindow' => ['false|resource', 'handle'=>'int', 'client_area='=>'bool'], 'imagegrabscreen' => ['false|GdImage'],
'imageinterlace' => ['int|false', 'image'=>'resource', 'enable='=>'?bool'], 'imagegrabwindow' => ['false|GdImage', 'handle'=>'int', 'client_area='=>'bool'],
'imageistruecolor' => ['bool', 'image'=>'resource'], 'imageinterlace' => ['int', 'image'=>'GdImage', 'enable='=>'?bool'],
'imagejpeg' => ['bool', 'image'=>'resource', 'file='=>'?string', 'quality='=>'int'], 'imageistruecolor' => ['bool', 'image'=>'GdImage'],
'imagelayereffect' => ['bool', 'image'=>'resource', 'effect'=>'int'], 'imagejpeg' => ['bool', 'image'=>'GdImage', 'file='=>'?string', 'quality='=>'int'],
'imageline' => ['bool', 'image'=>'resource', 'x1'=>'int', 'y1'=>'int', 'x2'=>'int', 'y2'=>'int', 'color'=>'int'], 'imagelayereffect' => ['bool', 'image'=>'GdImage', 'effect'=>'int'],
'imageline' => ['bool', 'image'=>'GdImage', 'x1'=>'int', 'y1'=>'int', 'x2'=>'int', 'y2'=>'int', 'color'=>'int'],
'imageloadfont' => ['int|false', 'filename'=>'string'], 'imageloadfont' => ['int|false', 'filename'=>'string'],
'imageObj::pasteImage' => ['void', 'srcImg'=>'imageObj', 'transparentColorHex'=>'int', 'dstX'=>'int', 'dstY'=>'int', 'angle'=>'int'], 'imageObj::pasteImage' => ['void', 'srcImg'=>'imageObj', 'transparentColorHex'=>'int', 'dstX'=>'int', 'dstY'=>'int', 'angle'=>'int'],
'imageObj::saveImage' => ['int', 'filename'=>'string', 'oMap'=>'mapObj'], 'imageObj::saveImage' => ['int', 'filename'=>'string', 'oMap'=>'mapObj'],
'imageObj::saveWebImage' => ['string'], 'imageObj::saveWebImage' => ['string'],
'imageopenpolygon' => ['bool', 'image'=>'resource', 'points'=>'array', 'num_points_or_color'=>'int', 'color='=>'int'], 'imageopenpolygon' => ['bool', 'image'=>'GdImage', 'points'=>'array', 'num_points_or_color'=>'int', 'color='=>'int'],
'imagepalettecopy' => ['void', 'dst'=>'resource', 'src'=>'resource'], 'imagepalettecopy' => ['void', 'dst'=>'GdImage', 'src'=>'GdImage'],
'imagepalettetotruecolor' => ['bool', 'image'=>'resource'], 'imagepalettetotruecolor' => ['bool', 'image'=>'GdImage'],
'imagepng' => ['bool', 'image'=>'resource', 'file='=>'?string', 'quality='=>'int', 'filters='=>'int'], 'imagepng' => ['bool', 'image'=>'GdImage', 'file='=>'?string', 'quality='=>'int', 'filters='=>'int'],
'imagepolygon' => ['bool', 'image'=>'resource', 'points'=>'array', 'num_points_or_color'=>'int', 'color='=>'int'], 'imagepolygon' => ['bool', 'image'=>'GdImage', 'points'=>'array', 'num_points_or_color'=>'int', 'color='=>'int'],
'imagerectangle' => ['bool', 'image'=>'resource', 'x1'=>'int', 'y1'=>'int', 'x2'=>'int', 'y2'=>'int', 'color'=>'int'], 'imagerectangle' => ['bool', 'image'=>'GdImage', 'x1'=>'int', 'y1'=>'int', 'x2'=>'int', 'y2'=>'int', 'color'=>'int'],
'imageresolution' => ['array<int,int>|bool', 'image'=>'resource', 'resolution_x='=>'int', 'resolution_y='=>'int'], 'imageresolution' => ['array<int,int>|bool', 'image'=>'GdImage', 'resolution_x='=>'int', 'resolution_y='=>'int'],
'imagerotate' => ['resource|false', 'image'=>'resource', 'angle'=>'float', 'background_color'=>'int', 'ignore_transparent='=>'bool'], 'imagerotate' => ['false|GdImage', 'image'=>'GdImage', 'angle'=>'float', 'background_color'=>'int', 'ignore_transparent='=>'bool'],
'imagesavealpha' => ['bool', 'image'=>'resource', 'enable'=>'bool'], 'imagesavealpha' => ['bool', 'image'=>'GdImage', 'enable'=>'bool'],
'imagescale' => ['resource|false', 'image'=>'resource', 'width'=>'int', 'height='=>'int', 'mode='=>'int'], 'imagescale' => ['false|GdImage', 'image'=>'GdImage', 'width'=>'int', 'height='=>'int', 'mode='=>'int'],
'imagesetbrush' => ['bool', 'image'=>'resource', 'brush'=>'resource'], 'imagesetbrush' => ['bool', 'image'=>'GdImage', 'brush'=>'GdImage'],
'imagesetclip' => ['bool', 'image'=>'resource', 'x1'=>'int', 'x2'=>'int', 'y1'=>'int', 'y2'=>'int'], 'imagesetclip' => ['bool', 'image'=>'GdImage', 'x1'=>'int', 'y1'=>'int', 'x2'=>'int', 'y2'=>'int'],
'imagesetinterpolation' => ['bool', 'image'=>'resource', 'method='=>'int'], 'imagesetinterpolation' => ['bool', 'image'=>'GdImage', 'method='=>'int'],
'imagesetpixel' => ['bool', 'image'=>'resource', 'x'=>'int', 'y'=>'int', 'color'=>'int'], 'imagesetpixel' => ['bool', 'image'=>'GdImage', 'x'=>'int', 'y'=>'int', 'color'=>'int'],
'imagesetstyle' => ['bool', 'image'=>'resource', 'style'=>'non-empty-array'], 'imagesetstyle' => ['bool', 'image'=>'GdImage', 'style'=>'non-empty-array'],
'imagesetthickness' => ['bool', 'image'=>'resource', 'thickness'=>'int'], 'imagesetthickness' => ['bool', 'image'=>'GdImage', 'thickness'=>'int'],
'imagesettile' => ['bool', 'image'=>'resource', 'tile'=>'resource'], 'imagesettile' => ['bool', 'image'=>'GdImage', 'tile'=>'GdImage'],
'imagestring' => ['bool', 'image'=>'resource', 'font'=>'int', 'x'=>'int', 'y'=>'int', 'string'=>'string', 'color'=>'int'], 'imagestring' => ['bool', 'image'=>'GdImage', 'font'=>'int', 'x'=>'int', 'y'=>'int', 'string'=>'string', 'color'=>'int'],
'imagestringup' => ['bool', 'image'=>'resource', 'font'=>'int', 'x'=>'int', 'y'=>'int', 'string'=>'string', 'color'=>'int'], 'imagestringup' => ['bool', 'image'=>'GdImage', 'font'=>'int', 'x'=>'int', 'y'=>'int', 'string'=>'string', 'color'=>'int'],
'imagesx' => ['int|false', 'image'=>'resource'], 'imagesx' => ['int', 'image'=>'GdImage'],
'imagesy' => ['int|false', 'image'=>'resource'], 'imagesy' => ['int', 'image'=>'GdImage'],
'imagetruecolortopalette' => ['bool', 'image'=>'resource', 'dither'=>'bool', 'num_colors'=>'int'], 'imagetruecolortopalette' => ['bool', 'image'=>'GdImage', 'dither'=>'bool', 'num_colors'=>'int'],
'imagettfbbox' => ['false|array<int,int>', 'size'=>'float', 'angle'=>'float', 'font_filename'=>'string', 'string'=>'string', 'options='=>'array'], 'imagettfbbox' => ['false|array<int,int>', 'size'=>'float', 'angle'=>'float', 'font_filename'=>'string', 'string'=>'string', 'options='=>'array'],
'imagettftext' => ['false|array<int,int>', 'image'=>'resource', 'size'=>'float', 'angle'=>'float', 'x'=>'int', 'y'=>'int', 'color'=>'int', 'font_filename'=>'string', 'text'=>'string', 'options='=>'array'], 'imagettftext' => ['false|array<int,int>', 'image'=>'GdImage', 'size'=>'float', 'angle'=>'float', 'x'=>'int', 'y'=>'int', 'color'=>'int', 'font_filename'=>'string', 'text'=>'string', 'options='=>'array'],
'imagetypes' => ['int'], 'imagetypes' => ['int'],
'imagewbmp' => ['bool', 'image'=>'resource', 'file='=>'?string', 'foreground_color='=>'int'], 'imagewbmp' => ['bool', 'image'=>'GdImage', 'file='=>'?string', 'foreground_color='=>'int'],
'imagewebp' => ['bool', 'image'=>'resource', 'file='=>'?string', 'quality='=>'int'], 'imagewebp' => ['bool', 'image'=>'GdImage', 'file='=>'?string', 'quality='=>'int'],
'imagexbm' => ['bool', 'image'=>'resource', 'filename'=>'?string', 'foreground_color='=>'int'], 'imagexbm' => ['bool', 'image'=>'GdImage', 'filename'=>'?string', 'foreground_color='=>'int'],
'Imagick::__construct' => ['void', 'files='=>'string|string[]'], 'Imagick::__construct' => ['void', 'files='=>'string|string[]'],
'Imagick::__toString' => ['string'], 'Imagick::__toString' => ['string'],
'Imagick::adaptiveBlurImage' => ['bool', 'radius'=>'float', 'sigma'=>'float', 'channel='=>'int'], 'Imagick::adaptiveBlurImage' => ['bool', 'radius'=>'float', 'sigma'=>'float', 'channel='=>'int'],
@@ -6485,7 +6506,7 @@ return [
'imap_mail_compose' => ['string|false', 'envelope'=>'array', 'bodies'=>'array'], 'imap_mail_compose' => ['string|false', 'envelope'=>'array', 'bodies'=>'array'],
'imap_mail_copy' => ['bool', 'imap'=>'resource', 'message_nums'=>'string', 'mailbox'=>'string', 'flags='=>'int'], 'imap_mail_copy' => ['bool', 'imap'=>'resource', 'message_nums'=>'string', 'mailbox'=>'string', 'flags='=>'int'],
'imap_mail_move' => ['bool', 'imap'=>'resource', 'message_nums'=>'string', 'mailbox'=>'string', 'flags='=>'int'], 'imap_mail_move' => ['bool', 'imap'=>'resource', 'message_nums'=>'string', 'mailbox'=>'string', 'flags='=>'int'],
'imap_mailboxmsginfo' => ['stdClass|false', 'imap'=>'resource'], 'imap_mailboxmsginfo' => ['stdClass', 'imap'=>'resource'],
'imap_mime_header_decode' => ['array|false', 'string'=>'string'], 'imap_mime_header_decode' => ['array|false', 'string'=>'string'],
'imap_msgno' => ['int|false', 'imap'=>'resource', 'message_uid'=>'int'], 'imap_msgno' => ['int|false', 'imap'=>'resource', 'message_uid'=>'int'],
'imap_mutf7_to_utf8' => ['string|false', 'string'=>'string'], 'imap_mutf7_to_utf8' => ['string|false', 'string'=>'string'],
@@ -6533,10 +6554,10 @@ return [
'InfiniteIterator::next' => ['void'], 'InfiniteIterator::next' => ['void'],
'InfiniteIterator::rewind' => ['void'], 'InfiniteIterator::rewind' => ['void'],
'InfiniteIterator::valid' => ['bool'], 'InfiniteIterator::valid' => ['bool'],
'inflate_add' => ['string|false', 'context'=>'resource', 'data'=>'string', 'flush_mode='=>'int'], 'inflate_add' => ['string|false', 'context'=>'InflateContext', 'data'=>'string', 'flush_mode='=>'int'],
'inflate_get_read_len' => ['int|false', 'context'=>'resource'], 'inflate_get_read_len' => ['int', 'context'=>'InflateContext'],
'inflate_get_status' => ['int|false', 'context'=>'resource'], 'inflate_get_status' => ['int', 'context'=>'InflateContext'],
'inflate_init' => ['resource|false', 'encoding'=>'int', 'options='=>'array'], 'inflate_init' => ['InflateContext|false', 'encoding'=>'int', 'options='=>'array'],
'ingres_autocommit' => ['bool', 'link'=>'resource'], 'ingres_autocommit' => ['bool', 'link'=>'resource'],
'ingres_autocommit_state' => ['bool', 'link'=>'resource'], 'ingres_autocommit_state' => ['bool', 'link'=>'resource'],
'ingres_charset' => ['string', 'link'=>'resource'], 'ingres_charset' => ['string', 'link'=>'resource'],
@@ -7028,7 +7049,6 @@ return [
'jobqueue_license_info' => ['array'], 'jobqueue_license_info' => ['array'],
'join' => ['string', 'separator'=>'string', 'array'=>'array'], 'join' => ['string', 'separator'=>'string', 'array'=>'array'],
'join\'1' => ['string', 'separator'=>'array'], 'join\'1' => ['string', 'separator'=>'array'],
'jpeg2wbmp' => ['bool', 'jpegname'=>'string', 'wbmpname'=>'string', 'dest_height'=>'int', 'dest_width'=>'int', 'threshold'=>'int'],
'json_decode' => ['mixed', 'json'=>'string', 'associative='=>'bool', 'depth='=>'int', 'flags='=>'int'], 'json_decode' => ['mixed', 'json'=>'string', 'associative='=>'bool', 'depth='=>'int', 'flags='=>'int'],
'json_encode' => ['string|false', 'value'=>'mixed', 'flags='=>'int', 'depth='=>'int'], 'json_encode' => ['string|false', 'value'=>'mixed', 'flags='=>'int', 'depth='=>'int'],
'json_last_error' => ['int'], 'json_last_error' => ['int'],
@@ -7208,7 +7228,7 @@ return [
'ldap_connect' => ['resource|false', 'uri='=>'string', 'port='=>'int', 'wallet='=>'string', 'password='=>'string', 'auth_mode='=>'int'], 'ldap_connect' => ['resource|false', 'uri='=>'string', 'port='=>'int', 'wallet='=>'string', 'password='=>'string', 'auth_mode='=>'int'],
'ldap_control_paged_result' => ['bool', 'link_identifier'=>'resource', 'pagesize'=>'int', 'iscritical='=>'bool', 'cookie='=>'string'], 'ldap_control_paged_result' => ['bool', 'link_identifier'=>'resource', 'pagesize'=>'int', 'iscritical='=>'bool', 'cookie='=>'string'],
'ldap_control_paged_result_response' => ['bool', 'link_identifier'=>'resource', 'result_identifier'=>'resource', '&w_cookie'=>'string', '&w_estimated'=>'int'], 'ldap_control_paged_result_response' => ['bool', 'link_identifier'=>'resource', 'result_identifier'=>'resource', '&w_cookie'=>'string', '&w_estimated'=>'int'],
'ldap_count_entries' => ['int|false', 'ldap'=>'resource', 'result'=>'resource'], 'ldap_count_entries' => ['int', 'ldap'=>'resource', 'result'=>'resource'],
'ldap_delete' => ['bool', 'ldap'=>'resource', 'dn'=>'string'], 'ldap_delete' => ['bool', 'ldap'=>'resource', 'dn'=>'string'],
'ldap_delete_ext' => ['resource|false', 'ldap'=>'resource', 'dn'=>'string', 'controls='=>'array'], 'ldap_delete_ext' => ['resource|false', 'ldap'=>'resource', 'dn'=>'string', 'controls='=>'array'],
'ldap_dn2ufn' => ['string', 'dn'=>'string'], 'ldap_dn2ufn' => ['string', 'dn'=>'string'],
@@ -7224,8 +7244,8 @@ return [
'ldap_first_attribute' => ['string|false', 'ldap'=>'resource', 'entry'=>'resource'], 'ldap_first_attribute' => ['string|false', 'ldap'=>'resource', 'entry'=>'resource'],
'ldap_first_entry' => ['resource|false', 'ldap'=>'resource', 'result'=>'resource'], 'ldap_first_entry' => ['resource|false', 'ldap'=>'resource', 'result'=>'resource'],
'ldap_first_reference' => ['resource|false', 'ldap'=>'resource', 'result'=>'resource'], 'ldap_first_reference' => ['resource|false', 'ldap'=>'resource', 'result'=>'resource'],
'ldap_free_result' => ['bool', 'ldap'=>'resource'], 'ldap_free_result' => ['bool', 'result'=>'resource'],
'ldap_get_attributes' => ['array|false', 'ldap'=>'resource', 'entry'=>'resource'], 'ldap_get_attributes' => ['array', 'ldap'=>'resource', 'entry'=>'resource'],
'ldap_get_dn' => ['string|false', 'ldap'=>'resource', 'entry'=>'resource'], 'ldap_get_dn' => ['string|false', 'ldap'=>'resource', 'entry'=>'resource'],
'ldap_get_entries' => ['array|false', 'ldap'=>'resource', 'result'=>'resource'], 'ldap_get_entries' => ['array|false', 'ldap'=>'resource', 'result'=>'resource'],
'ldap_get_option' => ['bool', 'ldap'=>'resource', 'option'=>'int', '&w_value='=>'array|int|string'], 'ldap_get_option' => ['bool', 'ldap'=>'resource', 'option'=>'int', '&w_value='=>'array|int|string'],
@@ -7241,7 +7261,7 @@ return [
'ldap_modify' => ['bool', 'ldap'=>'resource', 'dn'=>'string', 'entry'=>'array'], 'ldap_modify' => ['bool', 'ldap'=>'resource', 'dn'=>'string', 'entry'=>'array'],
'ldap_modify_batch' => ['bool', 'ldap'=>'resource', 'dn'=>'string', 'modifications_info'=>'array'], 'ldap_modify_batch' => ['bool', 'ldap'=>'resource', 'dn'=>'string', 'modifications_info'=>'array'],
'ldap_next_attribute' => ['string|false', 'ldap'=>'resource', 'entry'=>'resource'], 'ldap_next_attribute' => ['string|false', 'ldap'=>'resource', 'entry'=>'resource'],
'ldap_next_entry' => ['resource|false', 'ldap'=>'resource', 'result'=>'resource'], 'ldap_next_entry' => ['resource|false', 'ldap'=>'resource', 'entry'=>'resource'],
'ldap_next_reference' => ['resource|false', 'ldap'=>'resource', 'entry'=>'resource'], 'ldap_next_reference' => ['resource|false', 'ldap'=>'resource', 'entry'=>'resource'],
'ldap_parse_exop' => ['bool', 'ldap'=>'resource', 'result'=>'resource', '&w_response_data='=>'string', '&w_response_oid='=>'string'], 'ldap_parse_exop' => ['bool', 'ldap'=>'resource', 'result'=>'resource', '&w_response_data='=>'string', '&w_response_oid='=>'string'],
'ldap_parse_reference' => ['bool', 'ldap'=>'resource', 'entry'=>'resource', '&referrals'=>'array'], 'ldap_parse_reference' => ['bool', 'ldap'=>'resource', 'entry'=>'resource', '&referrals'=>'array'],
@@ -7253,7 +7273,6 @@ return [
'ldap_search' => ['resource|false', 'ldap'=>'resource|resource[]', 'base'=>'string', 'filter'=>'string', 'attributes='=>'array', 'attributes_only='=>'int', 'sizelimit='=>'int', 'timelimit='=>'int', 'deref='=>'int'], 'ldap_search' => ['resource|false', 'ldap'=>'resource|resource[]', 'base'=>'string', 'filter'=>'string', 'attributes='=>'array', 'attributes_only='=>'int', 'sizelimit='=>'int', 'timelimit='=>'int', 'deref='=>'int'],
'ldap_set_option' => ['bool', 'ldap'=>'resource', 'option'=>'int', 'value'=>'array|bool|int|string'], 'ldap_set_option' => ['bool', 'ldap'=>'resource', 'option'=>'int', 'value'=>'array|bool|int|string'],
'ldap_set_rebind_proc' => ['bool', 'ldap'=>'resource', 'callback'=>'?callable'], 'ldap_set_rebind_proc' => ['bool', 'ldap'=>'resource', 'callback'=>'?callable'],
'ldap_sort' => ['bool', 'link_identifier'=>'resource', 'result_identifier'=>'resource', 'sortfilter'=>'string'],
'ldap_start_tls' => ['bool', 'ldap'=>'resource'], 'ldap_start_tls' => ['bool', 'ldap'=>'resource'],
'ldap_t61_to_8859' => ['string', 'value'=>'string'], 'ldap_t61_to_8859' => ['string', 'value'=>'string'],
'ldap_unbind' => ['bool', 'ldap'=>'resource'], 'ldap_unbind' => ['bool', 'ldap'=>'resource'],
@@ -7719,18 +7738,18 @@ return [
'MaxMind\Db\Reader\Metadata::__construct' => ['void', 'metadata'=>'array'], 'MaxMind\Db\Reader\Metadata::__construct' => ['void', 'metadata'=>'array'],
'mb_check_encoding' => ['bool', 'value='=>'string', 'encoding='=>'string'], 'mb_check_encoding' => ['bool', 'value='=>'string', 'encoding='=>'string'],
'mb_chr' => ['string|false', 'codepoint'=>'int', 'encoding='=>'string'], 'mb_chr' => ['string|false', 'codepoint'=>'int', 'encoding='=>'string'],
'mb_convert_case' => ['string|false', 'string'=>'string', 'mode'=>'int', 'encoding='=>'string'], 'mb_convert_case' => ['string', 'string'=>'string', 'mode'=>'int', 'encoding='=>'string'],
'mb_convert_encoding' => ['string|false', 'string'=>'string', 'to_encoding'=>'string', 'from_encoding='=>'string|string[]'], 'mb_convert_encoding' => ['string|false', 'string'=>'string', 'to_encoding'=>'string', 'from_encoding='=>'string|string[]'],
'mb_convert_kana' => ['string|false', 'string'=>'string', 'mode='=>'string', 'encoding='=>'string'], 'mb_convert_kana' => ['string', 'string'=>'string', 'mode='=>'string', 'encoding='=>'string'],
'mb_convert_variables' => ['string|false', 'to_encoding'=>'string', 'from_encoding'=>'array|string', '&rw_var'=>'string|array|object', '&...rw_vars='=>'string|array|object'], 'mb_convert_variables' => ['string|false', 'to_encoding'=>'string', 'from_encoding'=>'array|string', '&rw_var'=>'string|array|object', '&...rw_vars='=>'string|array|object'],
'mb_decode_mimeheader' => ['string', 'string'=>'string'], 'mb_decode_mimeheader' => ['string', 'string'=>'string'],
'mb_decode_numericentity' => ['string|false', 'string'=>'string', 'map'=>'array', 'encoding='=>'string', 'is_hex='=>'bool'], 'mb_decode_numericentity' => ['string', 'string'=>'string', 'map'=>'array', 'encoding='=>'string'],
'mb_detect_encoding' => ['string|false', 'string'=>'string', 'encodings='=>'?string[]|?string', 'strict='=>'bool'], 'mb_detect_encoding' => ['string|false', 'string'=>'string', 'encodings='=>'?string[]|?string', 'strict='=>'bool'],
'mb_detect_order' => ['bool|list<string>', 'encoding='=>'?string[]|?string'], 'mb_detect_order' => ['bool|list<string>', 'encoding='=>'?string[]|?string'],
'mb_encode_mimeheader' => ['string|false', 'string'=>'string', 'charset='=>'string', 'transfer_encoding='=>'string', 'newline='=>'string', 'indent='=>'int'], 'mb_encode_mimeheader' => ['string', 'string'=>'string', 'charset='=>'string', 'transfer_encoding='=>'string', 'newline='=>'string', 'indent='=>'int'],
'mb_encode_numericentity' => ['string|false', 'string'=>'string', 'map'=>'array', 'encoding='=>'string', 'hex='=>'bool'], 'mb_encode_numericentity' => ['string', 'string'=>'string', 'map'=>'array', 'encoding='=>'string', 'hex='=>'bool'],
'mb_encoding_aliases' => ['list<string>|false', 'encoding'=>'string'], 'mb_encoding_aliases' => ['list<string>', 'encoding'=>'string'],
'mb_ereg' => ['int|false', 'pattern'=>'string', 'string'=>'string', '&w_matches='=>'array'], 'mb_ereg' => ['bool', 'pattern'=>'string', 'string'=>'string', '&w_matches='=>'array'],
'mb_ereg_match' => ['bool', 'pattern'=>'string', 'string'=>'string', 'options='=>'string'], 'mb_ereg_match' => ['bool', 'pattern'=>'string', 'string'=>'string', 'options='=>'string'],
'mb_ereg_replace' => ['string|false', 'pattern'=>'string', 'replacement'=>'string', 'string'=>'string', 'options='=>'string'], 'mb_ereg_replace' => ['string|false', 'pattern'=>'string', 'replacement'=>'string', 'string'=>'string', 'options='=>'string'],
'mb_ereg_replace_callback' => ['string|false', 'pattern'=>'string', 'callback'=>'callable', 'string'=>'string', 'options='=>'string'], 'mb_ereg_replace_callback' => ['string|false', 'pattern'=>'string', 'callback'=>'callable', 'string'=>'string', 'options='=>'string'],
@@ -7741,7 +7760,7 @@ return [
'mb_ereg_search_pos' => ['array<int,int>|false', 'pattern='=>'string', 'options='=>'string'], 'mb_ereg_search_pos' => ['array<int,int>|false', 'pattern='=>'string', 'options='=>'string'],
'mb_ereg_search_regs' => ['array<int,bool|string>|false', 'pattern='=>'string', 'options='=>'string'], 'mb_ereg_search_regs' => ['array<int,bool|string>|false', 'pattern='=>'string', 'options='=>'string'],
'mb_ereg_search_setpos' => ['bool', 'offset'=>'int'], 'mb_ereg_search_setpos' => ['bool', 'offset'=>'int'],
'mb_eregi' => ['int|false', 'pattern'=>'string', 'string'=>'string', '&w_matches='=>'array'], 'mb_eregi' => ['bool', 'pattern'=>'string', 'string'=>'string', '&w_matches='=>'array'],
'mb_eregi_replace' => ['string|false', 'pattern'=>'string', 'replacement'=>'string', 'string'=>'string', 'options='=>'string'], 'mb_eregi_replace' => ['string|false', 'pattern'=>'string', 'replacement'=>'string', 'string'=>'string', 'options='=>'string'],
'mb_get_info' => ['array[]|false|int|int[]|string|string[]', 'type='=>'string'], 'mb_get_info' => ['array[]|false|int|int[]|string|string[]', 'type='=>'string'],
'mb_http_input' => ['string|false', 'type='=>'string'], 'mb_http_input' => ['string|false', 'type='=>'string'],
@@ -7755,26 +7774,26 @@ return [
'mb_preferred_mime_name' => ['string|false', 'encoding'=>'string'], 'mb_preferred_mime_name' => ['string|false', 'encoding'=>'string'],
'mb_regex_encoding' => ['string|bool', 'encoding='=>'string'], 'mb_regex_encoding' => ['string|bool', 'encoding='=>'string'],
'mb_regex_set_options' => ['string', 'options='=>'string'], 'mb_regex_set_options' => ['string', 'options='=>'string'],
'mb_scrub' => ['string|false', 'string'=>'string', 'encoding='=>'string'], 'mb_scrub' => ['string', 'string'=>'string', 'encoding='=>'string'],
'mb_send_mail' => ['bool', 'to'=>'string', 'subject'=>'string', 'message'=>'string', 'additional_headers='=>'string', 'additional_params='=>'string'], 'mb_send_mail' => ['bool', 'to'=>'string', 'subject'=>'string', 'message'=>'string', 'additional_headers='=>'string', 'additional_params='=>'string'],
'mb_split' => ['list<string>', 'pattern'=>'string', 'string'=>'string', 'limit='=>'int'], 'mb_split' => ['list<string>', 'pattern'=>'string', 'string'=>'string', 'limit='=>'int'],
'mb_strcut' => ['string|false', 'string'=>'string', 'start'=>'int', 'length='=>'int', 'encoding='=>'string'], 'mb_strcut' => ['string', 'string'=>'string', 'start'=>'int', 'length='=>'int', 'encoding='=>'string'],
'mb_strimwidth' => ['string|false', 'string'=>'string', 'start'=>'int', 'width'=>'int', 'trim_marker='=>'string', 'encoding='=>'string'], 'mb_strimwidth' => ['string', 'string'=>'string', 'start'=>'int', 'width'=>'int', 'trim_marker='=>'string', 'encoding='=>'string'],
'mb_stripos' => ['int|false', 'haystack'=>'string', 'needle'=>'string', 'offset='=>'int', 'encoding='=>'string'], 'mb_stripos' => ['int|false', 'haystack'=>'string', 'needle'=>'string', 'offset='=>'int', 'encoding='=>'string'],
'mb_stristr' => ['string|false', 'haystack'=>'string', 'needle'=>'string', 'before_needle='=>'bool', 'encoding='=>'string'], 'mb_stristr' => ['string|false', 'haystack'=>'string', 'needle'=>'string', 'before_needle='=>'bool', 'encoding='=>'string'],
'mb_strlen' => ['int|false', 'string'=>'string', 'encoding='=>'string'], 'mb_strlen' => ['int', 'string'=>'string', 'encoding='=>'string'],
'mb_strpos' => ['int|false', 'haystack'=>'string', 'needle'=>'string', 'offset='=>'int', 'encoding='=>'string'], 'mb_strpos' => ['int|false', 'haystack'=>'string', 'needle'=>'string', 'offset='=>'int', 'encoding='=>'string'],
'mb_strrchr' => ['string|false', 'haystack'=>'string', 'needle'=>'string', 'before_needle='=>'bool', 'encoding='=>'string'], 'mb_strrchr' => ['string|false', 'haystack'=>'string', 'needle'=>'string', 'before_needle='=>'bool', 'encoding='=>'string'],
'mb_strrichr' => ['string|false', 'haystack'=>'string', 'needle'=>'string', 'before_needle='=>'bool', 'encoding='=>'string'], 'mb_strrichr' => ['string|false', 'haystack'=>'string', 'needle'=>'string', 'before_needle='=>'bool', 'encoding='=>'string'],
'mb_strripos' => ['int|false', 'haystack'=>'string', 'needle'=>'string', 'offset='=>'int', 'encoding='=>'string'], 'mb_strripos' => ['int|false', 'haystack'=>'string', 'needle'=>'string', 'offset='=>'int', 'encoding='=>'string'],
'mb_strrpos' => ['int|false', 'haystack'=>'string', 'needle'=>'string', 'offset='=>'int', 'encoding='=>'string'], 'mb_strrpos' => ['int|false', 'haystack'=>'string', 'needle'=>'string', 'offset='=>'int', 'encoding='=>'string'],
'mb_strstr' => ['string|false', 'haystack'=>'string', 'needle'=>'string', 'before_needle='=>'bool', 'encoding='=>'string'], 'mb_strstr' => ['string|false', 'haystack'=>'string', 'needle'=>'string', 'before_needle='=>'bool', 'encoding='=>'string'],
'mb_strtolower' => ['string|false', 'string'=>'string', 'encoding='=>'string'], 'mb_strtolower' => ['string', 'string'=>'string', 'encoding='=>'string'],
'mb_strtoupper' => ['string|false', 'string'=>'string', 'encoding='=>'string'], 'mb_strtoupper' => ['string', 'string'=>'string', 'encoding='=>'string'],
'mb_strwidth' => ['int|false', 'string'=>'string', 'encoding='=>'string'], 'mb_strwidth' => ['int', 'string'=>'string', 'encoding='=>'string'],
'mb_substitute_character' => ['bool|int|string', 'substitute_character='=>'?int|?string'], 'mb_substitute_character' => ['bool|int|string', 'substitute_character='=>'?int|?string'],
'mb_substr' => ['string|false', 'string'=>'string', 'start'=>'int', 'length='=>'?int', 'encoding='=>'string'], 'mb_substr' => ['string', 'string'=>'string', 'start'=>'int', 'length='=>'?int', 'encoding='=>'string'],
'mb_substr_count' => ['int|false', 'haystack'=>'string', 'needle'=>'string', 'encoding='=>'string'], 'mb_substr_count' => ['int', 'haystack'=>'string', 'needle'=>'string', 'encoding='=>'string'],
'mcrypt_cbc' => ['string', 'cipher'=>'string|int', 'key'=>'string', 'data'=>'string', 'mode'=>'int', 'iv='=>'string'], 'mcrypt_cbc' => ['string', 'cipher'=>'string|int', 'key'=>'string', 'data'=>'string', 'mode'=>'int', 'iv='=>'string'],
'mcrypt_cfb' => ['string', 'cipher'=>'string|int', 'key'=>'string', 'data'=>'string', 'mode'=>'int', 'iv='=>'string'], 'mcrypt_cfb' => ['string', 'cipher'=>'string|int', 'key'=>'string', 'data'=>'string', 'mode'=>'int', 'iv='=>'string'],
'mcrypt_create_iv' => ['string|false', 'size'=>'int', 'source='=>'int'], 'mcrypt_create_iv' => ['string|false', 'size'=>'int', 'source='=>'int'],
@@ -8690,13 +8709,12 @@ return [
'msession_timeout' => ['int', 'session'=>'string', 'param='=>'int'], 'msession_timeout' => ['int', 'session'=>'string', 'param='=>'int'],
'msession_uniq' => ['string', 'param'=>'int', 'classname='=>'string', 'data='=>'string'], 'msession_uniq' => ['string', 'param'=>'int', 'classname='=>'string', 'data='=>'string'],
'msession_unlock' => ['int', 'session'=>'string', 'key'=>'int'], 'msession_unlock' => ['int', 'session'=>'string', 'key'=>'int'],
'msg_get_queue' => ['resource', 'key'=>'int', 'permissions='=>'int'], 'msg_get_queue' => ['SysvMessageQueue', 'key'=>'int', 'permissions='=>'int'],
'msg_queue_exists' => ['bool', 'key'=>'int'], 'msg_queue_exists' => ['bool', 'key'=>'int'],
'msg_receive' => ['bool', 'queue'=>'resource', 'desired_message_type'=>'int', '&w_received_message_type'=>'int', 'max_message_size'=>'int', '&w_message'=>'mixed', 'unserialize='=>'bool', 'flags='=>'int', '&w_error_code='=>'int'], 'msg_remove_queue' => ['bool', 'queue'=>'SysvMessageQueue'],
'msg_remove_queue' => ['bool', 'queue'=>'resource'], 'msg_send' => ['bool', 'queue'=>'SysvMessageQueue', 'message_type'=>'int', 'message'=>'array|object|bool|float|int|string|null', 'serialize='=>'bool', 'blocking='=>'bool', '&w_error_code='=>'int'],
'msg_send' => ['bool', 'queue'=>'resource', 'message_type'=>'int', 'message'=>'array|object|bool|float|int|string|null', 'serialize='=>'bool', 'blocking='=>'bool', '&w_error_code='=>'int'], 'msg_set_queue' => ['bool', 'queue'=>'SysvMessageQueue', 'data'=>'array'],
'msg_set_queue' => ['bool', 'queue'=>'resource', 'data'=>'array'], 'msg_stat_queue' => ['array', 'queue'=>'SysvMessageQueue'],
'msg_stat_queue' => ['array', 'queue'=>'resource'],
'msgfmt_create' => ['MessageFormatter', 'locale'=>'string', 'pattern'=>'string'], 'msgfmt_create' => ['MessageFormatter', 'locale'=>'string', 'pattern'=>'string'],
'msgfmt_format' => ['string|false', 'formatter'=>'MessageFormatter', 'values'=>'array'], 'msgfmt_format' => ['string|false', 'formatter'=>'MessageFormatter', 'values'=>'array'],
'msgfmt_format_message' => ['string|false', 'locale'=>'string', 'pattern'=>'string', 'values'=>'array'], 'msgfmt_format_message' => ['string|false', 'locale'=>'string', 'pattern'=>'string', 'values'=>'array'],
@@ -8950,7 +8968,7 @@ return [
'mysqli::next_result' => ['bool'], 'mysqli::next_result' => ['bool'],
'mysqli::options' => ['bool', 'option'=>'int', 'value'=>'mixed'], 'mysqli::options' => ['bool', 'option'=>'int', 'value'=>'mixed'],
'mysqli::ping' => ['bool'], 'mysqli::ping' => ['bool'],
'mysqli::poll' => ['int|false', '&w_read'=>'array', '&w_write'=>'array', '&w_error'=>'array', 'seconds'=>'int', 'microseconds='=>'int'], 'mysqli::poll' => ['int|false', '&w_read'=>'array', '&w_error'=>'array', '&w_reject'=>'array', 'seconds'=>'int', 'microseconds='=>'int'],
'mysqli::prepare' => ['mysqli_stmt|false', 'query'=>'string'], 'mysqli::prepare' => ['mysqli_stmt|false', 'query'=>'string'],
'mysqli::query' => ['bool|mysqli_result', 'query'=>'string', 'result_mode='=>'int'], 'mysqli::query' => ['bool|mysqli_result', 'query'=>'string', 'result_mode='=>'int'],
'mysqli::real_connect' => ['bool', 'hostname='=>'?string', 'username='=>'string', 'password='=>'?string', 'database='=>'string', 'port='=>'int', 'socket='=>'string', 'flags='=>'int'], 'mysqli::real_connect' => ['bool', 'hostname='=>'?string', 'username='=>'string', 'password='=>'?string', 'database='=>'string', 'port='=>'int', 'socket='=>'string', 'flags='=>'int'],
@@ -9009,7 +9027,7 @@ return [
'mysqli_fetch_assoc' => ['array<string,string>|null', 'result'=>'mysqli_result'], 'mysqli_fetch_assoc' => ['array<string,string>|null', 'result'=>'mysqli_result'],
'mysqli_fetch_field' => ['object|false', 'result'=>'mysqli_result'], 'mysqli_fetch_field' => ['object|false', 'result'=>'mysqli_result'],
'mysqli_fetch_field_direct' => ['object|false', 'result'=>'mysqli_result', 'index'=>'int'], 'mysqli_fetch_field_direct' => ['object|false', 'result'=>'mysqli_result', 'index'=>'int'],
'mysqli_fetch_fields' => ['?array<int,object>', 'result'=>'mysqli_result'], 'mysqli_fetch_fields' => ['array<int,object>', 'result'=>'mysqli_result'],
'mysqli_fetch_lengths' => ['array<int,int>|false', 'result'=>'mysqli_result'], 'mysqli_fetch_lengths' => ['array<int,int>|false', 'result'=>'mysqli_result'],
'mysqli_fetch_object' => ['?object', 'result'=>'mysqli_result', 'class='=>'string', 'constructor_args='=>'array'], 'mysqli_fetch_object' => ['?object', 'result'=>'mysqli_result', 'class='=>'string', 'constructor_args='=>'array'],
'mysqli_fetch_row' => ['?array<int,mixed>', 'result'=>'mysqli_result'], 'mysqli_fetch_row' => ['?array<int,mixed>', 'result'=>'mysqli_result'],
@@ -9020,9 +9038,9 @@ return [
'mysqli_get_cache_stats' => ['array|false'], 'mysqli_get_cache_stats' => ['array|false'],
'mysqli_get_charset' => ['object', 'mysql'=>'mysqli'], 'mysqli_get_charset' => ['object', 'mysql'=>'mysqli'],
'mysqli_get_client_info' => ['string', 'mysql='=>'mysqli'], 'mysqli_get_client_info' => ['string', 'mysql='=>'mysqli'],
'mysqli_get_client_stats' => ['array|false'], 'mysqli_get_client_stats' => ['array'],
'mysqli_get_client_version' => ['int', 'link'=>'mysqli'], 'mysqli_get_client_version' => ['int', 'link'=>'mysqli'],
'mysqli_get_connection_stats' => ['array|false', 'mysql'=>'mysqli'], 'mysqli_get_connection_stats' => ['array', 'mysql'=>'mysqli'],
'mysqli_get_host_info' => ['string', 'mysql'=>'mysqli'], 'mysqli_get_host_info' => ['string', 'mysql'=>'mysqli'],
'mysqli_get_links_stats' => ['array<string,int>'], 'mysqli_get_links_stats' => ['array<string,int>'],
'mysqli_get_metadata' => ['mysqli_result|false', 'stmt'=>'mysqli_stmt'], 'mysqli_get_metadata' => ['mysqli_result|false', 'stmt'=>'mysqli_stmt'],
@@ -9044,7 +9062,7 @@ return [
'mysqli_options' => ['bool', 'mysql'=>'mysqli', 'option'=>'int', 'value'=>'int|string'], 'mysqli_options' => ['bool', 'mysql'=>'mysqli', 'option'=>'int', 'value'=>'int|string'],
'mysqli_param_count' => ['int', 'stmt'=>'mysqli_stmt'], 'mysqli_param_count' => ['int', 'stmt'=>'mysqli_stmt'],
'mysqli_ping' => ['bool', 'mysql'=>'mysqli'], 'mysqli_ping' => ['bool', 'mysql'=>'mysqli'],
'mysqli_poll' => ['int|false', '&read'=>'array', '&write'=>'array', '&error'=>'array', 'seconds'=>'int', 'microseconds='=>'int'], 'mysqli_poll' => ['int|false', '&read'=>'array', '&error'=>'array', '&reject'=>'array', 'seconds'=>'int', 'microseconds='=>'int'],
'mysqli_prepare' => ['mysqli_stmt|false', 'mysql'=>'mysqli', 'query'=>'string'], 'mysqli_prepare' => ['mysqli_stmt|false', 'mysql'=>'mysqli', 'query'=>'string'],
'mysqli_query' => ['mysqli_result|bool', 'mysql'=>'mysqli', 'query'=>'string', 'result_mode='=>'int'], 'mysqli_query' => ['mysqli_result|bool', 'mysql'=>'mysqli', 'query'=>'string', 'result_mode='=>'int'],
'mysqli_real_connect' => ['bool', 'mysql'=>'mysqli', 'hostname='=>'?string', 'username='=>'string', 'password='=>'?string', 'database='=>'string', 'port='=>'int', 'socket='=>'string', 'flags='=>'int'], 'mysqli_real_connect' => ['bool', 'mysql'=>'mysqli', 'hostname='=>'?string', 'username='=>'string', 'password='=>'?string', 'database='=>'string', 'port='=>'int', 'socket='=>'string', 'flags='=>'int'],
@@ -9107,7 +9125,7 @@ return [
'mysqli_stmt::stmt' => [''], 'mysqli_stmt::stmt' => [''],
'mysqli_stmt::store_result' => ['bool'], 'mysqli_stmt::store_result' => ['bool'],
'mysqli_stmt_affected_rows' => ['int|string', 'statement'=>'mysqli_stmt'], 'mysqli_stmt_affected_rows' => ['int|string', 'statement'=>'mysqli_stmt'],
'mysqli_stmt_attr_get' => ['int|false', 'statement'=>'mysqli_stmt', 'attribute'=>'int'], 'mysqli_stmt_attr_get' => ['int', 'statement'=>'mysqli_stmt', 'attribute'=>'int'],
'mysqli_stmt_attr_set' => ['bool', 'statement'=>'mysqli_stmt', 'attribute'=>'int', 'value'=>'int'], 'mysqli_stmt_attr_set' => ['bool', 'statement'=>'mysqli_stmt', 'attribute'=>'int', 'value'=>'int'],
'mysqli_stmt_bind_param' => ['bool', 'statement'=>'mysqli_stmt', 'types'=>'string', '&vars'=>'mixed', '&...args='=>'mixed'], 'mysqli_stmt_bind_param' => ['bool', 'statement'=>'mysqli_stmt', 'types'=>'string', '&vars'=>'mixed', '&...args='=>'mixed'],
'mysqli_stmt_bind_result' => ['bool', 'statement'=>'mysqli_stmt', '&vars='=>'mixed', '&...args='=>'mixed'], 'mysqli_stmt_bind_result' => ['bool', 'statement'=>'mysqli_stmt', '&vars='=>'mixed', '&...args='=>'mixed'],
@@ -9580,7 +9598,7 @@ return [
'NumberFormatter::setPattern' => ['bool', 'pattern'=>'string'], 'NumberFormatter::setPattern' => ['bool', 'pattern'=>'string'],
'NumberFormatter::setSymbol' => ['bool', 'symbol'=>'int', 'value'=>'string'], 'NumberFormatter::setSymbol' => ['bool', 'symbol'=>'int', 'value'=>'string'],
'NumberFormatter::setTextAttribute' => ['bool', 'attribute'=>'int', 'value'=>'string'], 'NumberFormatter::setTextAttribute' => ['bool', 'attribute'=>'int', 'value'=>'string'],
'numfmt_create' => ['NumberFormatter|false', 'locale'=>'string', 'style'=>'int', 'pattern='=>'string'], 'numfmt_create' => ['NumberFormatter|null', 'locale'=>'string', 'style'=>'int', 'pattern='=>'string'],
'numfmt_format' => ['string|false', 'formatter'=>'NumberFormatter', 'num'=>'int|float', 'type='=>'int'], 'numfmt_format' => ['string|false', 'formatter'=>'NumberFormatter', 'num'=>'int|float', 'type='=>'int'],
'numfmt_format_currency' => ['string|false', 'formatter'=>'NumberFormatter', 'amount'=>'float', 'currency'=>'string'], 'numfmt_format_currency' => ['string|false', 'formatter'=>'NumberFormatter', 'amount'=>'float', 'currency'=>'string'],
'numfmt_get_attribute' => ['int|false', 'formatter'=>'NumberFormatter', 'attribute'=>'int'], 'numfmt_get_attribute' => ['int|false', 'formatter'=>'NumberFormatter', 'attribute'=>'int'],
@@ -9655,7 +9673,7 @@ return [
'ob_get_status' => ['array', 'full_status='=>'bool'], 'ob_get_status' => ['array', 'full_status='=>'bool'],
'ob_gzhandler' => ['string|false', 'data'=>'string', 'flags'=>'int'], 'ob_gzhandler' => ['string|false', 'data'=>'string', 'flags'=>'int'],
'ob_iconv_handler' => ['string', 'contents'=>'string', 'status'=>'int'], 'ob_iconv_handler' => ['string', 'contents'=>'string', 'status'=>'int'],
'ob_implicit_flush' => ['void', 'enable='=>'int'], 'ob_implicit_flush' => ['void', 'enable='=>'bool'],
'ob_inflatehandler' => ['string', 'data'=>'string', 'mode'=>'int'], 'ob_inflatehandler' => ['string', 'data'=>'string', 'mode'=>'int'],
'ob_list_handlers' => ['list<string>'], 'ob_list_handlers' => ['list<string>'],
'ob_start' => ['bool', 'callback='=>'?callable', 'chunk_size='=>'int', 'flags='=>'int'], 'ob_start' => ['bool', 'callback='=>'?callable', 'chunk_size='=>'int', 'flags='=>'int'],
@@ -9665,28 +9683,20 @@ return [
'oci_cancel' => ['bool', 'statement'=>'resource'], 'oci_cancel' => ['bool', 'statement'=>'resource'],
'oci_client_version' => ['string'], 'oci_client_version' => ['string'],
'oci_close' => ['bool', 'connection'=>'resource'], 'oci_close' => ['bool', 'connection'=>'resource'],
'OCICollection::append' => ['bool', 'value'=>'string'], 'oci_collection_append' => ['bool', 'collection'=>'OCICollection', 'value'=>'string'],
'OCICollection::assign' => ['bool', 'from'=>'OCICollection'], 'oci_collection_assign' => ['bool', 'to'=>'OCICollection', 'from'=>'OCICollection'],
'OCICollection::assignElem' => ['bool', 'index'=>'int', 'value'=>'string'], 'oci_collection_element_assign' => ['bool', 'collection'=>'OCICollection', 'index'=>'int', 'value'=>'string'],
'OCICollection::free' => ['bool'], 'oci_collection_element_get' => ['string', 'collection'=>'OCICollection', 'index'=>'int'],
'OCICollection::getElem' => ['false|float|null|string', 'index'=>'int'], 'oci_collection_max' => ['int', 'collection'=>'OCICollection'],
'OCICollection::max' => ['int|false'], 'oci_collection_size' => ['int', 'collection'=>'OCICollection'],
'OCICollection::size' => ['int|false'], 'oci_collection_trim' => ['bool', 'collection'=>'OCICollection', 'num'=>'int'],
'OCICollection::trim' => ['bool', 'num'=>'int'],
'oci_collection_append' => ['bool', 'collection'=>'resource', 'value'=>'string'],
'oci_collection_assign' => ['bool', 'to'=>'resource', 'from'=>'object'],
'oci_collection_element_assign' => ['bool', 'collection'=>'resource', 'index'=>'int', 'value'=>'string'],
'oci_collection_element_get' => ['string', 'collection'=>'resource', 'index'=>'int'],
'oci_collection_max' => ['int', 'collection'=>'resource'],
'oci_collection_size' => ['int', 'collection'=>'resource'],
'oci_collection_trim' => ['bool', 'collection'=>'resource', 'num'=>'int'],
'oci_commit' => ['bool', 'connection'=>'resource'], 'oci_commit' => ['bool', 'connection'=>'resource'],
'oci_connect' => ['resource|false', 'username'=>'string', 'password'=>'string', 'connection_string='=>'string', 'encoding='=>'string', 'session_mode='=>'int'], 'oci_connect' => ['resource|false', 'username'=>'string', 'password'=>'string', 'connection_string='=>'string', 'encoding='=>'string', 'session_mode='=>'int'],
'oci_define_by_name' => ['bool', 'statement'=>'resource', 'column'=>'string', '&w_var'=>'mixed', 'type='=>'int'], 'oci_define_by_name' => ['bool', 'statement'=>'resource', 'column'=>'string', '&w_var'=>'mixed', 'type='=>'int'],
'oci_error' => ['array|false', 'connection_or_statement='=>'resource'], 'oci_error' => ['array|false', 'connection_or_statement='=>'resource'],
'oci_execute' => ['bool', 'statement'=>'resource', 'mode='=>'int'], 'oci_execute' => ['bool', 'statement'=>'resource', 'mode='=>'int'],
'oci_fetch' => ['bool', 'statement'=>'resource'], 'oci_fetch' => ['bool', 'statement'=>'resource'],
'oci_fetch_all' => ['int|false', 'statement'=>'resource', '&w_output'=>'array', 'offset='=>'int', 'limit='=>'int', 'flags='=>'int'], 'oci_fetch_all' => ['int', 'statement'=>'resource', '&w_output'=>'array', 'offset='=>'int', 'limit='=>'int', 'flags='=>'int'],
'oci_fetch_array' => ['array|false', 'statement'=>'resource', 'mode='=>'int'], 'oci_fetch_array' => ['array|false', 'statement'=>'resource', 'mode='=>'int'],
'oci_fetch_assoc' => ['array|false', 'statement'=>'resource'], 'oci_fetch_assoc' => ['array|false', 'statement'=>'resource'],
'oci_fetch_object' => ['stdClass|false|null', 'statement'=>'resource', 'mode='=>'int'], 'oci_fetch_object' => ['stdClass|false|null', 'statement'=>'resource', 'mode='=>'int'],
@@ -9698,35 +9708,13 @@ return [
'oci_field_size' => ['int|false', 'statement'=>'resource', 'column'=>'int|string'], 'oci_field_size' => ['int|false', 'statement'=>'resource', 'column'=>'int|string'],
'oci_field_type' => ['false|int|string', 'statement'=>'resource', 'column'=>'int|string'], 'oci_field_type' => ['false|int|string', 'statement'=>'resource', 'column'=>'int|string'],
'oci_field_type_raw' => ['int|false', 'statement'=>'resource', 'column'=>'int|string'], 'oci_field_type_raw' => ['int|false', 'statement'=>'resource', 'column'=>'int|string'],
'oci_free_collection' => ['bool', 'collection'=>'resource'], 'oci_free_collection' => ['bool', 'collection'=>'OCICollection'],
'oci_free_cursor' => ['bool', 'statement'=>'resource'], 'oci_free_cursor' => ['bool', 'statement'=>'resource'],
'oci_free_descriptor' => ['bool', 'lob'=>'resource'], 'oci_free_descriptor' => ['bool', 'lob'=>'OCILob'],
'oci_free_statement' => ['bool', 'statement'=>'resource'], 'oci_free_statement' => ['bool', 'statement'=>'resource'],
'oci_get_implicit' => ['bool', 'stmt'=>''], 'oci_get_implicit' => ['bool', 'stmt'=>''],
'oci_get_implicit_resultset' => ['resource|false', 'statement'=>'resource'], 'oci_get_implicit_resultset' => ['resource|false', 'statement'=>'resource'],
'oci_internal_debug' => ['void', 'onoff'=>'bool'], 'oci_internal_debug' => ['void', 'onoff'=>'bool'],
'OCILob::append' => ['bool', 'from'=>'OCILob'],
'OCILob::close' => ['bool'],
'OCILob::eof' => ['bool'],
'OCILob::erase' => ['int|false', 'offset='=>'int', 'length='=>'int'],
'OCILob::export' => ['bool', 'filename'=>'string', 'offset='=>'int', 'length='=>'int'],
'OCILob::flush' => ['bool', 'flag='=>'int'],
'OCILob::free' => ['bool'],
'OCILob::getbuffering' => ['bool'],
'OCILob::import' => ['bool', 'filename'=>'string'],
'OCILob::load' => ['string|false'],
'OCILob::read' => ['string|false', 'length'=>'int'],
'OCILob::rewind' => ['bool'],
'OCILob::save' => ['bool', 'data'=>'string', 'offset='=>'int'],
'OCILob::savefile' => ['bool', 'filename'=>''],
'OCILob::seek' => ['bool', 'offset'=>'int', 'whence='=>'int'],
'OCILob::setbuffering' => ['bool', 'mode'=>'bool'],
'OCILob::size' => ['int|false'],
'OCILob::tell' => ['int|false'],
'OCILob::truncate' => ['bool', 'length='=>'int'],
'OCILob::write' => ['int|false', 'data'=>'string', 'length='=>'int'],
'OCILob::writeTemporary' => ['bool', 'data'=>'string', 'type='=>'int'],
'OCILob::writetofile' => ['bool', 'filename'=>'', 'offset='=>'', 'length='=>''],
'oci_lob_append' => ['bool', 'to'=>'OCILob', 'from'=>'OCILob'], 'oci_lob_append' => ['bool', 'to'=>'OCILob', 'from'=>'OCILob'],
'oci_lob_close' => ['bool', 'lob'=>'OCILob'], 'oci_lob_close' => ['bool', 'lob'=>'OCILob'],
'oci_lob_copy' => ['bool', 'to'=>'OCILob', 'from'=>'OCILob', 'length='=>'int'], 'oci_lob_copy' => ['bool', 'to'=>'OCILob', 'from'=>'OCILob', 'length='=>'int'],
@@ -9749,7 +9737,7 @@ return [
'oci_new_collection' => ['OCICollection|false', 'connection'=>'resource', 'type_name'=>'string', 'schema='=>'string'], 'oci_new_collection' => ['OCICollection|false', 'connection'=>'resource', 'type_name'=>'string', 'schema='=>'string'],
'oci_new_connect' => ['resource|false', 'username'=>'string', 'password'=>'string', 'connection_string='=>'string', 'encoding='=>'string', 'session_mode='=>'int'], 'oci_new_connect' => ['resource|false', 'username'=>'string', 'password'=>'string', 'connection_string='=>'string', 'encoding='=>'string', 'session_mode='=>'int'],
'oci_new_cursor' => ['resource|false', 'connection'=>'resource'], 'oci_new_cursor' => ['resource|false', 'connection'=>'resource'],
'oci_new_descriptor' => ['OCILob|false', 'connection'=>'resource', 'type='=>'int'], 'oci_new_descriptor' => ['?OCILob', 'connection'=>'resource', 'type='=>'int'],
'oci_num_fields' => ['int', 'statement'=>'resource'], 'oci_num_fields' => ['int', 'statement'=>'resource'],
'oci_num_rows' => ['int|false', 'statement'=>'resource'], 'oci_num_rows' => ['int|false', 'statement'=>'resource'],
'oci_parse' => ['resource|false', 'connection'=>'resource', 'sql'=>'string'], 'oci_parse' => ['resource|false', 'connection'=>'resource', 'sql'=>'string'],
@@ -9769,8 +9757,38 @@ return [
'oci_set_prefetch' => ['bool', 'statement'=>'resource', 'rows'=>'int'], 'oci_set_prefetch' => ['bool', 'statement'=>'resource', 'rows'=>'int'],
'oci_statement_type' => ['string|false', 'statement'=>'resource'], 'oci_statement_type' => ['string|false', 'statement'=>'resource'],
'oci_unregister_taf_callback' => ['bool', 'connection'=>'resource'], 'oci_unregister_taf_callback' => ['bool', 'connection'=>'resource'],
'OCICollection::append' => ['bool', 'value'=>'string'],
'OCICollection::assign' => ['bool', 'from'=>'OCICollection'],
'OCICollection::assignElem' => ['bool', 'index'=>'int', 'value'=>'string'],
'OCICollection::free' => ['bool'],
'OCICollection::getElem' => ['false|float|null|string', 'index'=>'int'],
'OCICollection::max' => ['int|false'],
'OCICollection::size' => ['int|false'],
'OCICollection::trim' => ['bool', 'num'=>'int'],
'ocifetchinto' => ['int|bool', 'statement'=>'resource', '&w_result'=>'array', 'mode='=>'int'], 'ocifetchinto' => ['int|bool', 'statement'=>'resource', '&w_result'=>'array', 'mode='=>'int'],
'ocigetbufferinglob' => ['bool', 'lob'=>'OCILob'], 'ocigetbufferinglob' => ['bool', 'lob'=>'OCILob'],
'OCILob::append' => ['bool', 'from'=>'OCILob'],
'OCILob::close' => ['bool'],
'OCILob::eof' => ['bool'],
'OCILob::erase' => ['int|false', 'offset='=>'int', 'length='=>'int'],
'OCILob::export' => ['bool', 'filename'=>'string', 'offset='=>'int', 'length='=>'int'],
'OCILob::flush' => ['bool', 'flag='=>'int'],
'OCILob::free' => ['bool'],
'OCILob::getbuffering' => ['bool'],
'OCILob::import' => ['bool', 'filename'=>'string'],
'OCILob::load' => ['string|false'],
'OCILob::read' => ['string|false', 'length'=>'int'],
'OCILob::rewind' => ['bool'],
'OCILob::save' => ['bool', 'data'=>'string', 'offset='=>'int'],
'OCILob::savefile' => ['bool', 'filename'=>''],
'OCILob::seek' => ['bool', 'offset'=>'int', 'whence='=>'int'],
'OCILob::setbuffering' => ['bool', 'mode'=>'bool'],
'OCILob::size' => ['int|false'],
'OCILob::tell' => ['int|false'],
'OCILob::truncate' => ['bool', 'length='=>'int'],
'OCILob::write' => ['int|false', 'data'=>'string', 'length='=>'int'],
'OCILob::writeTemporary' => ['bool', 'data'=>'string', 'type='=>'int'],
'OCILob::writetofile' => ['bool', 'filename'=>'', 'offset='=>'', 'length='=>''],
'ocisetbufferinglob' => ['bool', 'lob'=>'OCILob', 'mode'=>'bool'], 'ocisetbufferinglob' => ['bool', 'lob'=>'OCILob', 'mode'=>'bool'],
'octdec' => ['int|float', 'octal_string'=>'string'], 'octdec' => ['int|float', 'octal_string'=>'string'],
'odbc_autocommit' => ['bool|int', 'odbc'=>'resource', 'enable='=>'bool'], 'odbc_autocommit' => ['bool|int', 'odbc'=>'resource', 'enable='=>'bool'],
@@ -9850,62 +9868,63 @@ return [
'opendir' => ['resource|false', 'directory'=>'string', 'context='=>'resource'], 'opendir' => ['resource|false', 'directory'=>'string', 'context='=>'resource'],
'openlog' => ['bool', 'prefix'=>'string', 'flags'=>'int', 'facility'=>'int'], 'openlog' => ['bool', 'prefix'=>'string', 'flags'=>'int', 'facility'=>'int'],
'openssl_cipher_iv_length' => ['int|false', 'cipher_algo'=>'string'], 'openssl_cipher_iv_length' => ['int|false', 'cipher_algo'=>'string'],
'openssl_csr_export' => ['bool', 'csr'=>'string|resource', '&w_output'=>'string', 'no_text='=>'bool'], 'openssl_csr_export' => ['bool', 'csr'=>'string|OpenSSLCertificateSigningRequest', '&w_output'=>'OpenSSLAsymmetricKey', 'no_text='=>'bool'],
'openssl_csr_export_to_file' => ['bool', 'csr'=>'string|resource', 'output_filename'=>'string', 'no_text='=>'bool'], 'openssl_csr_export_to_file' => ['bool', 'csr'=>'string|OpenSSLCertificateSigningRequest', 'output_filename'=>'string', 'no_text='=>'bool'],
'openssl_csr_get_public_key' => ['resource|false', 'csr'=>'string|resource', 'short_names='=>'bool'], 'openssl_csr_get_public_key' => ['OpenSSLAsymmetricKey|false', 'csr'=>'string|OpenSSLCertificateSigningRequest', 'short_names='=>'bool'],
'openssl_csr_get_subject' => ['array|false', 'csr'=>'string|resource', 'short_names='=>'bool'], 'openssl_csr_get_subject' => ['array|false', 'csr'=>'string|OpenSSLCertificateSigningRequest', 'short_names='=>'bool'],
'openssl_csr_new' => ['resource|false', 'distinguished_names'=>'array', '&w_private_key'=>'resource', 'options='=>'array', 'extra_attributes='=>'array'], 'openssl_csr_new' => ['OpenSSLCertificateSigningRequest|false', 'distinguished_names'=>'array', '&w_private_key'=>'OpenSSLAsymmetricKey', 'options='=>'array', 'extra_attributes='=>'array'],
'openssl_csr_sign' => ['resource|false', 'csr'=>'string|resource', 'ca_certificate'=>'string|resource|null', 'private_key'=>'string|resource|array', 'days'=>'int', 'options='=>'array', 'serial='=>'int'], 'openssl_csr_sign' => ['OpenSSLCertificate|false', 'csr'=>'string|OpenSSLCertificateSigningRequest', 'ca_certificate'=>'string|OpenSSLCertificate|null', 'private_key'=>'string|OpenSSLAsymmetricKey|OpenSSLCertificate|array', 'days'=>'int', 'options='=>'array', 'serial='=>'int'],
'openssl_decrypt' => ['string|false', 'data'=>'string', 'cipher_algo'=>'string', 'passphrase'=>'string', 'options='=>'int', 'iv='=>'string', 'tag='=>'string', 'aad='=>'string'], 'openssl_decrypt' => ['string|false', 'data'=>'string', 'cipher_algo'=>'string', 'passphrase'=>'string', 'options='=>'int', 'iv='=>'string', 'tag='=>'string', 'aad='=>'string'],
'openssl_dh_compute_key' => ['string|false', 'public_key'=>'string', 'private_key'=>'resource'], 'openssl_dh_compute_key' => ['string|false', 'public_key'=>'string', 'private_key'=>'OpenSSLAsymmetricKey'],
'openssl_digest' => ['string|false', 'data'=>'string', 'digest_algo'=>'string', 'binary='=>'bool'], 'openssl_digest' => ['string|false', 'data'=>'string', 'digest_algo'=>'string', 'binary='=>'bool'],
'openssl_encrypt' => ['string|false', 'data'=>'string', 'cipher_algo'=>'string', 'passphrase'=>'string', 'options='=>'int', 'iv='=>'string', '&w_tag='=>'string', 'aad='=>'string', 'tag_length='=>'int'], 'openssl_encrypt' => ['string|false', 'data'=>'string', 'cipher_algo'=>'string', 'passphrase'=>'string', 'options='=>'int', 'iv='=>'string', '&w_tag='=>'string', 'aad='=>'string', 'tag_length='=>'int'],
'openssl_error_string' => ['string|false'], 'openssl_error_string' => ['string|false'],
'openssl_free_key' => ['void', 'key'=>'resource'], 'openssl_free_key' => ['void', 'key'=>'OpenSSLAsymmetricKey'],
'openssl_get_cert_locations' => ['array'], 'openssl_get_cert_locations' => ['array'],
'openssl_get_cipher_methods' => ['array', 'aliases='=>'bool'], 'openssl_get_cipher_methods' => ['array', 'aliases='=>'bool'],
'openssl_get_curve_names' => ['list<string>'], 'openssl_get_curve_names' => ['list<string>'],
'openssl_get_md_methods' => ['array', 'aliases='=>'bool'], 'openssl_get_md_methods' => ['array', 'aliases='=>'bool'],
'openssl_get_privatekey' => ['resource|false', 'private_key'=>'string', 'passphrase='=>'string'], 'openssl_get_privatekey' => ['OpenSSLAsymmetricKey|false', 'private_key'=>'string', 'passphrase='=>'string'],
'openssl_get_publickey' => ['resource|false', 'public_key'=>'resource|string'], 'openssl_get_publickey' => ['OpenSSLAsymmetricKey|false', 'public_key'=>'OpenSSLAsymmetricKey|OpenSSLCertificate|array|string'],
'openssl_open' => ['bool', 'data'=>'string', '&w_output'=>'string', 'encrypted_key'=>'string', 'private_key'=>'string|array|resource', 'cipher_algo'=>'string', 'iv='=>'string'], 'openssl_open' => ['bool', 'data'=>'string', '&w_output'=>'string', 'encrypted_key'=>'string', 'private_key'=>'OpenSSLAsymmetricKey|OpenSSLCertificate|array|string', 'cipher_algo'=>'string', 'iv='=>'string'],
'openssl_pbkdf2' => ['string|false', 'password'=>'string', 'salt'=>'string', 'key_length'=>'int', 'iterations'=>'int', 'digest_algo='=>'string'], 'openssl_pbkdf2' => ['string|false', 'password'=>'string', 'salt'=>'string', 'key_length'=>'int', 'iterations'=>'int', 'digest_algo='=>'string'],
'openssl_pkcs12_export' => ['bool', 'certificate'=>'string|resource', '&w_output'=>'string', 'private_key'=>'string|array|resource', 'passphrase'=>'string', 'options='=>'array'], 'openssl_pkcs12_export' => ['bool', 'certificate'=>'string|OpenSSLCertificate', '&w_output'=>'string', 'private_key'=>'OpenSSLAsymmetricKey|OpenSSLCertificate|array|string', 'passphrase'=>'string', 'options='=>'array'],
'openssl_pkcs12_export_to_file' => ['bool', 'certificate'=>'string|resource', 'output_filename'=>'string', 'private_key'=>'string|array|resource', 'passphrase'=>'string', 'options='=>'array'], 'openssl_pkcs12_export_to_file' => ['bool', 'certificate'=>'string|OpenSSLCertificate', 'output_filename'=>'string', 'private_key'=>'OpenSSLAsymmetricKey|OpenSSLCertificate|array|string', 'passphrase'=>'string', 'options='=>'array'],
'openssl_pkcs12_read' => ['bool', 'pkcs12'=>'string', '&w_certificates'=>'array', 'passphrase'=>'string'], 'openssl_pkcs12_read' => ['bool', 'pkcs12'=>'string', '&w_certificates'=>'array', 'passphrase'=>'string'],
'openssl_pkcs7_decrypt' => ['bool', 'input_filename'=>'string', 'output_filename'=>'string', 'certificate'=>'string|resource', 'private_key='=>'string|resource|array'], 'openssl_pkcs7_decrypt' => ['bool', 'input_filename'=>'string', 'output_filename'=>'string', 'certificate'=>'OpenSSLCertificate|string', 'private_key='=>'OpenSSLAsymmetricKey|OpenSSLCertificate|array|null|string'],
'openssl_pkcs7_encrypt' => ['bool', 'input_filename'=>'string', 'output_filename'=>'string', 'certificate'=>'string|resource|array', 'headers'=>'array', 'flags='=>'int', 'cipher_algo='=>'int'], 'openssl_pkcs7_encrypt' => ['bool', 'input_filename'=>'string', 'output_filename'=>'string', 'certificate'=>'OpenSSLCertificate|array|string', 'headers'=>'array', 'flags='=>'int', 'cipher_algo='=>'int'],
'openssl_pkcs7_read' => ['bool', 'input_filename'=>'string', '&w_certificates'=>'array'], 'openssl_pkcs7_read' => ['bool', 'data'=>'string', '&w_certificates'=>'array'],
'openssl_pkcs7_sign' => ['bool', 'input_filename'=>'string', 'output_filename'=>'string', 'certificate'=>'string|resource', 'private_key'=>'string|resource|array', 'headers'=>'array', 'flags='=>'int', 'untrusted_certificates_filename='=>'string'], 'openssl_pkcs7_sign' => ['bool', 'input_filename'=>'string', 'output_filename'=>'string', 'certificate'=>'OpenSSLCertificate|string', 'private_key'=>'OpenSSLAsymmetricKey|OpenSSLCertificate|array|string', 'headers'=>'array', 'flags='=>'int', 'untrusted_certificates_filename='=>'string'],
'openssl_pkcs7_verify' => ['bool|int', 'input_filename'=>'string', 'flags'=>'int', 'signers_certificates_filename='=>'string', 'ca_info='=>'array', 'untrusted_certificates_filename='=>'string', 'content='=>'string', 'output_filename='=>'string'], 'openssl_pkcs7_verify' => ['bool|int', 'input_filename'=>'string', 'flags'=>'int', 'signers_certificates_filename='=>'string', 'ca_info='=>'array', 'untrusted_certificates_filename='=>'string', 'content='=>'string', 'output_filename='=>'string'],
'openssl_pkey_derive' => ['string|false', 'public_key'=>'mixed', 'private_key'=>'mixed', 'key_length='=>'?int'], 'openssl_pkey_derive' => ['string|false', 'public_key'=>'OpenSSLAsymmetricKey|OpenSSLCertificate|array|string', 'private_key'=>'OpenSSLAsymmetricKey|OpenSSLCertificate|array|string', 'key_length='=>'int'],
'openssl_pkey_export' => ['bool', 'key'=>'resource', '&w_output'=>'string', 'passphrase='=>'?string', 'options='=>'array'], 'openssl_pkey_export' => ['bool', 'key'=>'OpenSSLAsymmetricKey|OpenSSLCertificate|array|string', '&w_output'=>'string', 'passphrase='=>'?string', 'options='=>'array'],
'openssl_pkey_export_to_file' => ['bool', 'key'=>'resource|string|array', 'output_filename'=>'string', 'passphrase='=>'?string', 'options='=>'array'], 'openssl_pkey_export_to_file' => ['bool', 'key'=>'OpenSSLAsymmetricKey|OpenSSLCertificate|array|string', 'output_filename'=>'string', 'passphrase='=>'?string', 'options='=>'array'],
'openssl_pkey_free' => ['void', 'key'=>'resource'], 'openssl_pkey_free' => ['void', 'key'=>'OpenSSLAsymmetricKey'],
'openssl_pkey_get_details' => ['array|false', 'key'=>'resource'], 'openssl_pkey_get_details' => ['array|false', 'key'=>'OpenSSLAsymmetricKey'],
'openssl_pkey_get_private' => ['resource|false', 'private_key'=>'string', 'passphrase='=>'string'], 'openssl_pkey_get_private' => ['OpenSSLAsymmetricKey|false', 'private_key'=>'string', 'passphrase='=>'string'],
'openssl_pkey_get_public' => ['resource|false', 'public_key'=>'resource|string'], 'openssl_pkey_get_public' => ['OpenSSLAsymmetricKey|false', 'public_key'=>'OpenSSLAsymmetricKey|OpenSSLCertificate|array|string|string'],
'openssl_pkey_new' => ['resource|false', 'options='=>'array'], 'openssl_pkey_new' => ['OpenSSLAsymmetricKey|false', 'options='=>'array'],
'openssl_private_decrypt' => ['bool', 'data'=>'string', '&w_decrypted_data'=>'string', 'private_key'=>'string|resource|array', 'padding='=>'int'], 'openssl_private_decrypt' => ['bool', 'data'=>'string', '&w_decrypted_data'=>'string', 'private_key'=>'OpenSSLAsymmetricKey|OpenSSLCertificate|array|string', 'padding='=>'int'],
'openssl_private_encrypt' => ['bool', 'data'=>'string', '&w_encrypted_data'=>'string', 'private_key'=>'string|resource|array', 'padding='=>'int'], 'openssl_private_encrypt' => ['bool', 'data'=>'string', '&w_encrypted_data'=>'string', 'private_key'=>'OpenSSLAsymmetricKey|OpenSSLCertificate|array|string', 'padding='=>'int'],
'openssl_public_decrypt' => ['bool', 'data'=>'string', '&w_decrypted_data'=>'string', 'public_key'=>'string|resource', 'padding='=>'int'], 'openssl_public_decrypt' => ['bool', 'data'=>'string', '&w_decrypted_data'=>'string', 'public_key'=>'OpenSSLAsymmetricKey|OpenSSLCertificate|array|string', 'padding='=>'int'],
'openssl_public_encrypt' => ['bool', 'data'=>'string', '&w_encrypted_data'=>'string', 'public_key'=>'string|resource', 'padding='=>'int'], 'openssl_public_encrypt' => ['bool', 'data'=>'string', '&w_encrypted_data'=>'string', 'public_key'=>'OpenSSLAsymmetricKey|OpenSSLCertificate|array|string', 'padding='=>'int'],
'openssl_random_pseudo_bytes' => ['string|false', 'length'=>'int', '&w_strong_result='=>'bool'], 'openssl_random_pseudo_bytes' => ['string', 'length'=>'int', '&w_strong_result='=>'bool'],
'openssl_seal' => ['int|false', 'data'=>'string', '&w_sealed_data'=>'string', '&rw_encrypted_keys'=>'array', 'public_key'=>'array', 'cipher_algo'=>'string', '&iv='=>'string'], 'openssl_seal' => ['int|false', 'data'=>'string', '&w_sealed_data'=>'string', '&rw_encrypted_keys'=>'array', 'public_key'=>'array', 'cipher_algo'=>'string', '&iv='=>'string'],
'openssl_sign' => ['bool', 'data'=>'string', '&w_signature'=>'string', 'private_key'=>'resource|string', 'algorithm='=>'int|string'], 'openssl_sign' => ['bool', 'data'=>'string', '&w_signature'=>'string', 'private_key'=>'OpenSSLAsymmetricKey|OpenSSLCertificate|array|string', 'algorithm='=>'int|string'],
'openssl_spki_export' => ['?string', 'spki'=>'string'], 'openssl_spki_export' => ['false|string', 'spki'=>'string'],
'openssl_spki_export_challenge' => ['?string', 'spki'=>'string'], 'openssl_spki_export_challenge' => ['false|string', 'spki'=>'string'],
'openssl_spki_new' => ['?string', 'private_key'=>'resource', 'challenge'=>'string', 'digest_algo='=>'int'], 'openssl_spki_new' => ['false|string', 'private_key'=>'OpenSSLAsymmetricKey', 'challenge'=>'string', 'digest_algo='=>'int'],
'openssl_spki_verify' => ['bool', 'spki'=>'string'], 'openssl_spki_verify' => ['bool', 'spki'=>'string'],
'openssl_verify' => ['int', 'data'=>'string', 'signature'=>'string', 'public_key'=>'resource|string', 'algorithm='=>'int|string'], 'openssl_verify' => ['int', 'data'=>'string', 'signature'=>'string', 'public_key'=>'OpenSSLAsymmetricKey|OpenSSLCertificate|array|string', 'algorithm='=>'int|string'],
'openssl_x509_check_private_key' => ['bool', 'certificate'=>'string|resource', 'private_key'=>'string|resource|array'], 'openssl_x509_check_private_key' => ['bool', 'certificate'=>'OpenSSLCertificate|string', 'private_key'=>'OpenSSLAsymmetricKey|OpenSSLCertificate|array|string'],
'openssl_x509_checkpurpose' => ['bool|int', 'certificate'=>'string|resource', 'purpose'=>'int', 'ca_info='=>'array', 'untrusted_certificates_file='=>'string'], 'openssl_x509_checkpurpose' => ['bool|int', 'certificate'=>'string|OpenSSLCertificate', 'purpose'=>'int', 'ca_info='=>'array', 'untrusted_certificates_file='=>'string'],
'openssl_x509_export' => ['bool', 'certificate'=>'string|resource', '&w_output'=>'string', 'no_text='=>'bool'], 'openssl_x509_export' => ['bool', 'certificate'=>'string|OpenSSLCertificate', '&w_output'=>'string', 'no_text='=>'bool'],
'openssl_x509_export_to_file' => ['bool', 'certificate'=>'string|resource', 'output_filename'=>'string', 'no_text='=>'bool'], 'openssl_x509_export_to_file' => ['bool', 'certificate'=>'string|OpenSSLCertificate', 'output_filename'=>'string', 'no_text='=>'bool'],
'openssl_x509_fingerprint' => ['string|false', 'certificate'=>'string|resource', 'digest_algo='=>'string', 'binary='=>'bool'], 'openssl_x509_fingerprint' => ['string|false', 'certificate'=>'string|OpenSSLCertificate', 'digest_algo='=>'string', 'binary='=>'bool'],
'openssl_x509_free' => ['void', 'certificate'=>'resource'], 'openssl_x509_free' => ['void', 'certificate'=>'OpenSSLCertificate'],
'openssl_x509_parse' => ['array|false', 'certificate'=>'string|resource', 'short_names='=>'bool'], 'openssl_x509_parse' => ['array|false', 'certificate'=>'string|OpenSSLCertificate', 'short_names='=>'bool'],
'openssl_x509_read' => ['resource|false', 'certificate'=>'string|resource'], 'openssl_x509_read' => ['OpenSSLCertificate|false', 'certificate'=>'string|OpenSSLCertificate'],
'openssl_x509_verify' => ['int', 'certificate'=>'OpenSSLCertificate|string', 'public_key'=>'OpenSSLAsymmetricKey|OpenSSLCertificate|array|string'],
'ord' => ['int', 'character'=>'string'], 'ord' => ['int', 'character'=>'string'],
'OuterIterator::current' => ['mixed'], 'OuterIterator::current' => ['mixed'],
'OuterIterator::getInnerIterator' => ['Iterator'], 'OuterIterator::getInnerIterator' => ['Iterator'],
@@ -10087,10 +10106,11 @@ return [
'parsekit_compile_string' => ['array', 'phpcode'=>'string', 'errors='=>'array', 'options='=>'int'], 'parsekit_compile_string' => ['array', 'phpcode'=>'string', 'errors='=>'array', 'options='=>'int'],
'parsekit_func_arginfo' => ['array', 'function'=>'mixed'], 'parsekit_func_arginfo' => ['array', 'function'=>'mixed'],
'passthru' => ['void', 'command'=>'string', '&w_result_code='=>'int'], 'passthru' => ['void', 'command'=>'string', '&w_result_code='=>'int'],
'password_algos' => ['list<string>'],
'password_get_info' => ['array<string,array|int|string>', 'hash'=>'string'], 'password_get_info' => ['array<string,array|int|string>', 'hash'=>'string'],
'password_hash' => ['string|false|null', 'password'=>'string', 'algo'=>'int', 'options='=>'array'], 'password_hash' => ['string', 'password'=>'string', 'algo'=>'?string|?int', 'options='=>'array'],
'password_make_salt' => ['bool', 'password'=>'string', 'hash'=>'string'], 'password_make_salt' => ['bool', 'password'=>'string', 'hash'=>'string'],
'password_needs_rehash' => ['bool', 'hash'=>'string', 'algo'=>'int', 'options='=>'array'], 'password_needs_rehash' => ['bool', 'hash'=>'string', 'algo'=>'?string|?int', 'options='=>'array'],
'password_verify' => ['bool', 'password'=>'string', 'hash'=>'string'], 'password_verify' => ['bool', 'password'=>'string', 'hash'=>'string'],
'pathinfo' => ['array|string', 'path'=>'string', 'flags='=>'int'], 'pathinfo' => ['array|string', 'path'=>'string', 'flags='=>'int'],
'pclose' => ['int', 'handle'=>'resource'], 'pclose' => ['int', 'handle'=>'resource'],
@@ -10110,6 +10130,7 @@ return [
'pcntl_sigtimedwait' => ['int', 'signals'=>'array', '&w_info='=>'array', 'seconds='=>'int', 'nanoseconds='=>'int'], 'pcntl_sigtimedwait' => ['int', 'signals'=>'array', '&w_info='=>'array', 'seconds='=>'int', 'nanoseconds='=>'int'],
'pcntl_sigwaitinfo' => ['int', 'signals'=>'array', '&w_info='=>'array'], 'pcntl_sigwaitinfo' => ['int', 'signals'=>'array', '&w_info='=>'array'],
'pcntl_strerror' => ['string', 'error_code'=>'int'], 'pcntl_strerror' => ['string', 'error_code'=>'int'],
'pcntl_unshare' => ['bool', 'flags'=>'int'],
'pcntl_wait' => ['int', '&w_status'=>'int', 'flags='=>'int', '&w_resource_usage='=>'array'], 'pcntl_wait' => ['int', '&w_status'=>'int', 'flags='=>'int', '&w_resource_usage='=>'array'],
'pcntl_waitpid' => ['int', 'process_id'=>'int', '&w_status'=>'int', 'flags='=>'int', '&w_resource_usage='=>'array'], 'pcntl_waitpid' => ['int', 'process_id'=>'int', '&w_status'=>'int', 'flags='=>'int', '&w_resource_usage='=>'array'],
'pcntl_wexitstatus' => ['int', 'status'=>'int'], 'pcntl_wexitstatus' => ['int', 'status'=>'int'],
@@ -10497,7 +10518,7 @@ return [
'PDOStatement::fetch' => ['mixed', 'mode='=>'int', 'cursorOrientation='=>'int', 'cursorOffset='=>'int'], 'PDOStatement::fetch' => ['mixed', 'mode='=>'int', 'cursorOrientation='=>'int', 'cursorOffset='=>'int'],
'PDOStatement::fetchAll' => ['array|false', 'mode='=>'int', 'args='=>'int|string|callable', 'ctor_args='=>'?array'], 'PDOStatement::fetchAll' => ['array|false', 'mode='=>'int', 'args='=>'int|string|callable', 'ctor_args='=>'?array'],
'PDOStatement::fetchColumn' => ['string|null|false', 'column='=>'int'], 'PDOStatement::fetchColumn' => ['string|null|false', 'column='=>'int'],
'PDOStatement::fetchObject' => ['mixed|false', 'class='=>'string', 'ctorArgs='=>'?array'], 'PDOStatement::fetchObject' => ['mixed|false', 'class='=>'string', 'constructorArgs='=>'?array'],
'PDOStatement::getAttribute' => ['mixed', 'name'=>'int'], 'PDOStatement::getAttribute' => ['mixed', 'name'=>'int'],
'PDOStatement::getColumnMeta' => ['array|false', 'column'=>'int'], 'PDOStatement::getColumnMeta' => ['array|false', 'column'=>'int'],
'PDOStatement::nextRowset' => ['bool'], 'PDOStatement::nextRowset' => ['bool'],
@@ -10534,8 +10555,8 @@ return [
'pg_escape_string\'1' => ['string', 'connection'=>'string'], 'pg_escape_string\'1' => ['string', 'connection'=>'string'],
'pg_execute' => ['resource|false', 'connection'=>'resource', 'statement_name'=>'string', 'params'=>'array'], 'pg_execute' => ['resource|false', 'connection'=>'resource', 'statement_name'=>'string', 'params'=>'array'],
'pg_execute\'1' => ['resource|false', 'connection'=>'string', 'statement_name'=>'array'], 'pg_execute\'1' => ['resource|false', 'connection'=>'string', 'statement_name'=>'array'],
'pg_fetch_all' => ['array<int,array>|false', 'result'=>'resource', 'mode='=>'int'], 'pg_fetch_all' => ['array<int,array>', 'result'=>'resource', 'mode='=>'int'],
'pg_fetch_all_columns' => ['array<int,?string>|false', 'result'=>'resource', 'field='=>'int'], 'pg_fetch_all_columns' => ['array<int,?string>', 'result'=>'resource', 'field='=>'int'],
'pg_fetch_array' => ['string[]|null[]|false', 'result'=>'resource', 'row='=>'?int', 'mode='=>'int'], 'pg_fetch_array' => ['string[]|null[]|false', 'result'=>'resource', 'row='=>'?int', 'mode='=>'int'],
'pg_fetch_assoc' => ['array<string,string|null>|false', 'result'=>'resource', 'row='=>'?int'], 'pg_fetch_assoc' => ['array<string,string|null>|false', 'result'=>'resource', 'row='=>'?int'],
'pg_fetch_object' => ['object', 'result'=>'resource', 'row='=>'?int', 'class='=>'int'], 'pg_fetch_object' => ['object', 'result'=>'resource', 'row='=>'?int', 'class='=>'int'],
@@ -10555,7 +10576,7 @@ return [
'pg_field_type_oid' => ['int', 'result'=>'resource', 'field'=>'int'], 'pg_field_type_oid' => ['int', 'result'=>'resource', 'field'=>'int'],
'pg_flush' => ['bool|int', 'connection'=>'resource'], 'pg_flush' => ['bool|int', 'connection'=>'resource'],
'pg_free_result' => ['bool', 'result'=>'resource'], 'pg_free_result' => ['bool', 'result'=>'resource'],
'pg_get_notify' => ['array|false', 'result'=>'resource', 'mode='=>'int'], 'pg_get_notify' => ['array|false', 'connection'=>'resource', 'mode='=>'int'],
'pg_get_pid' => ['int', 'connection'=>'resource'], 'pg_get_pid' => ['int', 'connection'=>'resource'],
'pg_get_result' => ['resource|false', 'connection'=>'resource'], 'pg_get_result' => ['resource|false', 'connection'=>'resource'],
'pg_host' => ['string', 'connection='=>'resource'], 'pg_host' => ['string', 'connection='=>'resource'],
@@ -10698,7 +10719,7 @@ return [
'PharData::setDefaultStub' => ['bool', 'index='=>'string', 'webIndex='=>'string'], 'PharData::setDefaultStub' => ['bool', 'index='=>'string', 'webIndex='=>'string'],
'phardata::setMetadata' => ['void', 'metadata'=>'mixed'], 'phardata::setMetadata' => ['void', 'metadata'=>'mixed'],
'phardata::setSignatureAlgorithm' => ['void', 'algo'=>'int'], 'phardata::setSignatureAlgorithm' => ['void', 'algo'=>'int'],
'PharData::setStub' => ['bool', 'newstub'=>'string', 'maxlen='=>'int'], 'PharData::setStub' => ['bool', 'stub'=>'string', 'length='=>'int'],
'PharFileInfo::__construct' => ['void', 'filename'=>'string'], 'PharFileInfo::__construct' => ['void', 'filename'=>'string'],
'PharFileInfo::chmod' => ['void', 'perms'=>'int'], 'PharFileInfo::chmod' => ['void', 'perms'=>'int'],
'PharFileInfo::compress' => ['bool', 'compression'=>'int'], 'PharFileInfo::compress' => ['bool', 'compression'=>'int'],
@@ -10755,6 +10776,10 @@ return [
'phpdbg_prompt' => ['void', 'string'=>'string'], 'phpdbg_prompt' => ['void', 'string'=>'string'],
'phpdbg_start_oplog' => ['void'], 'phpdbg_start_oplog' => ['void'],
'phpinfo' => ['bool', 'flags='=>'int'], 'phpinfo' => ['bool', 'flags='=>'int'],
'PhpToken::getTokenName' => ['string'],
'PhpToken::is' => ['bool', 'kind'=>'string|int|string[]|int[]'],
'PhpToken::isIgnorable' => ['bool'],
'PhpToken::tokenize' => ['list<PhpToken>', 'code'=>'string', 'flags='=>'int'],
'phpversion' => ['string|false', 'extension='=>'string'], 'phpversion' => ['string|false', 'extension='=>'string'],
'pht\AtomicInteger::__construct' => ['void', 'value='=>'int'], 'pht\AtomicInteger::__construct' => ['void', 'value='=>'int'],
'pht\AtomicInteger::dec' => ['void'], 'pht\AtomicInteger::dec' => ['void'],
@@ -10794,7 +10819,6 @@ return [
'pht\Vector::unshift' => ['void', 'value'=>'mixed'], 'pht\Vector::unshift' => ['void', 'value'=>'mixed'],
'pht\Vector::updateAt' => ['void', 'value'=>'mixed', 'offset'=>'int'], 'pht\Vector::updateAt' => ['void', 'value'=>'mixed', 'offset'=>'int'],
'pi' => ['float'], 'pi' => ['float'],
'png2wbmp' => ['bool', 'pngname'=>'string', 'wbmpname'=>'string', 'dest_height'=>'int', 'dest_width'=>'int', 'threshold'=>'int'],
'pointObj::__construct' => ['void'], 'pointObj::__construct' => ['void'],
'pointObj::distanceToLine' => ['float', 'p1'=>'pointObj', 'p2'=>'pointObj'], 'pointObj::distanceToLine' => ['float', 'p1'=>'pointObj', 'p2'=>'pointObj'],
'pointObj::distanceToPoint' => ['float', 'poPoint'=>'pointObj'], 'pointObj::distanceToPoint' => ['float', 'poPoint'=>'pointObj'],
@@ -10859,8 +10883,8 @@ return [
'preg_match_all' => ['int|false', 'pattern'=>'string', 'subject'=>'string', '&w_matches='=>'array', 'flags='=>'int', 'offset='=>'int'], 'preg_match_all' => ['int|false', 'pattern'=>'string', 'subject'=>'string', '&w_matches='=>'array', 'flags='=>'int', 'offset='=>'int'],
'preg_quote' => ['string', 'str'=>'string', 'delimiter='=>'string'], 'preg_quote' => ['string', 'str'=>'string', 'delimiter='=>'string'],
'preg_replace' => ['string|string[]', 'pattern'=>'string|array', 'replacement'=>'string|array', 'subject'=>'string|array', 'limit='=>'int', '&w_count='=>'int'], 'preg_replace' => ['string|string[]', 'pattern'=>'string|array', 'replacement'=>'string|array', 'subject'=>'string|array', 'limit='=>'int', '&w_count='=>'int'],
'preg_replace_callback' => ['string|string[]', 'pattern'=>'string|array', 'callback'=>'callable(array):string', 'subject'=>'string|array', 'limit='=>'int', '&w_count='=>'int'], 'preg_replace_callback' => ['string|string[]', 'pattern'=>'string|array', 'callback'=>'callable(array):string', 'subject'=>'string|array', 'limit='=>'int', '&w_count='=>'int', 'flags='=>'int'],
'preg_replace_callback_array' => ['string|string[]', 'pattern'=>'array<string,callable(array):string>', 'subject'=>'string|array', 'limit='=>'int', '&w_count='=>'int'], 'preg_replace_callback_array' => ['string|string[]', 'pattern'=>'array<string,callable(array):string>', 'subject'=>'string|array', 'limit='=>'int', '&w_count='=>'int', 'flags='=>'int'],
'preg_split' => ['list<string>', 'pattern'=>'string', 'subject'=>'string', 'limit='=>'int', 'flags='=>'int'], 'preg_split' => ['list<string>', 'pattern'=>'string', 'subject'=>'string', 'limit='=>'int', 'flags='=>'int'],
'prev' => ['mixed', '&r_array'=>'array|object'], 'prev' => ['mixed', '&r_array'=>'array|object'],
'print' => ['int', 'arg'=>'string'], 'print' => ['int', 'arg'=>'string'],
@@ -10868,9 +10892,9 @@ return [
'print_r\'1' => ['true', 'value'=>'mixed', 'return='=>'bool'], 'print_r\'1' => ['true', 'value'=>'mixed', 'return='=>'bool'],
'printf' => ['int', 'format'=>'string', '...values='=>'string|int|float|Stringable'], 'printf' => ['int', 'format'=>'string', '...values='=>'string|int|float|Stringable'],
'proc_close' => ['int', 'process'=>'resource'], 'proc_close' => ['int', 'process'=>'resource'],
'proc_get_status' => ['array<string,int|string|bool>|false', 'process'=>'resource'], 'proc_get_status' => ['array<string,int|string|bool>', 'process'=>'resource'],
'proc_nice' => ['bool', 'priority'=>'int'], 'proc_nice' => ['bool', 'priority'=>'int'],
'proc_open' => ['resource|false', 'command'=>'string', 'descriptor_spec'=>'array', '&w_pipes'=>'resource[]', 'cwd='=>'?string', 'env_vars='=>'?array', 'options='=>'array'], 'proc_open' => ['resource|false', 'command'=>'string|string[]', 'descriptor_spec'=>'array', '&w_pipes'=>'resource[]', 'cwd='=>'?string', 'env_vars='=>'?array', 'options='=>'array'],
'proc_terminate' => ['bool', 'process'=>'resource', 'signal='=>'int'], 'proc_terminate' => ['bool', 'process'=>'resource', 'signal='=>'int'],
'projectionObj::__construct' => ['void', 'projectionString'=>'string'], 'projectionObj::__construct' => ['void', 'projectionString'=>'string'],
'projectionObj::getUnits' => ['int'], 'projectionObj::getUnits' => ['int'],
@@ -11395,7 +11419,6 @@ return [
'RdKafka\TopicPartition::setPartition' => ['void', 'partition'=>'string'], 'RdKafka\TopicPartition::setPartition' => ['void', 'partition'=>'string'],
'RdKafka\TopicPartition::setTopic' => ['void', 'topic_name'=>'string'], 'RdKafka\TopicPartition::setTopic' => ['void', 'topic_name'=>'string'],
'rdp_simplify' => ['', 'pointsArray'=>'', 'epsilon'=>''], 'rdp_simplify' => ['', 'pointsArray'=>'', 'epsilon'=>''],
'read_exif_data' => ['array', 'filename'=>'string', 'sections_needed='=>'string', 'sub_arrays='=>'bool', 'read_thumbnail='=>'bool'],
'readdir' => ['string|false', 'dir_handle='=>'resource'], 'readdir' => ['string|false', 'dir_handle='=>'resource'],
'readfile' => ['int|false', 'filename'=>'string', 'use_include_path='=>'bool', 'context='=>'resource'], 'readfile' => ['int|false', 'filename'=>'string', 'use_include_path='=>'bool', 'context='=>'resource'],
'readgzfile' => ['int|false', 'filename'=>'string', 'use_include_path='=>'int'], 'readgzfile' => ['int|false', 'filename'=>'string', 'use_include_path='=>'int'],
@@ -12091,6 +12114,7 @@ return [
'ReflectionClass::__construct' => ['void', 'objectOrClass'=>'object|class-string'], 'ReflectionClass::__construct' => ['void', 'objectOrClass'=>'object|class-string'],
'ReflectionClass::__toString' => ['string'], 'ReflectionClass::__toString' => ['string'],
'ReflectionClass::export' => ['?string', 'argument'=>'string|object', 'return='=>'bool'], 'ReflectionClass::export' => ['?string', 'argument'=>'string|object', 'return='=>'bool'],
'ReflectionClass::getAttributes' => ['list<ReflectionAttribute>', 'name='=>'?string', 'flags='=>'int'],
'ReflectionClass::getConstant' => ['mixed', 'name'=>'string'], 'ReflectionClass::getConstant' => ['mixed', 'name'=>'string'],
'ReflectionClass::getConstants' => ['array<string,mixed>'], 'ReflectionClass::getConstants' => ['array<string,mixed>'],
'ReflectionClass::getConstructor' => ['?ReflectionMethod'], 'ReflectionClass::getConstructor' => ['?ReflectionMethod'],
@@ -12144,6 +12168,7 @@ return [
'ReflectionClassConstant::__construct' => ['void', 'class'=>'mixed', 'constant'=>'string'], 'ReflectionClassConstant::__construct' => ['void', 'class'=>'mixed', 'constant'=>'string'],
'ReflectionClassConstant::__toString' => ['string'], 'ReflectionClassConstant::__toString' => ['string'],
'ReflectionClassConstant::export' => ['string', 'class'=>'mixed', 'name'=>'string', 'return='=>'bool'], 'ReflectionClassConstant::export' => ['string', 'class'=>'mixed', 'name'=>'string', 'return='=>'bool'],
'ReflectionClassConstant::getAttributes' => ['list<ReflectionAttribute>', 'name='=>'?string', 'flags='=>'int'],
'ReflectionClassConstant::getDeclaringClass' => ['ReflectionClass'], 'ReflectionClassConstant::getDeclaringClass' => ['ReflectionClass'],
'ReflectionClassConstant::getDocComment' => ['string|false'], 'ReflectionClassConstant::getDocComment' => ['string|false'],
'ReflectionClassConstant::getModifiers' => ['int'], 'ReflectionClassConstant::getModifiers' => ['int'],
@@ -12202,6 +12227,7 @@ return [
'ReflectionFunctionAbstract::__clone' => ['void'], 'ReflectionFunctionAbstract::__clone' => ['void'],
'ReflectionFunctionAbstract::__toString' => ['string'], 'ReflectionFunctionAbstract::__toString' => ['string'],
'ReflectionFunctionAbstract::export' => ['?string'], 'ReflectionFunctionAbstract::export' => ['?string'],
'ReflectionFunctionAbstract::getAttributes' => ['list<ReflectionAttribute>', 'name='=>'?string', 'flags='=>'int'],
'ReflectionFunctionAbstract::getClosureScopeClass' => ['ReflectionClass'], 'ReflectionFunctionAbstract::getClosureScopeClass' => ['ReflectionClass'],
'ReflectionFunctionAbstract::getClosureThis' => ['object'], 'ReflectionFunctionAbstract::getClosureThis' => ['object'],
'ReflectionFunctionAbstract::getDocComment' => ['string|false'], 'ReflectionFunctionAbstract::getDocComment' => ['string|false'],
@@ -12343,6 +12369,7 @@ return [
'ReflectionParameter::allowsNull' => ['bool'], 'ReflectionParameter::allowsNull' => ['bool'],
'ReflectionParameter::canBePassedByValue' => ['bool'], 'ReflectionParameter::canBePassedByValue' => ['bool'],
'ReflectionParameter::export' => ['?string', 'function'=>'string', 'parameter'=>'string', 'return='=>'bool'], 'ReflectionParameter::export' => ['?string', 'function'=>'string', 'parameter'=>'string', 'return='=>'bool'],
'ReflectionParameter::getAttributes' => ['list<ReflectionAttribute>', 'name='=>'?string', 'flags='=>'int'],
'ReflectionParameter::getClass' => ['?ReflectionClass'], 'ReflectionParameter::getClass' => ['?ReflectionClass'],
'ReflectionParameter::getDeclaringClass' => ['?ReflectionClass'], 'ReflectionParameter::getDeclaringClass' => ['?ReflectionClass'],
'ReflectionParameter::getDeclaringFunction' => ['ReflectionFunctionAbstract'], 'ReflectionParameter::getDeclaringFunction' => ['ReflectionFunctionAbstract'],
@@ -12363,6 +12390,7 @@ return [
'ReflectionProperty::__construct' => ['void', 'class'=>'', 'property'=>'string'], 'ReflectionProperty::__construct' => ['void', 'class'=>'', 'property'=>'string'],
'ReflectionProperty::__toString' => ['string'], 'ReflectionProperty::__toString' => ['string'],
'ReflectionProperty::export' => ['?string', 'class'=>'mixed', 'name'=>'string', 'return='=>'bool'], 'ReflectionProperty::export' => ['?string', 'class'=>'mixed', 'name'=>'string', 'return='=>'bool'],
'ReflectionProperty::getAttributes' => ['list<ReflectionAttribute>', 'name='=>'?string', 'flags='=>'int'],
'ReflectionProperty::getDeclaringClass' => ['ReflectionClass'], 'ReflectionProperty::getDeclaringClass' => ['ReflectionClass'],
'ReflectionProperty::getDocComment' => ['string|false'], 'ReflectionProperty::getDocComment' => ['string|false'],
'ReflectionProperty::getModifiers' => ['int'], 'ReflectionProperty::getModifiers' => ['int'],
@@ -12376,11 +12404,13 @@ return [
'ReflectionProperty::setAccessible' => ['void', 'accessible'=>'bool'], 'ReflectionProperty::setAccessible' => ['void', 'accessible'=>'bool'],
'ReflectionProperty::setValue' => ['void', 'objectOrValue'=>'object', 'value'=>''], 'ReflectionProperty::setValue' => ['void', 'objectOrValue'=>'object', 'value'=>''],
'ReflectionProperty::setValue\'1' => ['void', 'value'=>''], 'ReflectionProperty::setValue\'1' => ['void', 'value'=>''],
'ReflectionReference::fromArrayElement' => ['?ReflectionReference', 'array'=>'array', 'key'=>'int|string'],
'ReflectionReference::getId' => ['string'],
'ReflectionType::__clone' => ['void'], 'ReflectionType::__clone' => ['void'],
'ReflectionType::__toString' => ['string'], 'ReflectionType::__toString' => ['string'],
'ReflectionType::allowsNull' => ['bool'], 'ReflectionType::allowsNull' => ['bool'],
'ReflectionType::getName' => ['string'], 'ReflectionType::getName' => ['string'],
'ReflectionType::isBuiltin' => ['bool'], 'ReflectionUnionType::getTypes' => ['list<ReflectionNamedType>'],
'ReflectionZendExtension::__clone' => ['void'], 'ReflectionZendExtension::__clone' => ['void'],
'ReflectionZendExtension::__construct' => ['void', 'name'=>'string'], 'ReflectionZendExtension::__construct' => ['void', 'name'=>'string'],
'ReflectionZendExtension::__toString' => ['string'], 'ReflectionZendExtension::__toString' => ['string'],
@@ -12547,6 +12577,7 @@ return [
'sapi_windows_cp_get' => ['int', 'kind='=>'string'], 'sapi_windows_cp_get' => ['int', 'kind='=>'string'],
'sapi_windows_cp_is_utf8' => ['bool'], 'sapi_windows_cp_is_utf8' => ['bool'],
'sapi_windows_cp_set' => ['bool', 'codepage'=>'int'], 'sapi_windows_cp_set' => ['bool', 'codepage'=>'int'],
'sapi_windows_set_ctrl_handler' => ['bool', 'handler'=>'callable(int):void', 'add='=>'bool'],
'sapi_windows_vt100_support' => ['bool', 'stream'=>'resource', 'enable='=>'bool'], 'sapi_windows_vt100_support' => ['bool', 'stream'=>'resource', 'enable='=>'bool'],
'SapiRequest::__construct' => ['void', 'globals'=>'array', 'content='=>'?string'], 'SapiRequest::__construct' => ['void', 'globals'=>'array', 'content='=>'?string'],
'SapiResponse::addHeader' => ['\SapiResponseInterface', 'label'=>'string', 'value'=>'string'], 'SapiResponse::addHeader' => ['\SapiResponseInterface', 'label'=>'string', 'value'=>'string'],
@@ -12849,10 +12880,10 @@ return [
'SeekableIterator::rewind' => ['void'], 'SeekableIterator::rewind' => ['void'],
'SeekableIterator::seek' => ['void', 'offset'=>'int'], 'SeekableIterator::seek' => ['void', 'offset'=>'int'],
'SeekableIterator::valid' => ['bool'], 'SeekableIterator::valid' => ['bool'],
'sem_acquire' => ['bool', 'semaphore'=>'resource', 'non_blocking='=>'bool'], 'sem_acquire' => ['bool', 'semaphore'=>'SysvSemaphore', 'non_blocking='=>'bool'],
'sem_get' => ['resource|false', 'key'=>'int', 'max_acquire='=>'int', 'permissions='=>'int', 'auto_release='=>'bool'], 'sem_get' => ['SysvSemaphore|false', 'key'=>'int', 'max_acquire='=>'int', 'permissions='=>'int', 'auto_release='=>'bool'],
'sem_release' => ['bool', 'semaphore'=>'resource'], 'sem_release' => ['bool', 'semaphore'=>'SysvSemaphore'],
'sem_remove' => ['bool', 'semaphore'=>'resource'], 'sem_remove' => ['bool', 'semaphore'=>'SysvSemaphore'],
'Serializable::__construct' => ['void'], 'Serializable::__construct' => ['void'],
'Serializable::serialize' => ['?string'], 'Serializable::serialize' => ['?string'],
'Serializable::unserialize' => ['void', 'data'=>'string'], 'Serializable::unserialize' => ['void', 'data'=>'string'],
@@ -12992,24 +13023,24 @@ return [
'shapeObj::union' => ['shapeObj', 'shape'=>'shapeObj'], 'shapeObj::union' => ['shapeObj', 'shape'=>'shapeObj'],
'shapeObj::within' => ['int', 'shape2'=>'shapeObj'], 'shapeObj::within' => ['int', 'shape2'=>'shapeObj'],
'shell_exec' => ['?string', 'command'=>'string'], 'shell_exec' => ['?string', 'command'=>'string'],
'shm_attach' => ['resource', 'key'=>'int', 'size='=>'int', 'permissions='=>'int'], 'shm_attach' => ['SysvSharedMemory', 'key'=>'int', 'size='=>'int', 'permissions='=>'int'],
'shm_detach' => ['bool', 'shm'=>'resource'], 'shm_detach' => ['bool', 'shm'=>'SysvSharedMemory'],
'shm_get_var' => ['mixed', 'shm'=>'resource', 'key'=>'int'], 'shm_get_var' => ['mixed', 'shm'=>'SysvSharedMemory', 'key'=>'int'],
'shm_has_var' => ['bool', 'shm'=>'resource', 'key'=>'int'], 'shm_has_var' => ['bool', 'shm'=>'SysvSharedMemory', 'key'=>'int'],
'shm_put_var' => ['bool', 'shm'=>'resource', 'key'=>'int', 'value'=>'mixed'], 'shm_put_var' => ['bool', 'shm'=>'SysvSharedMemory', 'key'=>'int', 'value'=>'mixed'],
'shm_remove' => ['bool', 'shm'=>'resource'], 'shm_remove' => ['bool', 'shm'=>'SysvSharedMemory'],
'shm_remove_var' => ['bool', 'shm'=>'resource', 'key'=>'int'], 'shm_remove_var' => ['bool', 'shm'=>'SysvSharedMemory', 'key'=>'int'],
'shmop_close' => ['void', 'shmop'=>'resource'], 'shmop_close' => ['void', 'shmop'=>'Shmop'],
'shmop_delete' => ['bool', 'shmop'=>'resource'], 'shmop_delete' => ['bool', 'shmop'=>'Shmop'],
'shmop_open' => ['resource|false', 'key'=>'int', 'mode'=>'string', 'permissions'=>'int', 'size'=>'int'], 'shmop_open' => ['Shmop', 'key'=>'int', 'mode'=>'string', 'permissions'=>'int', 'size'=>'int'],
'shmop_read' => ['string|false', 'shmop'=>'resource', 'offset'=>'int', 'size'=>'int'], 'shmop_read' => ['string', 'shmop'=>'Shmop', 'offset'=>'int', 'size'=>'int'],
'shmop_size' => ['int', 'shmop'=>'resource'], 'shmop_size' => ['int', 'shmop'=>'Shmop'],
'shmop_write' => ['int|false', 'shmop'=>'resource', 'data'=>'string', 'offset'=>'int'], 'shmop_write' => ['int', 'shmop'=>'Shmop', 'data'=>'string', 'offset'=>'int'],
'show_source' => ['string|bool', 'filename'=>'string', 'return='=>'bool'], 'show_source' => ['string|bool', 'filename'=>'string', 'return='=>'bool'],
'shuffle' => ['bool', '&rw_array'=>'array'], 'shuffle' => ['bool', '&rw_array'=>'array'],
'signeurlpaiement' => ['string', 'clent'=>'string', 'data'=>'string'], 'signeurlpaiement' => ['string', 'clent'=>'string', 'data'=>'string'],
'similar_text' => ['int', 'string1'=>'string', 'string2'=>'string', '&w_percent='=>'float'], 'similar_text' => ['int', 'string1'=>'string', 'string2'=>'string', '&w_percent='=>'float'],
'simplexml_import_dom' => ['SimpleXMLElement|false', 'node'=>'DOMNode', 'class_name='=>'string'], 'simplexml_import_dom' => ['SimpleXMLElement', 'node'=>'DOMNode', 'class_name='=>'string'],
'simplexml_load_file' => ['SimpleXMLElement|false', 'filename'=>'string', 'class_name='=>'string', 'options='=>'int', 'namespace_or_prefix='=>'string', 'is_prefix='=>'bool'], 'simplexml_load_file' => ['SimpleXMLElement|false', 'filename'=>'string', 'class_name='=>'string', 'options='=>'int', 'namespace_or_prefix='=>'string', 'is_prefix='=>'bool'],
'simplexml_load_string' => ['SimpleXMLElement|false', 'data'=>'string', 'class_name='=>'string', 'options='=>'int', 'namespace_or_prefix='=>'string', 'is_prefix='=>'bool'], 'simplexml_load_string' => ['SimpleXMLElement|false', 'data'=>'string', 'class_name='=>'string', 'options='=>'int', 'namespace_or_prefix='=>'string', 'is_prefix='=>'bool'],
'SimpleXMLElement::__construct' => ['void', 'data'=>'string', 'options='=>'int', 'dataIsURL='=>'bool', 'namespaceOrPrefix='=>'string', 'isPrefix='=>'bool'], 'SimpleXMLElement::__construct' => ['void', 'data'=>'string', 'options='=>'int', 'dataIsURL='=>'bool', 'namespaceOrPrefix='=>'string', 'isPrefix='=>'bool'],
@@ -13055,7 +13086,7 @@ return [
'sin' => ['float', 'num'=>'float'], 'sin' => ['float', 'num'=>'float'],
'sinh' => ['float', 'num'=>'float'], 'sinh' => ['float', 'num'=>'float'],
'sizeof' => ['int', 'value'=>'Countable|array', 'mode='=>'int'], 'sizeof' => ['int', 'value'=>'Countable|array', 'mode='=>'int'],
'sleep' => ['int|false', 'seconds'=>'int'], 'sleep' => ['int', 'seconds'=>'int'],
'snmp2_get' => ['string|false', 'hostname'=>'string', 'community'=>'string', 'object_id'=>'string', 'timeout='=>'int', 'retries='=>'int'], 'snmp2_get' => ['string|false', 'hostname'=>'string', 'community'=>'string', 'object_id'=>'string', 'timeout='=>'int', 'retries='=>'int'],
'snmp2_getnext' => ['string|false', 'hostname'=>'string', 'community'=>'string', 'object_id'=>'string', 'timeout='=>'int', 'retries='=>'int'], 'snmp2_getnext' => ['string|false', 'hostname'=>'string', 'community'=>'string', 'object_id'=>'string', 'timeout='=>'int', 'retries='=>'int'],
'snmp2_real_walk' => ['array|false', 'hostname'=>'string', 'community'=>'string', 'object_id'=>'string', 'timeout='=>'int', 'retries='=>'int'], 'snmp2_real_walk' => ['array|false', 'hostname'=>'string', 'community'=>'string', 'object_id'=>'string', 'timeout='=>'int', 'retries='=>'int'],
@@ -13132,47 +13163,47 @@ return [
'SoapServer::SoapServer' => ['object', 'wsdl'=>'?string', 'options='=>'array'], 'SoapServer::SoapServer' => ['object', 'wsdl'=>'?string', 'options='=>'array'],
'SoapVar::__construct' => ['void', 'data'=>'mixed', 'encoding'=>'int', 'typeName='=>'string', 'typeNamespace='=>'string', 'nodeName='=>'string', 'nodeNamespace='=>'string'], 'SoapVar::__construct' => ['void', 'data'=>'mixed', 'encoding'=>'int', 'typeName='=>'string', 'typeNamespace='=>'string', 'nodeName='=>'string', 'nodeNamespace='=>'string'],
'SoapVar::SoapVar' => ['object', 'data'=>'mixed', 'encoding'=>'int', 'type_name='=>'string', 'type_namespace='=>'string', 'node_name='=>'string', 'node_namespace='=>'string'], 'SoapVar::SoapVar' => ['object', 'data'=>'mixed', 'encoding'=>'int', 'type_name='=>'string', 'type_namespace='=>'string', 'node_name='=>'string', 'node_namespace='=>'string'],
'socket_accept' => ['resource|false', 'socket'=>'resource'], 'socket_accept' => ['Socket|false', 'socket'=>'Socket'],
'socket_addrinfo_bind' => ['?resource', 'address'=>'resource'], 'socket_addrinfo_bind' => ['Socket|false', 'address'=>'AddressInfo'],
'socket_addrinfo_connect' => ['?resource', 'address'=>'resource'], 'socket_addrinfo_connect' => ['Socket|false', 'address'=>'AddressInfo'],
'socket_addrinfo_explain' => ['array', 'address'=>'resource'], 'socket_addrinfo_explain' => ['array', 'address'=>'AddressInfo'],
'socket_addrinfo_lookup' => ['resource[]', 'host'=>'string', 'service='=>'?string', 'hints='=>'array'], 'socket_addrinfo_lookup' => ['AddressInfo[]', 'host'=>'string', 'service='=>'?string', 'hints='=>'array'],
'socket_bind' => ['bool', 'socket'=>'resource', 'address'=>'string', 'port='=>'int'], 'socket_bind' => ['bool', 'socket'=>'Socket', 'address'=>'string', 'port='=>'int'],
'socket_clear_error' => ['void', 'socket='=>'resource'], 'socket_clear_error' => ['void', 'socket='=>'Socket'],
'socket_close' => ['void', 'socket'=>'resource'], 'socket_close' => ['void', 'socket'=>'Socket'],
'socket_cmsg_space' => ['int', 'level'=>'int', 'type'=>'int', 'num='=>'int'], 'socket_cmsg_space' => ['int', 'level'=>'int', 'type'=>'int', 'num='=>'int'],
'socket_connect' => ['bool', 'socket'=>'resource', 'address'=>'string', 'port='=>'int'], 'socket_connect' => ['bool', 'socket'=>'Socket', 'address'=>'string', 'port='=>'int'],
'socket_create' => ['resource|false', 'domain'=>'int', 'type'=>'int', 'protocol'=>'int'], 'socket_create' => ['Socket|false', 'domain'=>'int', 'type'=>'int', 'protocol'=>'int'],
'socket_create_listen' => ['resource|false', 'port'=>'int', 'backlog='=>'int'], 'socket_create_listen' => ['Socket|false', 'port'=>'int', 'backlog='=>'int'],
'socket_create_pair' => ['bool', 'domain'=>'int', 'type'=>'int', 'protocol'=>'int', '&w_pair'=>'resource[]'], 'socket_create_pair' => ['bool', 'domain'=>'int', 'type'=>'int', 'protocol'=>'int', '&w_pair'=>'Socket[]'],
'socket_export_stream' => ['resource|false', 'socket'=>'resource'], 'socket_export_stream' => ['resource|false', 'socket'=>'Socket'],
'socket_get_option' => ['array|false|int', 'socket'=>'resource', 'level'=>'int', 'option'=>'int'], 'socket_get_option' => ['array|false|int', 'socket'=>'Socket', 'level'=>'int', 'option'=>'int'],
'socket_get_status' => ['array<string,mixed>', 'stream'=>'resource'], 'socket_get_status' => ['array<string,mixed>', 'stream'=>'Socket'],
'socket_getopt' => ['array|false|int', 'socket'=>'resource', 'level'=>'int', 'option'=>'int'], 'socket_getopt' => ['array|false|int', 'socket'=>'Socket', 'level'=>'int', 'option'=>'int'],
'socket_getpeername' => ['bool', 'socket'=>'resource', '&w_address'=>'string', '&w_port='=>'int'], 'socket_getpeername' => ['bool', 'socket'=>'Socket', '&w_address'=>'string', '&w_port='=>'int'],
'socket_getsockname' => ['bool', 'socket'=>'resource', '&w_address'=>'string', '&w_port='=>'int'], 'socket_getsockname' => ['bool', 'socket'=>'Socket', '&w_address'=>'string', '&w_port='=>'int'],
'socket_import_stream' => ['resource|false|null', 'stream'=>'resource'], 'socket_import_stream' => ['Socket|false', 'stream'=>'resource'],
'socket_last_error' => ['int', 'socket='=>'resource'], 'socket_last_error' => ['int', 'socket='=>'Socket'],
'socket_listen' => ['bool', 'socket'=>'resource', 'backlog='=>'int'], 'socket_listen' => ['bool', 'socket'=>'Socket', 'backlog='=>'int'],
'socket_read' => ['string|false', 'socket'=>'resource', 'length'=>'int', 'mode='=>'int'], 'socket_read' => ['string|false', 'socket'=>'Socket', 'length'=>'int', 'mode='=>'int'],
'socket_recv' => ['int|false', 'socket'=>'resource', '&w_data'=>'string', 'length'=>'int', 'flags'=>'int'], 'socket_recv' => ['int|false', 'socket'=>'Socket', '&w_data'=>'string', 'length'=>'int', 'flags'=>'int'],
'socket_recvfrom' => ['int|false', 'socket'=>'resource', '&w_data'=>'string', 'length'=>'int', 'flags'=>'int', '&w_address'=>'string', '&w_port='=>'int'], 'socket_recvfrom' => ['int|false', 'socket'=>'Socket', '&w_data'=>'string', 'length'=>'int', 'flags'=>'int', '&w_address'=>'string', '&w_port='=>'int'],
'socket_recvmsg' => ['int|false', 'socket'=>'resource', '&w_message'=>'array', 'flags='=>'int'], 'socket_recvmsg' => ['int|false', 'socket'=>'Socket', '&w_message'=>'array', 'flags='=>'int'],
'socket_select' => ['int|false', '&rw_read'=>'resource[]|null', '&rw_write'=>'resource[]|null', '&rw_except'=>'resource[]|null', 'seconds'=>'int', 'microseconds='=>'int'], 'socket_select' => ['int|false', '&rw_read'=>'Socket[]|null', '&rw_write'=>'Socket[]|null', '&rw_except'=>'Socket[]|null', 'seconds'=>'int', 'microseconds='=>'int'],
'socket_send' => ['int|false', 'socket'=>'resource', 'data'=>'string', 'length'=>'int', 'flags'=>'int'], 'socket_send' => ['int|false', 'socket'=>'Socket', 'data'=>'string', 'length'=>'int', 'flags'=>'int'],
'socket_sendmsg' => ['int|false', 'socket'=>'resource', 'message'=>'array', 'flags='=>'int'], 'socket_sendmsg' => ['int|false', 'socket'=>'Socket', 'message'=>'array', 'flags='=>'int'],
'socket_sendto' => ['int|false', 'socket'=>'resource', 'data'=>'string', 'length'=>'int', 'flags'=>'int', 'address'=>'string', 'port='=>'int'], 'socket_sendto' => ['int|false', 'socket'=>'Socket', 'data'=>'string', 'length'=>'int', 'flags'=>'int', 'address'=>'string', 'port='=>'int'],
'socket_set_block' => ['bool', 'socket'=>'resource'], 'socket_set_block' => ['bool', 'socket'=>'Socket'],
'socket_set_blocking' => ['bool', 'stream'=>'resource', 'enable'=>'bool'], 'socket_set_blocking' => ['bool', 'stream'=>'Socket', 'enable'=>'bool'],
'socket_set_nonblock' => ['bool', 'socket'=>'resource'], 'socket_set_nonblock' => ['bool', 'socket'=>'Socket'],
'socket_set_option' => ['bool', 'socket'=>'resource', 'level'=>'int', 'option'=>'int', 'value'=>'int|string|array'], 'socket_set_option' => ['bool', 'socket'=>'Socket', 'level'=>'int', 'option'=>'int', 'value'=>'int|string|array'],
'socket_set_timeout' => ['bool', 'stream'=>'resource', 'seconds'=>'int', 'microseconds='=>'int'], 'socket_set_timeout' => ['bool', 'stream'=>'resource', 'seconds'=>'int', 'microseconds='=>'int'],
'socket_setopt' => ['bool', 'socket'=>'resource', 'level'=>'int', 'option'=>'int', 'value'=>'int|string|array'], 'socket_setopt' => ['bool', 'socket'=>'Socket', 'level'=>'int', 'option'=>'int', 'value'=>'int|string|array'],
'socket_shutdown' => ['bool', 'socket'=>'resource', 'mode='=>'int'], 'socket_shutdown' => ['bool', 'socket'=>'Socket', 'mode='=>'int'],
'socket_strerror' => ['string', 'error_code'=>'int'], 'socket_strerror' => ['string', 'error_code'=>'int'],
'socket_write' => ['int|false', 'socket'=>'resource', 'data'=>'string', 'length='=>'int'], 'socket_write' => ['int|false', 'socket'=>'Socket', 'data'=>'string', 'length='=>'int'],
'socket_wsaprotocol_info_export' => ['string|false', 'socket'=>'resource', 'process_id'=>'int'], 'socket_wsaprotocol_info_export' => ['string|false', 'socket'=>'Socket', 'process_id'=>'int'],
'socket_wsaprotocol_info_import' => ['resource|false', 'info_id'=>'string'], 'socket_wsaprotocol_info_import' => ['Socket|false', 'info_id'=>'string'],
'socket_wsaprotocol_info_release' => ['bool', 'info_id'=>'string'], 'socket_wsaprotocol_info_release' => ['bool', 'info_id'=>'string'],
'Sodium\add' => ['void', '&left'=>'string', 'right'=>'string'], 'Sodium\add' => ['void', '&left'=>'string', 'right'=>'string'],
'Sodium\bin2hex' => ['string', 'binary'=>'string'], 'Sodium\bin2hex' => ['string', 'binary'=>'string'],
@@ -13261,7 +13292,7 @@ return [
'sodium_crypto_box_open' => ['string|false', 'ciphertext'=>'string', 'nonce'=>'string', 'key_pair'=>'string'], 'sodium_crypto_box_open' => ['string|false', 'ciphertext'=>'string', 'nonce'=>'string', 'key_pair'=>'string'],
'sodium_crypto_box_publickey' => ['string', 'key_pair'=>'string'], 'sodium_crypto_box_publickey' => ['string', 'key_pair'=>'string'],
'sodium_crypto_box_publickey_from_secretkey' => ['string', 'secret_key'=>'string'], 'sodium_crypto_box_publickey_from_secretkey' => ['string', 'secret_key'=>'string'],
'sodium_crypto_box_seal' => ['string', 'message'=>'string', 'key_pair'=>'string'], 'sodium_crypto_box_seal' => ['string', 'message'=>'string', 'public_key'=>'string'],
'sodium_crypto_box_seal_open' => ['string|false', 'ciphertext'=>'string', 'key_pair'=>'string'], 'sodium_crypto_box_seal_open' => ['string|false', 'ciphertext'=>'string', 'key_pair'=>'string'],
'sodium_crypto_box_secretkey' => ['string', 'key_pair'=>'string'], 'sodium_crypto_box_secretkey' => ['string', 'key_pair'=>'string'],
'sodium_crypto_box_seed_keypair' => ['string', 'seed'=>'string'], 'sodium_crypto_box_seed_keypair' => ['string', 'seed'=>'string'],
@@ -13305,7 +13336,7 @@ return [
'sodium_crypto_sign_ed25519_sk_to_curve25519' => ['string', 'secret_key'=>'string'], 'sodium_crypto_sign_ed25519_sk_to_curve25519' => ['string', 'secret_key'=>'string'],
'sodium_crypto_sign_keypair' => ['string'], 'sodium_crypto_sign_keypair' => ['string'],
'sodium_crypto_sign_keypair_from_secretkey_and_publickey' => ['string', 'secret_key'=>'string', 'public_key'=>'string'], 'sodium_crypto_sign_keypair_from_secretkey_and_publickey' => ['string', 'secret_key'=>'string', 'public_key'=>'string'],
'sodium_crypto_sign_open' => ['string|false', 'ciphertext'=>'string', 'public_key'=>'string'], 'sodium_crypto_sign_open' => ['string|false', 'signed_message'=>'string', 'public_key'=>'string'],
'sodium_crypto_sign_publickey' => ['string', 'key_pair'=>'string'], 'sodium_crypto_sign_publickey' => ['string', 'key_pair'=>'string'],
'sodium_crypto_sign_publickey_from_secretkey' => ['string', 'secret_key'=>'string'], 'sodium_crypto_sign_publickey_from_secretkey' => ['string', 'secret_key'=>'string'],
'sodium_crypto_sign_secretkey' => ['string', 'key_pair'=>'string'], 'sodium_crypto_sign_secretkey' => ['string', 'key_pair'=>'string'],
@@ -13320,7 +13351,7 @@ return [
'sodium_library_version_minor' => ['int'], 'sodium_library_version_minor' => ['int'],
'sodium_memcmp' => ['int', 'string1'=>'string', 'string2'=>'string'], 'sodium_memcmp' => ['int', 'string1'=>'string', 'string2'=>'string'],
'sodium_memzero' => ['void', '&string'=>'string'], 'sodium_memzero' => ['void', '&string'=>'string'],
'sodium_pad' => ['string', 'string'=>'string', 'length'=>'int'], 'sodium_pad' => ['string', 'string'=>'string', 'block_size'=>'int'],
'sodium_randombytes_buf' => ['string', 'length'=>'int'], 'sodium_randombytes_buf' => ['string', 'length'=>'int'],
'sodium_randombytes_random16' => ['int|string'], 'sodium_randombytes_random16' => ['int|string'],
'sodium_randombytes_uniform' => ['int', 'upperBoundNonInclusive'=>'int'], 'sodium_randombytes_uniform' => ['int', 'upperBoundNonInclusive'=>'int'],
@@ -14063,7 +14094,7 @@ return [
'spl_object_hash' => ['string', 'object'=>'object'], 'spl_object_hash' => ['string', 'object'=>'object'],
'spl_object_id' => ['int', 'object'=>'object'], 'spl_object_id' => ['int', 'object'=>'object'],
'SplDoublyLinkedList::__construct' => ['void'], 'SplDoublyLinkedList::__construct' => ['void'],
'SplDoublyLinkedList::add' => ['void', 'index'=>'mixed', 'value'=>'mixed'], 'SplDoublyLinkedList::add' => ['void', 'index'=>'int', 'value'=>'mixed'],
'SplDoublyLinkedList::bottom' => ['mixed'], 'SplDoublyLinkedList::bottom' => ['mixed'],
'SplDoublyLinkedList::count' => ['int'], 'SplDoublyLinkedList::count' => ['int'],
'SplDoublyLinkedList::current' => ['mixed'], 'SplDoublyLinkedList::current' => ['mixed'],
@@ -14071,16 +14102,16 @@ return [
'SplDoublyLinkedList::isEmpty' => ['bool'], 'SplDoublyLinkedList::isEmpty' => ['bool'],
'SplDoublyLinkedList::key' => ['mixed'], 'SplDoublyLinkedList::key' => ['mixed'],
'SplDoublyLinkedList::next' => ['void'], 'SplDoublyLinkedList::next' => ['void'],
'SplDoublyLinkedList::offsetExists' => ['bool', 'index'=>'mixed'], 'SplDoublyLinkedList::offsetExists' => ['bool', 'index'=>'int'],
'SplDoublyLinkedList::offsetGet' => ['mixed', 'index'=>'mixed'], 'SplDoublyLinkedList::offsetGet' => ['mixed', 'index'=>'int'],
'SplDoublyLinkedList::offsetSet' => ['void', 'index'=>'mixed', 'value'=>'mixed'], 'SplDoublyLinkedList::offsetSet' => ['void', 'index'=>'int', 'value'=>'mixed'],
'SplDoublyLinkedList::offsetUnset' => ['void', 'index'=>'mixed'], 'SplDoublyLinkedList::offsetUnset' => ['void', 'index'=>'int'],
'SplDoublyLinkedList::pop' => ['mixed'], 'SplDoublyLinkedList::pop' => ['mixed'],
'SplDoublyLinkedList::prev' => ['void'], 'SplDoublyLinkedList::prev' => ['void'],
'SplDoublyLinkedList::push' => ['void', 'value'=>'mixed'], 'SplDoublyLinkedList::push' => ['void', 'value'=>'mixed'],
'SplDoublyLinkedList::rewind' => ['void'], 'SplDoublyLinkedList::rewind' => ['void'],
'SplDoublyLinkedList::serialize' => ['string'], 'SplDoublyLinkedList::serialize' => ['string'],
'SplDoublyLinkedList::setIteratorMode' => ['void', 'mode'=>'int'], 'SplDoublyLinkedList::setIteratorMode' => ['int', 'mode'=>'int'],
'SplDoublyLinkedList::shift' => ['mixed'], 'SplDoublyLinkedList::shift' => ['mixed'],
'SplDoublyLinkedList::top' => ['mixed'], 'SplDoublyLinkedList::top' => ['mixed'],
'SplDoublyLinkedList::unserialize' => ['void', 'data'=>'string'], 'SplDoublyLinkedList::unserialize' => ['void', 'data'=>'string'],
@@ -14128,7 +14159,6 @@ return [
'SplFileObject::fgetc' => ['string|false'], 'SplFileObject::fgetc' => ['string|false'],
'SplFileObject::fgetcsv' => ['?array|false', 'separator='=>'string', 'enclosure='=>'string', 'escape='=>'string'], 'SplFileObject::fgetcsv' => ['?array|false', 'separator='=>'string', 'enclosure='=>'string', 'escape='=>'string'],
'SplFileObject::fgets' => ['string|false'], 'SplFileObject::fgets' => ['string|false'],
'SplFileObject::fgetss' => ['string|false', 'allowable_tags='=>'string'],
'SplFileObject::flock' => ['bool', 'operation'=>'int', '&w_wouldBlock='=>'int'], 'SplFileObject::flock' => ['bool', 'operation'=>'int', '&w_wouldBlock='=>'int'],
'SplFileObject::fpassthru' => ['int|false'], 'SplFileObject::fpassthru' => ['int|false'],
'SplFileObject::fputcsv' => ['int|false', 'fields'=>'array', 'separator='=>'string', 'enclosure='=>'string', 'escape='=>'string'], 'SplFileObject::fputcsv' => ['int|false', 'fields'=>'array', 'separator='=>'string', 'enclosure='=>'string', 'escape='=>'string'],
@@ -14206,7 +14236,7 @@ return [
'SplHeap::isEmpty' => ['bool'], 'SplHeap::isEmpty' => ['bool'],
'SplHeap::key' => ['int'], 'SplHeap::key' => ['int'],
'SplHeap::next' => ['void'], 'SplHeap::next' => ['void'],
'SplHeap::recoverFromCorruption' => ['int'], 'SplHeap::recoverFromCorruption' => ['bool'],
'SplHeap::rewind' => ['void'], 'SplHeap::rewind' => ['void'],
'SplHeap::top' => ['mixed'], 'SplHeap::top' => ['mixed'],
'SplHeap::valid' => ['bool'], 'SplHeap::valid' => ['bool'],
@@ -14220,7 +14250,7 @@ return [
'SplMaxHeap::isEmpty' => ['bool'], 'SplMaxHeap::isEmpty' => ['bool'],
'SplMaxHeap::key' => ['int'], 'SplMaxHeap::key' => ['int'],
'SplMaxHeap::next' => ['void'], 'SplMaxHeap::next' => ['void'],
'SplMaxHeap::recoverFromCorruption' => ['int'], 'SplMaxHeap::recoverFromCorruption' => ['bool'],
'SplMaxHeap::rewind' => ['void'], 'SplMaxHeap::rewind' => ['void'],
'SplMaxHeap::top' => ['mixed'], 'SplMaxHeap::top' => ['mixed'],
'SplMaxHeap::valid' => ['bool'], 'SplMaxHeap::valid' => ['bool'],
@@ -14234,12 +14264,12 @@ return [
'SplMinHeap::isEmpty' => ['bool'], 'SplMinHeap::isEmpty' => ['bool'],
'SplMinHeap::key' => ['mixed'], 'SplMinHeap::key' => ['mixed'],
'SplMinHeap::next' => ['void'], 'SplMinHeap::next' => ['void'],
'SplMinHeap::recoverFromCorruption' => ['void'], 'SplMinHeap::recoverFromCorruption' => ['bool'],
'SplMinHeap::rewind' => ['void'], 'SplMinHeap::rewind' => ['void'],
'SplMinHeap::top' => ['mixed'], 'SplMinHeap::top' => ['mixed'],
'SplMinHeap::valid' => ['bool'], 'SplMinHeap::valid' => ['bool'],
'SplObjectStorage::__construct' => ['void'], 'SplObjectStorage::__construct' => ['void'],
'SplObjectStorage::addAll' => ['void', 'storage'=>'splobjectstorage'], 'SplObjectStorage::addAll' => ['int', 'storage'=>'splobjectstorage'],
'SplObjectStorage::attach' => ['void', 'object'=>'object', 'info='=>'mixed'], 'SplObjectStorage::attach' => ['void', 'object'=>'object', 'info='=>'mixed'],
'SplObjectStorage::contains' => ['bool', 'object'=>'object'], 'SplObjectStorage::contains' => ['bool', 'object'=>'object'],
'SplObjectStorage::count' => ['int'], 'SplObjectStorage::count' => ['int'],
@@ -14270,11 +14300,11 @@ return [
'SplPriorityQueue::insert' => ['bool', 'value'=>'mixed', 'priority'=>'mixed'], 'SplPriorityQueue::insert' => ['bool', 'value'=>'mixed', 'priority'=>'mixed'],
'SplPriorityQueue::isCorrupted' => ['bool'], 'SplPriorityQueue::isCorrupted' => ['bool'],
'SplPriorityQueue::isEmpty' => ['bool'], 'SplPriorityQueue::isEmpty' => ['bool'],
'SplPriorityQueue::key' => ['mixed'], 'SplPriorityQueue::key' => ['int'],
'SplPriorityQueue::next' => ['void'], 'SplPriorityQueue::next' => ['void'],
'SplPriorityQueue::recoverFromCorruption' => ['void'], 'SplPriorityQueue::recoverFromCorruption' => ['bool'],
'SplPriorityQueue::rewind' => ['void'], 'SplPriorityQueue::rewind' => ['void'],
'SplPriorityQueue::setExtractFlags' => ['void', 'flags'=>'int'], 'SplPriorityQueue::setExtractFlags' => ['int', 'flags'=>'int'],
'SplPriorityQueue::top' => ['mixed'], 'SplPriorityQueue::top' => ['mixed'],
'SplPriorityQueue::valid' => ['bool'], 'SplPriorityQueue::valid' => ['bool'],
'SplQueue::__construct' => ['void'], 'SplQueue::__construct' => ['void'],
@@ -14400,6 +14430,7 @@ return [
'Spoofchecker::setRestrictionLevel' => ['void', 'level'=>'int'], 'Spoofchecker::setRestrictionLevel' => ['void', 'level'=>'int'],
'sprintf' => ['string', 'format'=>'string', '...values='=>'string|int|float|Stringable'], 'sprintf' => ['string', 'format'=>'string', '...values='=>'string|int|float|Stringable'],
'SQLite3::__construct' => ['void', 'filename'=>'string', 'flags='=>'int', 'encryptionKey='=>'?string'], 'SQLite3::__construct' => ['void', 'filename'=>'string', 'flags='=>'int', 'encryptionKey='=>'?string'],
'SQLite3::backup' => ['bool', 'destination'=>'SQLite3', 'sourceDatabase='=>'string', 'destinationDatabase='=>'string'],
'SQLite3::busyTimeout' => ['bool', 'milliseconds'=>'int'], 'SQLite3::busyTimeout' => ['bool', 'milliseconds'=>'int'],
'SQLite3::changes' => ['int'], 'SQLite3::changes' => ['int'],
'SQLite3::close' => ['bool'], 'SQLite3::close' => ['bool'],
@@ -14432,6 +14463,7 @@ return [
'SQLite3Stmt::clear' => ['bool'], 'SQLite3Stmt::clear' => ['bool'],
'SQLite3Stmt::close' => ['bool'], 'SQLite3Stmt::close' => ['bool'],
'SQLite3Stmt::execute' => ['SQLite3Result'], 'SQLite3Stmt::execute' => ['SQLite3Result'],
'SQLite3Stmt::getSQL' => ['string', 'expand='=>'bool'],
'SQLite3Stmt::paramCount' => ['int'], 'SQLite3Stmt::paramCount' => ['int'],
'SQLite3Stmt::readOnly' => ['bool'], 'SQLite3Stmt::readOnly' => ['bool'],
'SQLite3Stmt::reset' => ['bool'], 'SQLite3Stmt::reset' => ['bool'],
@@ -14728,6 +14760,8 @@ return [
'StompException::getTrace' => ['array'], 'StompException::getTrace' => ['array'],
'StompException::getTraceAsString' => ['string'], 'StompException::getTraceAsString' => ['string'],
'StompFrame::__construct' => ['void', 'command='=>'string', 'headers='=>'array', 'body='=>'string'], 'StompFrame::__construct' => ['void', 'command='=>'string', 'headers='=>'array', 'body='=>'string'],
'str_contains' => ['bool', 'haystack'=>'string', 'needle'=>'string'],
'str_ends_with' => ['bool', 'haystack'=>'string', 'needle'=>'string'],
'str_getcsv' => ['array<int,string|null>', 'string'=>'string', 'separator='=>'string', 'enclosure='=>'string', 'escape='=>'string'], 'str_getcsv' => ['array<int,string|null>', 'string'=>'string', 'separator='=>'string', 'enclosure='=>'string', 'escape='=>'string'],
'str_ireplace' => ['string|string[]', 'search'=>'string|array', 'replace'=>'string|array', 'subject'=>'string|array', '&w_count='=>'int'], 'str_ireplace' => ['string|string[]', 'search'=>'string|array', 'replace'=>'string|array', 'subject'=>'string|array', '&w_count='=>'int'],
'str_pad' => ['string', 'string'=>'string', 'length'=>'int', 'pad_string='=>'string', 'pad_type='=>'int'], 'str_pad' => ['string', 'string'=>'string', 'length'=>'int', 'pad_string='=>'string', 'pad_type='=>'int'],
@@ -14736,15 +14770,16 @@ return [
'str_rot13' => ['string', 'string'=>'string'], 'str_rot13' => ['string', 'string'=>'string'],
'str_shuffle' => ['string', 'string'=>'string'], 'str_shuffle' => ['string', 'string'=>'string'],
'str_split' => ['list<string>', 'string'=>'string', 'length='=>'int'], 'str_split' => ['list<string>', 'string'=>'string', 'length='=>'int'],
'str_starts_with' => ['bool', 'haystack'=>'string', 'needle'=>'string'],
'str_word_count' => ['array<int,string>|int', 'string'=>'string', 'format='=>'int', 'characters='=>'string'], 'str_word_count' => ['array<int,string>|int', 'string'=>'string', 'format='=>'int', 'characters='=>'string'],
'strcasecmp' => ['int', 'string1'=>'string', 'string2'=>'string'], 'strcasecmp' => ['int', 'string1'=>'string', 'string2'=>'string'],
'strchr' => ['string|false', 'haystack'=>'string', 'needle'=>'string|int', 'before_needle='=>'bool'], 'strchr' => ['string|false', 'haystack'=>'string', 'needle'=>'string', 'before_needle='=>'bool'],
'strcmp' => ['int', 'string1'=>'string', 'string2'=>'string'], 'strcmp' => ['int', 'string1'=>'string', 'string2'=>'string'],
'strcoll' => ['int', 'string1'=>'string', 'string2'=>'string'], 'strcoll' => ['int', 'string1'=>'string', 'string2'=>'string'],
'strcspn' => ['int', 'string'=>'string', 'characters'=>'string', 'offset='=>'int', 'length='=>'int'], 'strcspn' => ['int', 'string'=>'string', 'characters'=>'string', 'offset='=>'int', 'length='=>'int'],
'stream_bucket_append' => ['void', 'brigade'=>'resource', 'bucket'=>'object'], 'stream_bucket_append' => ['void', 'brigade'=>'resource', 'bucket'=>'object'],
'stream_bucket_make_writeable' => ['object', 'brigade'=>'resource'], 'stream_bucket_make_writeable' => ['object', 'brigade'=>'resource'],
'stream_bucket_new' => ['resource|false', 'stream'=>'resource', 'buffer'=>'string'], 'stream_bucket_new' => ['object', 'stream'=>'resource', 'buffer'=>'string'],
'stream_bucket_prepend' => ['void', 'brigade'=>'resource', 'bucket'=>'object'], 'stream_bucket_prepend' => ['void', 'brigade'=>'resource', 'bucket'=>'object'],
'stream_context_create' => ['resource', 'options='=>'array', 'params='=>'array'], 'stream_context_create' => ['resource', 'options='=>'array', 'params='=>'array'],
'stream_context_get_default' => ['resource', 'options='=>'array'], 'stream_context_get_default' => ['resource', 'options='=>'array'],
@@ -14773,7 +14808,7 @@ return [
'stream_resolve_include_path' => ['string|false', 'filename'=>'string'], 'stream_resolve_include_path' => ['string|false', 'filename'=>'string'],
'stream_select' => ['int|false', '&rw_read'=>'resource[]', '&rw_write'=>'?resource[]', '&rw_except'=>'?resource[]', 'seconds'=>'?int', 'microseconds='=>'int'], 'stream_select' => ['int|false', '&rw_read'=>'resource[]', '&rw_write'=>'?resource[]', '&rw_except'=>'?resource[]', 'seconds'=>'?int', 'microseconds='=>'int'],
'stream_set_blocking' => ['bool', 'stream'=>'resource', 'enable'=>'bool'], 'stream_set_blocking' => ['bool', 'stream'=>'resource', 'enable'=>'bool'],
'stream_set_chunk_size' => ['int|false', 'stream'=>'resource', 'size'=>'int'], 'stream_set_chunk_size' => ['int', 'stream'=>'resource', 'size'=>'int'],
'stream_set_read_buffer' => ['int', 'stream'=>'resource', 'size'=>'int'], 'stream_set_read_buffer' => ['int', 'stream'=>'resource', 'size'=>'int'],
'stream_set_timeout' => ['bool', 'stream'=>'resource', 'seconds'=>'int', 'microseconds='=>'int'], 'stream_set_timeout' => ['bool', 'stream'=>'resource', 'seconds'=>'int', 'microseconds='=>'int'],
'stream_set_write_buffer' => ['int', 'stream'=>'resource', 'size'=>'int'], 'stream_set_write_buffer' => ['int', 'stream'=>'resource', 'size'=>'int'],
@@ -14816,25 +14851,25 @@ return [
'streamWrapper::unlink' => ['bool', 'path'=>'string'], 'streamWrapper::unlink' => ['bool', 'path'=>'string'],
'streamWrapper::url_stat' => ['array', 'path'=>'string', 'flags'=>'int'], 'streamWrapper::url_stat' => ['array', 'path'=>'string', 'flags'=>'int'],
'strftime' => ['string', 'format'=>'string', 'timestamp='=>'int'], 'strftime' => ['string', 'format'=>'string', 'timestamp='=>'int'],
'strip_tags' => ['string', 'string'=>'string', 'allowed_tags='=>'string'], 'strip_tags' => ['string', 'string'=>'string', 'allowed_tags='=>'string|string[]'],
'stripcslashes' => ['string', 'string'=>'string'], 'stripcslashes' => ['string', 'string'=>'string'],
'stripos' => ['int|false', 'haystack'=>'string', 'needle'=>'string|int', 'offset='=>'int'], 'stripos' => ['int|false', 'haystack'=>'string', 'needle'=>'string', 'offset='=>'int'],
'stripslashes' => ['string', 'string'=>'string'], 'stripslashes' => ['string', 'string'=>'string'],
'stristr' => ['string|false', 'haystack'=>'string', 'needle'=>'string|int', 'before_needle='=>'bool'], 'stristr' => ['string|false', 'haystack'=>'string', 'needle'=>'string', 'before_needle='=>'bool'],
'strlen' => ['int', 'string'=>'string'], 'strlen' => ['int', 'string'=>'string'],
'strnatcasecmp' => ['int', 'string1'=>'string', 'string2'=>'string'], 'strnatcasecmp' => ['int', 'string1'=>'string', 'string2'=>'string'],
'strnatcmp' => ['int', 'string1'=>'string', 'string2'=>'string'], 'strnatcmp' => ['int', 'string1'=>'string', 'string2'=>'string'],
'strncasecmp' => ['int', 'string1'=>'string', 'string2'=>'string', 'length'=>'int'], 'strncasecmp' => ['int', 'string1'=>'string', 'string2'=>'string', 'length'=>'int'],
'strncmp' => ['int', 'string1'=>'string', 'string2'=>'string', 'length'=>'int'], 'strncmp' => ['int', 'string1'=>'string', 'string2'=>'string', 'length'=>'int'],
'strpbrk' => ['string|false', 'string'=>'string', 'characters'=>'string'], 'strpbrk' => ['string|false', 'string'=>'string', 'characters'=>'string'],
'strpos' => ['int|false', 'haystack'=>'string', 'needle'=>'string|int', 'offset='=>'int'], 'strpos' => ['int|false', 'haystack'=>'string', 'needle'=>'string', 'offset='=>'int'],
'strptime' => ['array<string,int|string>|false', 'timestamp'=>'string', 'format'=>'string'], 'strptime' => ['array<string,int|string>|false', 'timestamp'=>'string', 'format'=>'string'],
'strrchr' => ['string|false', 'haystack'=>'string', 'needle'=>'string|int'], 'strrchr' => ['string|false', 'haystack'=>'string', 'needle'=>'string'],
'strrev' => ['string', 'string'=>'string'], 'strrev' => ['string', 'string'=>'string'],
'strripos' => ['int|false', 'haystack'=>'string', 'needle'=>'string|int', 'offset='=>'int'], 'strripos' => ['int|false', 'haystack'=>'string', 'needle'=>'string', 'offset='=>'int'],
'strrpos' => ['int|false', 'haystack'=>'string', 'needle'=>'string|int', 'offset='=>'int'], 'strrpos' => ['int|false', 'haystack'=>'string', 'needle'=>'string', 'offset='=>'int'],
'strspn' => ['int', 'string'=>'string', 'characters'=>'string', 'offset='=>'int', 'length='=>'int'], 'strspn' => ['int', 'string'=>'string', 'characters'=>'string', 'offset='=>'int', 'length='=>'int'],
'strstr' => ['string|false', 'haystack'=>'string', 'needle'=>'string|int', 'before_needle='=>'bool'], 'strstr' => ['string|false', 'haystack'=>'string', 'needle'=>'string', 'before_needle='=>'bool'],
'strtok' => ['string|false', 'string'=>'string', 'token'=>'string'], 'strtok' => ['string|false', 'string'=>'string', 'token'=>'string'],
'strtok\'1' => ['string|false', 'string'=>'string'], 'strtok\'1' => ['string|false', 'string'=>'string'],
'strtolower' => ['string', 'string'=>'string'], 'strtolower' => ['string', 'string'=>'string'],
@@ -14854,8 +14889,8 @@ return [
'styleObj::setBinding' => ['int', 'stylebinding'=>'mixed', 'value'=>'string'], 'styleObj::setBinding' => ['int', 'stylebinding'=>'mixed', 'value'=>'string'],
'styleObj::setGeomTransform' => ['int', 'value'=>'string'], 'styleObj::setGeomTransform' => ['int', 'value'=>'string'],
'styleObj::updateFromString' => ['int', 'snippet'=>'string'], 'styleObj::updateFromString' => ['int', 'snippet'=>'string'],
'substr' => ['string|false', 'string'=>'string', 'offset'=>'int', 'length='=>'int'], 'substr' => ['string', 'string'=>'string', 'offset'=>'int', 'length='=>'int'],
'substr_compare' => ['int|false', 'haystack'=>'string', 'needle'=>'string', 'offset'=>'int', 'length='=>'int', 'case_insensitive='=>'bool'], 'substr_compare' => ['int', 'haystack'=>'string', 'needle'=>'string', 'offset'=>'int', 'length='=>'int', 'case_insensitive='=>'bool'],
'substr_count' => ['int', 'haystack'=>'string', 'needle'=>'string', 'offset='=>'int', 'length='=>'int'], 'substr_count' => ['int', 'haystack'=>'string', 'needle'=>'string', 'offset='=>'int', 'length='=>'int'],
'substr_replace' => ['string|string[]', 'string'=>'string|string[]', 'replace'=>'array|string', 'offset'=>'array|int', 'length='=>'?array|?int'], 'substr_replace' => ['string|string[]', 'string'=>'string|string[]', 'replace'=>'array|string', 'offset'=>'array|int', 'length='=>'?array|?int'],
'suhosin_encrypt_cookie' => ['string|false', 'name'=>'string', 'value'=>'string'], 'suhosin_encrypt_cookie' => ['string|false', 'name'=>'string', 'value'=>'string'],
@@ -15976,11 +16011,11 @@ return [
'time_nanosleep' => ['array{seconds:int,nanoseconds:int}|bool', 'seconds'=>'int', 'nanoseconds'=>'int'], 'time_nanosleep' => ['array{seconds:int,nanoseconds:int}|bool', 'seconds'=>'int', 'nanoseconds'=>'int'],
'time_sleep_until' => ['bool', 'timestamp'=>'float'], 'time_sleep_until' => ['bool', 'timestamp'=>'float'],
'timezone_abbreviations_list' => ['array<string,array>'], 'timezone_abbreviations_list' => ['array<string,array>'],
'timezone_identifiers_list' => ['list<string>|false', 'timezoneGroup='=>'int', 'countryCode='=>'?string'], 'timezone_identifiers_list' => ['list<string>', 'timezoneGroup='=>'int', 'countryCode='=>'?string'],
'timezone_location_get' => ['array<string,float|string>|false', 'object'=>'DateTimeZone'], 'timezone_location_get' => ['array<string,float|string>|false', 'object'=>'DateTimeZone'],
'timezone_name_from_abbr' => ['string|false', 'abbr'=>'string', 'utcOffset='=>'int', 'isDST='=>'int'], 'timezone_name_from_abbr' => ['string|false', 'abbr'=>'string', 'utcOffset='=>'int', 'isDST='=>'int'],
'timezone_name_get' => ['string', 'object'=>'DateTimeZone'], 'timezone_name_get' => ['string', 'object'=>'DateTimeZone'],
'timezone_offset_get' => ['int|false', 'object'=>'DateTimeZone', 'datetime'=>'DateTimeInterface'], 'timezone_offset_get' => ['int', 'object'=>'DateTimeZone', 'datetime'=>'DateTimeInterface'],
'timezone_open' => ['DateTimeZone|false', 'timezone'=>'string'], 'timezone_open' => ['DateTimeZone|false', 'timezone'=>'string'],
'timezone_transitions_get' => ['array|false', 'object'=>'DateTimeZone', 'timestampBegin='=>'int', 'timestampEnd='=>'int'], 'timezone_transitions_get' => ['array|false', 'object'=>'DateTimeZone', 'timestampBegin='=>'int', 'timestampEnd='=>'int'],
'timezone_version_get' => ['string'], 'timezone_version_get' => ['string'],
@@ -16764,7 +16799,7 @@ return [
'VarnishLog::getTagName' => ['string', 'index'=>'int'], 'VarnishLog::getTagName' => ['string', 'index'=>'int'],
'VarnishStat::__construct' => ['void', 'args='=>'array'], 'VarnishStat::__construct' => ['void', 'args='=>'array'],
'VarnishStat::getSnapshot' => ['array'], 'VarnishStat::getSnapshot' => ['array'],
'version_compare' => ['int|bool', 'version1'=>'string', 'version2'=>'string', 'operator='=>'\'\x3c\'|\'lt\'|\'\x3c=\'|\'le\'|\'\x3e\'|\'gt\'|\'\x3e=\'|\'ge\'|\'==\'|\'=\'|\'eq\'|\'!=\'|\'\x3c\x3e\'|\'ne\''], 'version_compare' => ['int|bool', 'version1'=>'string', 'version2'=>'string', 'operator='=>'?(\'\x3c\'|\'lt\'|\'\x3c=\'|\'le\'|\'\x3e\'|\'gt\'|\'\x3e=\'|\'ge\'|\'==\'|\'=\'|\'eq\'|\'!=\'|\'\x3c\x3e\'|\'ne\')'],
'vfprintf' => ['int', 'stream'=>'resource', 'format'=>'string', 'values'=>'array'], 'vfprintf' => ['int', 'stream'=>'resource', 'format'=>'string', 'values'=>'array'],
'vincenty' => ['', 'geoJsonPointFrom'=>'', 'geoJsonPointTo'=>'', 'reference_ellipsoid='=>'mixed'], 'vincenty' => ['', 'geoJsonPointFrom'=>'', 'geoJsonPointTo'=>'', 'reference_ellipsoid='=>'mixed'],
'virtual' => ['bool', 'uri'=>'string'], 'virtual' => ['bool', 'uri'=>'string'],
@@ -16865,6 +16900,8 @@ return [
'Weakref::get' => ['object'], 'Weakref::get' => ['object'],
'Weakref::release' => ['bool'], 'Weakref::release' => ['bool'],
'Weakref::valid' => ['bool'], 'Weakref::valid' => ['bool'],
'WeakReference::create' => ['WeakReference', 'object'=>'object'],
'WeakReference::get' => ['?object'],
'webObj::convertToString' => ['string'], 'webObj::convertToString' => ['string'],
'webObj::free' => ['void'], 'webObj::free' => ['void'],
'webObj::set' => ['int', 'property_name'=>'string', 'new_value'=>''], 'webObj::set' => ['int', 'property_name'=>'string', 'new_value'=>''],
@@ -17070,27 +17107,27 @@ return [
'xhprof_sample_disable' => ['array'], 'xhprof_sample_disable' => ['array'],
'xhprof_sample_enable' => ['void'], 'xhprof_sample_enable' => ['void'],
'xml_error_string' => ['string', 'error_code'=>'int'], 'xml_error_string' => ['string', 'error_code'=>'int'],
'xml_get_current_byte_index' => ['int|false', 'parser'=>'resource'], 'xml_get_current_byte_index' => ['int', 'parser'=>'XMLParser'],
'xml_get_current_column_number' => ['int|false', 'parser'=>'resource'], 'xml_get_current_column_number' => ['int', 'parser'=>'XMLParser'],
'xml_get_current_line_number' => ['int|false', 'parser'=>'resource'], 'xml_get_current_line_number' => ['int', 'parser'=>'XMLParser'],
'xml_get_error_code' => ['int|false', 'parser'=>'resource'], 'xml_get_error_code' => ['int', 'parser'=>'XMLParser'],
'xml_parse' => ['int', 'parser'=>'resource', 'data'=>'string', 'is_final='=>'bool'], 'xml_parse' => ['int', 'parser'=>'XMLParser', 'data'=>'string', 'is_final='=>'bool'],
'xml_parse_into_struct' => ['int', 'parser'=>'resource', 'data'=>'string', '&w_values'=>'array', '&w_index='=>'array'], 'xml_parse_into_struct' => ['int', 'parser'=>'XMLParser', 'data'=>'string', '&w_values'=>'array', '&w_index='=>'array'],
'xml_parser_create' => ['resource', 'encoding='=>'string'], 'xml_parser_create' => ['XMLParser', 'encoding='=>'string'],
'xml_parser_create_ns' => ['resource', 'encoding='=>'string', 'separator='=>'string'], 'xml_parser_create_ns' => ['XMLParser', 'encoding='=>'string', 'separator='=>'string'],
'xml_parser_free' => ['bool', 'parser'=>'resource'], 'xml_parser_free' => ['bool', 'parser'=>'XMLParser'],
'xml_parser_get_option' => ['mixed|false', 'parser'=>'resource', 'option'=>'int'], 'xml_parser_get_option' => ['int|string', 'parser'=>'XMLParser', 'option'=>'int'],
'xml_parser_set_option' => ['bool', 'parser'=>'resource', 'option'=>'int', 'value'=>'int|string'], 'xml_parser_set_option' => ['bool', 'parser'=>'XMLParser', 'option'=>'int', 'value'=>'int|string'],
'xml_set_character_data_handler' => ['bool', 'parser'=>'resource', 'handler'=>'callable'], 'xml_set_character_data_handler' => ['bool', 'parser'=>'XMLParser', 'handler'=>'callable'],
'xml_set_default_handler' => ['bool', 'parser'=>'resource', 'handler'=>'callable'], 'xml_set_default_handler' => ['bool', 'parser'=>'XMLParser', 'handler'=>'callable'],
'xml_set_element_handler' => ['bool', 'parser'=>'resource', 'start_handler'=>'callable', 'end_handler'=>'callable'], 'xml_set_element_handler' => ['bool', 'parser'=>'XMLParser', 'start_handler'=>'callable', 'end_handler'=>'callable'],
'xml_set_end_namespace_decl_handler' => ['bool', 'parser'=>'resource', 'handler'=>'callable'], 'xml_set_end_namespace_decl_handler' => ['bool', 'parser'=>'XMLParser', 'handler'=>'callable'],
'xml_set_external_entity_ref_handler' => ['bool', 'parser'=>'resource', 'handler'=>'callable'], 'xml_set_external_entity_ref_handler' => ['bool', 'parser'=>'XMLParser', 'handler'=>'callable'],
'xml_set_notation_decl_handler' => ['bool', 'parser'=>'resource', 'handler'=>'callable'], 'xml_set_notation_decl_handler' => ['bool', 'parser'=>'XMLParser', 'handler'=>'callable'],
'xml_set_object' => ['bool', 'parser'=>'resource', 'object'=>'object'], 'xml_set_object' => ['bool', 'parser'=>'XMLParser', 'object'=>'object'],
'xml_set_processing_instruction_handler' => ['bool', 'parser'=>'resource', 'handler'=>'callable'], 'xml_set_processing_instruction_handler' => ['bool', 'parser'=>'XMLParser', 'handler'=>'callable'],
'xml_set_start_namespace_decl_handler' => ['bool', 'parser'=>'resource', 'handler'=>'callable'], 'xml_set_start_namespace_decl_handler' => ['bool', 'parser'=>'XMLParser', 'handler'=>'callable'],
'xml_set_unparsed_entity_decl_handler' => ['bool', 'parser'=>'resource', 'handler'=>'callable'], 'xml_set_unparsed_entity_decl_handler' => ['bool', 'parser'=>'XMLParser', 'handler'=>'callable'],
'XMLDiff\Base::__construct' => ['void', 'nsname'=>'string'], 'XMLDiff\Base::__construct' => ['void', 'nsname'=>'string'],
'XMLDiff\Base::diff' => ['mixed', 'from'=>'mixed', 'to'=>'mixed'], 'XMLDiff\Base::diff' => ['mixed', 'from'=>'mixed', 'to'=>'mixed'],
'XMLDiff\Base::merge' => ['mixed', 'src'=>'mixed', 'diff'=>'mixed'], 'XMLDiff\Base::merge' => ['mixed', 'src'=>'mixed', 'diff'=>'mixed'],
@@ -17149,15 +17186,15 @@ return [
'XMLWriter::endDTDEntity' => ['bool'], 'XMLWriter::endDTDEntity' => ['bool'],
'XMLWriter::endElement' => ['bool'], 'XMLWriter::endElement' => ['bool'],
'XMLWriter::endPI' => ['bool'], 'XMLWriter::endPI' => ['bool'],
'XMLWriter::flush' => ['', 'empty='=>'bool'], 'XMLWriter::flush' => ['string|int', 'empty='=>'bool'],
'XMLWriter::fullEndElement' => ['bool'], 'XMLWriter::fullEndElement' => ['bool'],
'XMLWriter::openMemory' => ['bool'], 'XMLWriter::openMemory' => ['bool'],
'XMLWriter::openURI' => ['resource', 'uri'=>'string'], 'XMLWriter::openURI' => ['bool', 'uri'=>'string'],
'XMLWriter::outputMemory' => ['string', 'flush='=>'bool'], 'XMLWriter::outputMemory' => ['string', 'flush='=>'bool'],
'XMLWriter::setIndent' => ['bool', 'enable'=>'bool'], 'XMLWriter::setIndent' => ['bool', 'enable'=>'bool'],
'XMLWriter::setIndentString' => ['bool', 'indentation'=>'string'], 'XMLWriter::setIndentString' => ['bool', 'indentation'=>'string'],
'XMLWriter::startAttribute' => ['bool', 'name'=>'string'], 'XMLWriter::startAttribute' => ['bool', 'name'=>'string'],
'XMLWriter::startAttributeNS' => ['bool', 'prefix'=>'string', 'name'=>'string', 'namespace'=>'string'], 'XMLWriter::startAttributeNs' => ['bool', 'prefix'=>'?string', 'name'=>'string', 'namespace'=>'?string'],
'XMLWriter::startCData' => ['bool'], 'XMLWriter::startCData' => ['bool'],
'XMLWriter::startComment' => ['bool'], 'XMLWriter::startComment' => ['bool'],
'XMLWriter::startDocument' => ['bool', 'version='=>'string', 'encoding='=>'string', 'standalone='=>'string'], 'XMLWriter::startDocument' => ['bool', 'version='=>'string', 'encoding='=>'string', 'standalone='=>'string'],
@@ -17170,59 +17207,61 @@ return [
'XMLWriter::startPI' => ['bool', 'target'=>'string'], 'XMLWriter::startPI' => ['bool', 'target'=>'string'],
'XMLWriter::text' => ['bool', 'content'=>'string'], 'XMLWriter::text' => ['bool', 'content'=>'string'],
'XMLWriter::writeAttribute' => ['bool', 'name'=>'string', 'value'=>'string'], 'XMLWriter::writeAttribute' => ['bool', 'name'=>'string', 'value'=>'string'],
'XMLWriter::writeAttributeNS' => ['bool', 'prefix'=>'string', 'name'=>'string', 'namespace'=>'string', 'value'=>'string'], 'XMLWriter::writeAttributeNS' => ['bool', 'prefix'=>'string', 'name'=>'string', 'namespace'=>'?string', 'value'=>'string'],
'XMLWriter::writeAttributeNs' => ['bool', 'prefix'=>'?string', 'name'=>'string', 'namespace'=>'?string', 'value'=>'string'],
'XMLWriter::writeCData' => ['bool', 'content'=>'string'], 'XMLWriter::writeCData' => ['bool', 'content'=>'string'],
'XMLWriter::writeComment' => ['bool', 'content'=>'string'], 'XMLWriter::writeComment' => ['bool', 'content'=>'string'],
'XMLWriter::writeDTD' => ['bool', 'name'=>'string', 'publicId='=>'string', 'systemId='=>'string', 'content='=>'string'], 'XMLWriter::writeDTD' => ['bool', 'name'=>'string', 'publicId='=>'string', 'systemId='=>'string', 'content='=>'string'],
'XMLWriter::writeDTDAttlist' => ['bool', 'name'=>'string', 'content'=>'string'], 'XMLWriter::writeDTDAttlist' => ['bool', 'name'=>'string', 'content'=>'string'],
'XMLWriter::writeDTDElement' => ['bool', 'name'=>'string', 'content'=>'string'], 'XMLWriter::writeDTDElement' => ['bool', 'name'=>'string', 'content'=>'string'],
'XMLWriter::writeDTDEntity' => ['bool', 'name'=>'string', 'content'=>'string', 'isParam'=>'bool', 'publicId'=>'string', 'systemId'=>'string', 'notationData'=>'string'], 'XMLWriter::writeDTDEntity' => ['bool', 'name'=>'string', 'content'=>'string', 'isParam'=>'bool', 'publicId'=>'string', 'systemId'=>'string', 'notationData'=>'string'],
'XMLWriter::writeDtdEntity' => ['bool', 'name'=>'string', 'content'=>'string', 'isParam='=>'bool', 'publicId='=>'?string', 'systemId='=>'?string', 'notationData='=>'?string'],
'XMLWriter::writeElement' => ['bool', 'name'=>'string', 'content='=>'?string'], 'XMLWriter::writeElement' => ['bool', 'name'=>'string', 'content='=>'?string'],
'XMLWriter::writeElementNS' => ['bool', 'prefix'=>'string', 'name'=>'string', 'namespace'=>'string', 'content='=>'?string'], 'XMLWriter::writeElementNS' => ['bool', 'prefix'=>'string', 'name'=>'string', 'namespace'=>'string', 'content='=>'?string'],
'XMLWriter::writePI' => ['bool', 'target'=>'string', 'content'=>'string'], 'XMLWriter::writePI' => ['bool', 'target'=>'string', 'content'=>'string'],
'XMLWriter::writeRaw' => ['bool', 'content'=>'string'], 'XMLWriter::writeRaw' => ['bool', 'content'=>'string'],
'xmlwriter_end_attribute' => ['bool', 'writer'=>'resource'], 'xmlwriter_end_attribute' => ['bool', 'writer'=>'XMLWriter'],
'xmlwriter_end_cdata' => ['bool', 'writer'=>'resource'], 'xmlwriter_end_cdata' => ['bool', 'writer'=>'XMLWriter'],
'xmlwriter_end_comment' => ['bool', 'writer'=>'resource'], 'xmlwriter_end_comment' => ['bool', 'writer'=>'XMLWriter'],
'xmlwriter_end_document' => ['bool', 'writer'=>'resource'], 'xmlwriter_end_document' => ['bool', 'writer'=>'XMLWriter'],
'xmlwriter_end_dtd' => ['bool', 'writer'=>'resource'], 'xmlwriter_end_dtd' => ['bool', 'writer'=>'XMLWriter'],
'xmlwriter_end_dtd_attlist' => ['bool', 'writer'=>'resource'], 'xmlwriter_end_dtd_attlist' => ['bool', 'writer'=>'XMLWriter'],
'xmlwriter_end_dtd_element' => ['bool', 'writer'=>'resource'], 'xmlwriter_end_dtd_element' => ['bool', 'writer'=>'XMLWriter'],
'xmlwriter_end_dtd_entity' => ['bool', 'writer'=>'resource'], 'xmlwriter_end_dtd_entity' => ['bool', 'writer'=>'XMLWriter'],
'xmlwriter_end_element' => ['bool', 'writer'=>'resource'], 'xmlwriter_end_element' => ['bool', 'writer'=>'XMLWriter'],
'xmlwriter_end_pi' => ['bool', 'writer'=>'resource'], 'xmlwriter_end_pi' => ['bool', 'writer'=>'XMLWriter'],
'xmlwriter_flush' => ['int|string', 'writer'=>'resource', 'empty='=>'bool'], 'xmlwriter_flush' => ['int|string', 'writer'=>'XMLWriter', 'empty='=>'bool'],
'xmlwriter_full_end_element' => ['bool', 'writer'=>'resource'], 'xmlwriter_full_end_element' => ['bool', 'writer'=>'XMLWriter'],
'xmlwriter_open_memory' => ['resource'], 'xmlwriter_open_memory' => ['XMLWriter'],
'xmlwriter_open_uri' => ['resource', 'uri'=>'string'], 'xmlwriter_open_uri' => ['XMLWriter', 'uri'=>'string'],
'xmlwriter_output_memory' => ['string', 'writer'=>'resource', 'flush='=>'bool'], 'xmlwriter_output_memory' => ['string', 'writer'=>'XMLWriter', 'flush='=>'bool'],
'xmlwriter_set_indent' => ['bool', 'writer'=>'resource', 'enable'=>'bool'], 'xmlwriter_set_indent' => ['bool', 'writer'=>'XMLWriter', 'enable'=>'bool'],
'xmlwriter_set_indent_string' => ['bool', 'writer'=>'resource', 'indentation'=>'string'], 'xmlwriter_set_indent_string' => ['bool', 'writer'=>'XMLWriter', 'indentation'=>'string'],
'xmlwriter_start_attribute' => ['bool', 'writer'=>'resource', 'name'=>'string'], 'xmlwriter_start_attribute' => ['bool', 'writer'=>'XMLWriter', 'name'=>'string'],
'xmlwriter_start_attribute_ns' => ['bool', 'writer'=>'resource', 'prefix'=>'string', 'name'=>'string', 'namespace'=>'string'], 'xmlwriter_start_attribute_ns' => ['bool', 'writer'=>'XMLWriter', 'prefix'=>'string', 'name'=>'string', 'namespace'=>'string'],
'xmlwriter_start_cdata' => ['bool', 'writer'=>'resource'], 'xmlwriter_start_cdata' => ['bool', 'writer'=>'XMLWriter'],
'xmlwriter_start_comment' => ['bool', 'writer'=>'resource'], 'xmlwriter_start_comment' => ['bool', 'writer'=>'XMLWriter'],
'xmlwriter_start_document' => ['bool', 'writer'=>'resource', 'version='=>'string', 'encoding='=>'string', 'standalone='=>'string'], 'xmlwriter_start_document' => ['bool', 'writer'=>'XMLWriter', 'version='=>'string', 'encoding='=>'string', 'standalone='=>'string'],
'xmlwriter_start_dtd' => ['bool', 'writer'=>'resource', 'qualifiedName'=>'string', 'publicId='=>'string', 'systemId='=>'string'], 'xmlwriter_start_dtd' => ['bool', 'writer'=>'XMLWriter', 'qualifiedName'=>'string', 'publicId='=>'string', 'systemId='=>'string'],
'xmlwriter_start_dtd_attlist' => ['bool', 'writer'=>'resource', 'name'=>'string'], 'xmlwriter_start_dtd_attlist' => ['bool', 'writer'=>'XMLWriter', 'name'=>'string'],
'xmlwriter_start_dtd_element' => ['bool', 'writer'=>'resource', 'qualifiedName'=>'string'], 'xmlwriter_start_dtd_element' => ['bool', 'writer'=>'XMLWriter', 'qualifiedName'=>'string'],
'xmlwriter_start_dtd_entity' => ['bool', 'writer'=>'resource', 'name'=>'string', 'isParam'=>'bool'], 'xmlwriter_start_dtd_entity' => ['bool', 'writer'=>'XMLWriter', 'name'=>'string', 'isParam'=>'bool'],
'xmlwriter_start_element' => ['bool', 'writer'=>'resource', 'name'=>'string'], 'xmlwriter_start_element' => ['bool', 'writer'=>'XMLWriter', 'name'=>'string'],
'xmlwriter_start_element_ns' => ['bool', 'writer'=>'resource', 'prefix'=>'string', 'name'=>'string', 'namespace'=>'string'], 'xmlwriter_start_element_ns' => ['bool', 'writer'=>'XMLWriter', 'prefix'=>'string', 'name'=>'string', 'namespace'=>'string'],
'xmlwriter_start_pi' => ['bool', 'writer'=>'resource', 'target'=>'string'], 'xmlwriter_start_pi' => ['bool', 'writer'=>'XMLWriter', 'target'=>'string'],
'xmlwriter_text' => ['bool', 'writer'=>'resource', 'content'=>'string'], 'xmlwriter_text' => ['bool', 'writer'=>'XMLWriter', 'content'=>'string'],
'xmlwriter_write_attribute' => ['bool', 'writer'=>'resource', 'name'=>'string', 'value'=>'string'], 'xmlwriter_write_attribute' => ['bool', 'writer'=>'XMLWriter', 'name'=>'string', 'value'=>'string'],
'xmlwriter_write_attribute_ns' => ['bool', 'writer'=>'resource', 'prefix'=>'string', 'name'=>'string', 'namespace'=>'string', 'value'=>'string'], 'xmlwriter_write_attribute_ns' => ['bool', 'writer'=>'XMLWriter', 'prefix'=>'string', 'name'=>'string', 'namespace'=>'string', 'value'=>'string'],
'xmlwriter_write_cdata' => ['bool', 'writer'=>'resource', 'content'=>'string'], 'xmlwriter_write_cdata' => ['bool', 'writer'=>'XMLWriter', 'content'=>'string'],
'xmlwriter_write_comment' => ['bool', 'writer'=>'resource', 'content'=>'string'], 'xmlwriter_write_comment' => ['bool', 'writer'=>'XMLWriter', 'content'=>'string'],
'xmlwriter_write_dtd' => ['bool', 'writer'=>'resource', 'name'=>'string', 'publicId='=>'string', 'systemId='=>'string', 'content='=>'string'], 'xmlwriter_write_dtd' => ['bool', 'writer'=>'XMLWriter', 'name'=>'string', 'publicId='=>'string', 'systemId='=>'string', 'content='=>'string'],
'xmlwriter_write_dtd_attlist' => ['bool', 'writer'=>'resource', 'name'=>'string', 'content'=>'string'], 'xmlwriter_write_dtd_attlist' => ['bool', 'writer'=>'XMLWriter', 'name'=>'string', 'content'=>'string'],
'xmlwriter_write_dtd_element' => ['bool', 'writer'=>'resource', 'name'=>'string', 'content'=>'string'], 'xmlwriter_write_dtd_element' => ['bool', 'writer'=>'XMLWriter', 'name'=>'string', 'content'=>'string'],
'xmlwriter_write_dtd_entity' => ['bool', 'writer'=>'resource', 'name'=>'string', 'content'=>'string', 'isParam='=>'bool', 'publicId='=>'string', 'systemId='=>'string', 'notationData='=>'string'], 'xmlwriter_write_dtd_entity' => ['bool', 'writer'=>'XMLWriter', 'name'=>'string', 'content'=>'string', 'isParam='=>'bool', 'publicId='=>'string', 'systemId='=>'string', 'notationData='=>'string'],
'xmlwriter_write_element' => ['bool', 'writer'=>'resource', 'name'=>'string', 'content='=>'string'], 'xmlwriter_write_element' => ['bool', 'writer'=>'XMLWriter', 'name'=>'string', 'content='=>'string'],
'xmlwriter_write_element_ns' => ['bool', 'writer'=>'resource', 'prefix'=>'string', 'name'=>'string', 'namespace'=>'string', 'content='=>'string'], 'xmlwriter_write_element_ns' => ['bool', 'writer'=>'XMLWriter', 'prefix'=>'string', 'name'=>'string', 'namespace'=>'string', 'content='=>'string'],
'xmlwriter_write_pi' => ['bool', 'writer'=>'resource', 'target'=>'string', 'content'=>'string'], 'xmlwriter_write_pi' => ['bool', 'writer'=>'XMLWriter', 'target'=>'string', 'content'=>'string'],
'xmlwriter_write_raw' => ['bool', 'writer'=>'resource', 'content'=>'string'], 'xmlwriter_write_raw' => ['bool', 'writer'=>'XMLWriter', 'content'=>'string'],
'xpath_new_context' => ['XPathContext', 'dom_document'=>'DOMDocument'], 'xpath_new_context' => ['XPathContext', 'dom_document'=>'DOMDocument'],
'xpath_register_ns' => ['bool', 'xpath_context'=>'xpathcontext', 'prefix'=>'string', 'uri'=>'string'], 'xpath_register_ns' => ['bool', 'xpath_context'=>'xpathcontext', 'prefix'=>'string', 'uri'=>'string'],
'xpath_register_ns_auto' => ['bool', 'xpath_context'=>'xpathcontext', 'context_node='=>'object'], 'xpath_register_ns_auto' => ['bool', 'xpath_context'=>'xpathcontext', 'context_node='=>'object'],
@@ -17259,14 +17298,14 @@ return [
'XSLTProcessor::getParameter' => ['string|false', 'namespace'=>'string', 'name'=>'string'], 'XSLTProcessor::getParameter' => ['string|false', 'namespace'=>'string', 'name'=>'string'],
'XsltProcessor::getSecurityPrefs' => ['int'], 'XsltProcessor::getSecurityPrefs' => ['int'],
'XSLTProcessor::hasExsltSupport' => ['bool'], 'XSLTProcessor::hasExsltSupport' => ['bool'],
'XSLTProcessor::importStylesheet' => ['bool', 'stylesheet'=>'object'], 'XSLTProcessor::importStylesheet' => ['bool', 'stylesheet'=>'DOMDocument|SimpleXMLElement'],
'XSLTProcessor::registerPHPFunctions' => ['void', 'functions='=>'mixed'], 'XSLTProcessor::registerPHPFunctions' => ['void', 'functions='=>'?array|?string'],
'XSLTProcessor::removeParameter' => ['bool', 'namespace'=>'string', 'name'=>'string'], 'XSLTProcessor::removeParameter' => ['bool', 'namespace'=>'string', 'name'=>'string'],
'XSLTProcessor::setParameter' => ['bool', 'namespace'=>'string', 'name'=>'string', 'value'=>'string'], 'XSLTProcessor::setParameter' => ['bool', 'namespace'=>'string', 'name'=>'string', 'value'=>'string'],
'XSLTProcessor::setParameter\'1' => ['bool', 'namespace'=>'string', 'options'=>'array'], 'XSLTProcessor::setParameter\'1' => ['bool', 'namespace'=>'string', 'options'=>'array'],
'XSLTProcessor::setProfiling' => ['bool', 'filename'=>'string'], 'XSLTProcessor::setProfiling' => ['bool', 'filename'=>'string'],
'XsltProcessor::setSecurityPrefs' => ['int', 'preferences'=>'int'], 'XSLTProcessor::setSecurityPrefs' => ['int', 'preferences'=>'int'],
'XSLTProcessor::transformToDoc' => ['DOMDocument|false', 'document'=>'DOMNode'], 'XSLTProcessor::transformToDoc' => ['DOMDocument|false', 'document'=>'DOMDocument|SimpleXMLElement'],
'XSLTProcessor::transformToURI' => ['int', 'document'=>'DOMDocument', 'uri'=>'string'], 'XSLTProcessor::transformToURI' => ['int', 'document'=>'DOMDocument', 'uri'=>'string'],
'XSLTProcessor::transformToXML' => ['string', 'document'=>'DOMDocument'], 'XSLTProcessor::transformToXML' => ['string', 'document'=>'DOMDocument'],
'yac::__construct' => ['void', 'prefix='=>'string'], 'yac::__construct' => ['void', 'prefix='=>'string'],
@@ -18200,7 +18239,7 @@ return [
'ZendAPI_Queue::updateJob' => ['int', '&job'=>'Job'], 'ZendAPI_Queue::updateJob' => ['int', '&job'=>'Job'],
'ZendAPI_Queue::zendapi_queue' => ['ZendAPI_Queue', 'queue_url'=>'string'], 'ZendAPI_Queue::zendapi_queue' => ['ZendAPI_Queue', 'queue_url'=>'string'],
'zip_close' => ['void', 'zip'=>'resource'], 'zip_close' => ['void', 'zip'=>'resource'],
'zip_entry_close' => ['bool', 'zip_ent'=>'resource'], 'zip_entry_close' => ['bool', 'zip_entry'=>'resource'],
'zip_entry_compressedsize' => ['int', 'zip_entry'=>'resource'], 'zip_entry_compressedsize' => ['int', 'zip_entry'=>'resource'],
'zip_entry_compressionmethod' => ['string', 'zip_entry'=>'resource'], 'zip_entry_compressionmethod' => ['string', 'zip_entry'=>'resource'],
'zip_entry_filesize' => ['int', 'zip_entry'=>'resource'], 'zip_entry_filesize' => ['int', 'zip_entry'=>'resource'],
@@ -18212,8 +18251,8 @@ return [
'ZipArchive::addEmptyDir' => ['bool', 'dirname'=>'string'], 'ZipArchive::addEmptyDir' => ['bool', 'dirname'=>'string'],
'ZipArchive::addFile' => ['bool', 'filepath'=>'string', 'entryname='=>'string', 'start='=>'int', 'length='=>'int'], 'ZipArchive::addFile' => ['bool', 'filepath'=>'string', 'entryname='=>'string', 'start='=>'int', 'length='=>'int'],
'ZipArchive::addFromString' => ['bool', 'name'=>'string', 'content'=>'string'], 'ZipArchive::addFromString' => ['bool', 'name'=>'string', 'content'=>'string'],
'ZipArchive::addGlob' => ['bool', 'pattern'=>'string', 'flags='=>'int', 'options='=>'array'], 'ZipArchive::addGlob' => ['array|false', 'pattern'=>'string', 'flags='=>'int', 'options='=>'array'],
'ZipArchive::addPattern' => ['bool', 'pattern'=>'string', 'path='=>'string', 'options='=>'array'], 'ZipArchive::addPattern' => ['array|false', 'pattern'=>'string', 'path='=>'string', 'options='=>'array'],
'ZipArchive::close' => ['bool'], 'ZipArchive::close' => ['bool'],
'ZipArchive::count' => ['int'], 'ZipArchive::count' => ['int'],
'ZipArchive::createEmptyDir' => ['bool', 'dirname'=>'string'], 'ZipArchive::createEmptyDir' => ['bool', 'dirname'=>'string'],
@@ -18233,18 +18272,18 @@ return [
'ZipArchive::isCompressionMethodSupported' => ['bool', 'method'=>'int', 'enc='=>'bool'], 'ZipArchive::isCompressionMethodSupported' => ['bool', 'method'=>'int', 'enc='=>'bool'],
'ZipArchive::isEncryptionMethodSupported' => ['bool', 'method'=>'int', 'enc='=>'bool'], 'ZipArchive::isEncryptionMethodSupported' => ['bool', 'method'=>'int', 'enc='=>'bool'],
'ZipArchive::locateName' => ['int|false', 'name'=>'string', 'flags='=>'int'], 'ZipArchive::locateName' => ['int|false', 'name'=>'string', 'flags='=>'int'],
'ZipArchive::open' => ['mixed', 'filename'=>'string', 'flags='=>'int'], 'ZipArchive::open' => ['bool|int', 'filename'=>'string', 'flags='=>'int'],
'ZipArchive::registerCancelCallback' => ['bool', 'callback'=>'callable'], 'ZipArchive::registerCancelCallback' => ['bool', 'callback'=>'callable'],
'ZipArchive::registerProgressCallback' => ['bool', 'rate'=>'float', 'callback'=>'callable'], 'ZipArchive::registerProgressCallback' => ['bool', 'rate'=>'float', 'callback'=>'callable'],
'ZipArchive::renameIndex' => ['bool', 'index'=>'int', 'new_name'=>'string'], 'ZipArchive::renameIndex' => ['bool', 'index'=>'int', 'new_name'=>'string'],
'ZipArchive::renameName' => ['bool', 'name'=>'string', 'new_name'=>'string'], 'ZipArchive::renameName' => ['bool', 'name'=>'string', 'new_name'=>'string'],
'ZipArchive::replaceFile' => ['bool', 'filepath'=>'string', 'index'=>'int', 'start='=>'int', 'length='=>'int', 'flags='=>'int'], 'ZipArchive::replaceFile' => ['bool', 'filepath'=>'string', 'index'=>'string', 'start='=>'int', 'length='=>'int', 'flags='=>'int'],
'ZipArchive::setArchiveComment' => ['bool', 'comment'=>'string'], 'ZipArchive::setArchiveComment' => ['bool', 'comment'=>'string'],
'ZipArchive::setCommentIndex' => ['bool', 'index'=>'int', 'comment'=>'string'], 'ZipArchive::setCommentIndex' => ['bool', 'index'=>'int', 'comment'=>'string'],
'ZipArchive::setCommentName' => ['bool', 'name'=>'string', 'comment'=>'string'], 'ZipArchive::setCommentName' => ['bool', 'name'=>'string', 'comment'=>'string'],
'ZipArchive::setCompressionIndex' => ['bool', 'index'=>'int', 'method'=>'int', 'compflags='=>'int'], 'ZipArchive::setCompressionIndex' => ['bool', 'index'=>'int', 'method'=>'int', 'compflags='=>'int'],
'ZipArchive::setCompressionName' => ['bool', 'name'=>'string', 'method'=>'int', 'compflags='=>'int'], 'ZipArchive::setCompressionName' => ['bool', 'name'=>'string', 'method'=>'int', 'compflags='=>'int'],
'ZipArchive::setEncryptionIndex' => ['bool', 'index'=>'int', 'method'=>'string', 'password='=>'string'], 'ZipArchive::setEncryptionIndex' => ['bool', 'index'=>'int', 'method'=>'int', 'password='=>'string'],
'ZipArchive::setEncryptionName' => ['bool', 'name'=>'string', 'method'=>'int', 'password='=>'string'], 'ZipArchive::setEncryptionName' => ['bool', 'name'=>'string', 'method'=>'int', 'password='=>'string'],
'ZipArchive::setExternalAttributesIndex' => ['bool', 'index'=>'int', 'opsys'=>'int', 'attr'=>'int', 'flags='=>'int'], 'ZipArchive::setExternalAttributesIndex' => ['bool', 'index'=>'int', 'opsys'=>'int', 'attr'=>'int', 'flags='=>'int'],
'ZipArchive::setExternalAttributesName' => ['bool', 'name'=>'string', 'opsys'=>'int', 'attr'=>'int', 'flags='=>'int'], 'ZipArchive::setExternalAttributesName' => ['bool', 'name'=>'string', 'opsys'=>'int', 'attr'=>'int', 'flags='=>'int'],
@@ -298,7 +298,7 @@ return [
'get_defined_constants' => '?array<string,?array>|?array<string,?bool>|?array<string,?float>|?array<string,?int>|?array<string,?resource>|?array<string,?string>', 'get_defined_constants' => '?array<string,?array>|?array<string,?bool>|?array<string,?float>|?array<string,?int>|?array<string,?resource>|?array<string,?string>',
'get_defined_functions' => '?array<string,array>', 'get_defined_functions' => '?array<string,array>',
'get_extension_funcs' => '?list<string>|?false', 'get_extension_funcs' => '?list<string>|?false',
'get_headers' => '?list<array>|?list<string>|?false', 'get_headers' => '?array<int|string,array>|?array<int|string,string>|?false',
'get_html_translation_table' => '?array<string,string>', 'get_html_translation_table' => '?array<string,string>',
'get_loaded_extensions' => '?list<string>', 'get_loaded_extensions' => '?list<string>',
'get_mangled_object_vars' => '?array', 'get_mangled_object_vars' => '?array',
@@ -16,194 +16,200 @@
* TODO: Add some way to warn about functions such as intdiv or IntlChar if they aren't in the configured target_php_version * TODO: Add some way to warn about functions such as intdiv or IntlChar if they aren't in the configured target_php_version
*/ */
return [ return [
'new' => [ 'added' => [
'Closure::call' => ['', 'newThis'=>'object', '...args='=>''], 'Closure::call' => ['', 'newThis'=>'object', '...args='=>''],
'intdiv' => ['int', 'num1'=>'int', 'num2'=>'int'], 'intdiv' => ['int', 'num1'=>'int', 'num2'=>'int'],
'IntlChar::charAge' => ['array', 'codepoint'=>'int|string'], 'IntlChar::charAge' => ['array', 'codepoint'=>'int|string'],
'IntlChar::charDigitValue' => ['int', 'codepoint'=>'mixed'], 'IntlChar::charDigitValue' => ['int', 'codepoint'=>'mixed'],
'IntlChar::charDirection' => ['int', 'codepoint'=>'mixed'], 'IntlChar::charDirection' => ['int', 'codepoint'=>'mixed'],
'IntlChar::charFromName' => ['?int', 'name'=>'string', 'type='=>'int'], 'IntlChar::charFromName' => ['?int', 'name'=>'string', 'type='=>'int'],
'IntlChar::charMirror' => ['mixed', 'codepoint'=>'mixed'], 'IntlChar::charMirror' => ['mixed', 'codepoint'=>'mixed'],
'IntlChar::charName' => ['string', 'codepoint'=>'int|string', 'type='=>'int'], 'IntlChar::charName' => ['string', 'codepoint'=>'int|string', 'type='=>'int'],
'IntlChar::charType' => ['int', 'codepoint'=>'mixed'], 'IntlChar::charType' => ['int', 'codepoint'=>'mixed'],
'IntlChar::chr' => ['string', 'codepoint'=>'mixed'], 'IntlChar::chr' => ['string', 'codepoint'=>'mixed'],
'IntlChar::digit' => ['int|false', 'codepoint'=>'int|string', 'base='=>'int'], 'IntlChar::digit' => ['int|false', 'codepoint'=>'int|string', 'base='=>'int'],
'IntlChar::enumCharNames' => ['void', 'start'=>'mixed', 'end'=>'mixed', 'callback'=>'callable', 'type='=>'int'], 'IntlChar::enumCharNames' => ['void', 'start'=>'mixed', 'end'=>'mixed', 'callback'=>'callable', 'type='=>'int'],
'IntlChar::enumCharTypes' => ['void', 'callback='=>'callable'], 'IntlChar::enumCharTypes' => ['void', 'callback='=>'callable'],
'IntlChar::foldCase' => ['int|string', 'codepoint'=>'int|string', 'options='=>'int'], 'IntlChar::foldCase' => ['int|string', 'codepoint'=>'int|string', 'options='=>'int'],
'IntlChar::forDigit' => ['int', 'digit'=>'int', 'base'=>'int'], 'IntlChar::forDigit' => ['int', 'digit'=>'int', 'base'=>'int'],
'IntlChar::getBidiPairedBracket' => ['mixed', 'codepoint'=>'mixed'], 'IntlChar::getBidiPairedBracket' => ['mixed', 'codepoint'=>'mixed'],
'IntlChar::getBlockCode' => ['int', 'codepoint'=>'int|string'], 'IntlChar::getBlockCode' => ['int', 'codepoint'=>'int|string'],
'IntlChar::getCombiningClass' => ['int', 'codepoint'=>'mixed'], 'IntlChar::getCombiningClass' => ['int', 'codepoint'=>'mixed'],
'IntlChar::getFC_NFKC_Closure' => ['string', 'codepoint'=>'int|string'], 'IntlChar::getFC_NFKC_Closure' => ['string', 'codepoint'=>'int|string'],
'IntlChar::getIntPropertyMaxValue' => ['int', 'property'=>'int'], 'IntlChar::getIntPropertyMaxValue' => ['int', 'property'=>'int'],
'IntlChar::getIntPropertyMinValue' => ['int', 'property'=>'int'], 'IntlChar::getIntPropertyMinValue' => ['int', 'property'=>'int'],
'IntlChar::getIntPropertyMxValue' => ['int', 'property'=>'int'], 'IntlChar::getIntPropertyMxValue' => ['int', 'property'=>'int'],
'IntlChar::getIntPropertyValue' => ['int', 'codepoint'=>'int|string', 'property'=>'int'], 'IntlChar::getIntPropertyValue' => ['int', 'codepoint'=>'int|string', 'property'=>'int'],
'IntlChar::getNumericValue' => ['float', 'codepoint'=>'int|string'], 'IntlChar::getNumericValue' => ['float', 'codepoint'=>'int|string'],
'IntlChar::getPropertyEnum' => ['int', 'alias'=>'string'], 'IntlChar::getPropertyEnum' => ['int', 'alias'=>'string'],
'IntlChar::getPropertyName' => ['string|false', 'property'=>'int', 'type='=>'int'], 'IntlChar::getPropertyName' => ['string|false', 'property'=>'int', 'type='=>'int'],
'IntlChar::getPropertyValueEnum' => ['int', 'property'=>'int', 'name'=>'string'], 'IntlChar::getPropertyValueEnum' => ['int', 'property'=>'int', 'name'=>'string'],
'IntlChar::getPropertyValueName' => ['string|false', 'property'=>'int', 'value'=>'int', 'type='=>'int'], 'IntlChar::getPropertyValueName' => ['string|false', 'property'=>'int', 'value'=>'int', 'type='=>'int'],
'IntlChar::getUnicodeVersion' => ['array'], 'IntlChar::getUnicodeVersion' => ['array'],
'IntlChar::hasBinaryProperty' => ['bool', 'codepoint'=>'int|string', 'property'=>'int'], 'IntlChar::hasBinaryProperty' => ['bool', 'codepoint'=>'int|string', 'property'=>'int'],
'IntlChar::isalnum' => ['bool', 'codepoint'=>'mixed'], 'IntlChar::isalnum' => ['bool', 'codepoint'=>'mixed'],
'IntlChar::isalpha' => ['bool', 'codepoint'=>'mixed'], 'IntlChar::isalpha' => ['bool', 'codepoint'=>'mixed'],
'IntlChar::isbase' => ['bool', 'codepoint'=>'mixed'], 'IntlChar::isbase' => ['bool', 'codepoint'=>'mixed'],
'IntlChar::isblank' => ['bool', 'codepoint'=>'mixed'], 'IntlChar::isblank' => ['bool', 'codepoint'=>'mixed'],
'IntlChar::iscntrl' => ['bool', 'codepoint'=>'mixed'], 'IntlChar::iscntrl' => ['bool', 'codepoint'=>'mixed'],
'IntlChar::isdefined' => ['bool', 'codepoint'=>'mixed'], 'IntlChar::isdefined' => ['bool', 'codepoint'=>'mixed'],
'IntlChar::isdigit' => ['bool', 'codepoint'=>'mixed'], 'IntlChar::isdigit' => ['bool', 'codepoint'=>'mixed'],
'IntlChar::isgraph' => ['bool', 'codepoint'=>'mixed'], 'IntlChar::isgraph' => ['bool', 'codepoint'=>'mixed'],
'IntlChar::isIDIgnorable' => ['bool', 'codepoint'=>'mixed'], 'IntlChar::isIDIgnorable' => ['bool', 'codepoint'=>'mixed'],
'IntlChar::isIDPart' => ['bool', 'codepoint'=>'mixed'], 'IntlChar::isIDPart' => ['bool', 'codepoint'=>'mixed'],
'IntlChar::isIDStart' => ['bool', 'codepoint'=>'mixed'], 'IntlChar::isIDStart' => ['bool', 'codepoint'=>'mixed'],
'IntlChar::isISOControl' => ['bool', 'codepoint'=>'mixed'], 'IntlChar::isISOControl' => ['bool', 'codepoint'=>'mixed'],
'IntlChar::isJavaIDPart' => ['bool', 'codepoint'=>'mixed'], 'IntlChar::isJavaIDPart' => ['bool', 'codepoint'=>'mixed'],
'IntlChar::isJavaIDStart' => ['bool', 'codepoint'=>'mixed'], 'IntlChar::isJavaIDStart' => ['bool', 'codepoint'=>'mixed'],
'IntlChar::isJavaSpaceChar' => ['bool', 'codepoint'=>'mixed'], 'IntlChar::isJavaSpaceChar' => ['bool', 'codepoint'=>'mixed'],
'IntlChar::islower' => ['bool', 'codepoint'=>'mixed'], 'IntlChar::islower' => ['bool', 'codepoint'=>'mixed'],
'IntlChar::isMirrored' => ['bool', 'codepoint'=>'mixed'], 'IntlChar::isMirrored' => ['bool', 'codepoint'=>'mixed'],
'IntlChar::isprint' => ['bool', 'codepoint'=>'mixed'], 'IntlChar::isprint' => ['bool', 'codepoint'=>'mixed'],
'IntlChar::ispunct' => ['bool', 'codepoint'=>'mixed'], 'IntlChar::ispunct' => ['bool', 'codepoint'=>'mixed'],
'IntlChar::isspace' => ['bool', 'codepoint'=>'mixed'], 'IntlChar::isspace' => ['bool', 'codepoint'=>'mixed'],
'IntlChar::istitle' => ['bool', 'codepoint'=>'mixed'], 'IntlChar::istitle' => ['bool', 'codepoint'=>'mixed'],
'IntlChar::isUAlphabetic' => ['bool', 'codepoint'=>'mixed'], 'IntlChar::isUAlphabetic' => ['bool', 'codepoint'=>'mixed'],
'IntlChar::isULowercase' => ['bool', 'codepoint'=>'mixed'], 'IntlChar::isULowercase' => ['bool', 'codepoint'=>'mixed'],
'IntlChar::isupper' => ['bool', 'codepoint'=>'mixed'], 'IntlChar::isupper' => ['bool', 'codepoint'=>'mixed'],
'IntlChar::isUUppercase' => ['bool', 'codepoint'=>'mixed'], 'IntlChar::isUUppercase' => ['bool', 'codepoint'=>'mixed'],
'IntlChar::isUWhiteSpace' => ['bool', 'codepoint'=>'mixed'], 'IntlChar::isUWhiteSpace' => ['bool', 'codepoint'=>'mixed'],
'IntlChar::isWhitespace' => ['bool', 'codepoint'=>'mixed'], 'IntlChar::isWhitespace' => ['bool', 'codepoint'=>'mixed'],
'IntlChar::isxdigit' => ['bool', 'codepoint'=>'mixed'], 'IntlChar::isxdigit' => ['bool', 'codepoint'=>'mixed'],
'IntlChar::ord' => ['int', 'character'=>'mixed'], 'IntlChar::ord' => ['int', 'character'=>'mixed'],
'IntlChar::tolower' => ['mixed', 'codepoint'=>'mixed'], 'IntlChar::tolower' => ['mixed', 'codepoint'=>'mixed'],
'IntlChar::totitle' => ['mixed', 'codepoint'=>'mixed'], 'IntlChar::totitle' => ['mixed', 'codepoint'=>'mixed'],
'IntlChar::toupper' => ['mixed', 'codepoint'=>'mixed'], 'IntlChar::toupper' => ['mixed', 'codepoint'=>'mixed'],
'preg_replace_callback_array' => ['string|string[]', 'pattern'=>'array<string,callable(array):string>', 'subject'=>'string|array', 'limit='=>'int', '&w_count='=>'int'], 'preg_replace_callback_array' => ['string|string[]', 'pattern'=>'array<string,callable(array):string>', 'subject'=>'string|array', 'limit='=>'int', '&w_count='=>'int'],
'random_bytes' => ['string', 'length'=>'int'], 'random_bytes' => ['string', 'length'=>'int'],
'random_int' => ['int', 'min'=>'int', 'max'=>'int'], 'random_int' => ['int', 'min'=>'int', 'max'=>'int'],
'session_start' => ['bool', 'options='=>'array'], ],
'unserialize' => ['mixed', 'data'=>'string', 'options='=>'array{allowed_classes?:string[]|bool}'], 'changed' => [
], 'session_start' => [
'old' => [ 'old' => ['bool'],
'ereg' => ['int', 'pattern'=>'string', 'string'=>'string', 'regs='=>'array'], 'new' => ['bool', 'options='=>'array'],
'ereg_replace' => ['string', 'pattern'=>'string', 'replacement'=>'string', 'string'=>'string'], ],
'eregi' => ['int', 'pattern'=>'string', 'string'=>'string', 'regs='=>'array'], 'unserialize' => [
'eregi_replace' => ['string', 'pattern'=>'string', 'replacement'=>'string', 'string'=>'string'], 'old' => ['mixed', 'data'=>'string'],
'imagepsbbox' => ['array', 'text'=>'string', 'font'=>'', 'size'=>'int', 'space'=>'int', 'tightness'=>'int', 'angle'=>'float'], 'new' => ['mixed', 'data'=>'string', 'options='=>'array{allowed_classes?:string[]|bool}'],
'imagepsencodefont' => ['bool', 'font_index'=>'resource', 'encodingfile'=>'string'], ],
'imagepsextendfont' => ['bool', 'font_index'=>'resource', 'extend'=>'float'], ],
'imagepsfreefont' => ['bool', 'font_index'=>'resource'], 'removed' => [
'imagepsloadfont' => ['resource', 'filename'=>'string'], 'ereg' => ['int', 'pattern'=>'string', 'string'=>'string', 'regs='=>'array'],
'imagepsslantfont' => ['bool', 'font_index'=>'resource', 'slant'=>'float'], 'ereg_replace' => ['string', 'pattern'=>'string', 'replacement'=>'string', 'string'=>'string'],
'imagepstext' => ['array', 'image'=>'resource', 'text'=>'string', 'font_index'=>'resource', 'size'=>'int', 'foreground'=>'int', 'background'=>'int', 'x'=>'int', 'y'=>'int', 'space='=>'int', 'tightness='=>'int', 'angle='=>'float', 'antialias_steps='=>'int'], 'eregi' => ['int', 'pattern'=>'string', 'string'=>'string', 'regs='=>'array'],
'mssql_bind' => ['bool', 'stmt'=>'resource', 'param_name'=>'string', 'var'=>'mixed', 'type'=>'int', 'is_output='=>'bool', 'is_null='=>'bool', 'maxlen='=>'int'], 'eregi_replace' => ['string', 'pattern'=>'string', 'replacement'=>'string', 'string'=>'string'],
'mssql_close' => ['bool', 'link_identifier='=>'resource'], 'imagepsbbox' => ['array', 'text'=>'string', 'font'=>'', 'size'=>'int', 'space'=>'int', 'tightness'=>'int', 'angle'=>'float'],
'mssql_connect' => ['resource', 'servername='=>'string', 'username='=>'string', 'password='=>'string', 'new_link='=>'bool'], 'imagepsencodefont' => ['bool', 'font_index'=>'resource', 'encodingfile'=>'string'],
'mssql_data_seek' => ['bool', 'result_identifier'=>'resource', 'row_number'=>'int'], 'imagepsextendfont' => ['bool', 'font_index'=>'resource', 'extend'=>'float'],
'mssql_execute' => ['mixed', 'stmt'=>'resource', 'skip_results='=>'bool'], 'imagepsfreefont' => ['bool', 'font_index'=>'resource'],
'mssql_fetch_array' => ['array', 'result'=>'resource', 'result_type='=>'int'], 'imagepsloadfont' => ['resource', 'filename'=>'string'],
'mssql_fetch_assoc' => ['array', 'result_id'=>'resource'], 'imagepsslantfont' => ['bool', 'font_index'=>'resource', 'slant'=>'float'],
'mssql_fetch_batch' => ['int', 'result'=>'resource'], 'imagepstext' => ['array', 'image'=>'resource', 'text'=>'string', 'font_index'=>'resource', 'size'=>'int', 'foreground'=>'int', 'background'=>'int', 'x'=>'int', 'y'=>'int', 'space='=>'int', 'tightness='=>'int', 'angle='=>'float', 'antialias_steps='=>'int'],
'mssql_fetch_field' => ['object', 'result'=>'resource', 'field_offset='=>'int'], 'mssql_bind' => ['bool', 'stmt'=>'resource', 'param_name'=>'string', 'var'=>'mixed', 'type'=>'int', 'is_output='=>'bool', 'is_null='=>'bool', 'maxlen='=>'int'],
'mssql_fetch_object' => ['object', 'result'=>'resource'], 'mssql_close' => ['bool', 'link_identifier='=>'resource'],
'mssql_fetch_row' => ['array', 'result'=>'resource'], 'mssql_connect' => ['resource', 'servername='=>'string', 'username='=>'string', 'password='=>'string', 'new_link='=>'bool'],
'mssql_field_length' => ['int', 'result'=>'resource', 'offset='=>'int'], 'mssql_data_seek' => ['bool', 'result_identifier'=>'resource', 'row_number'=>'int'],
'mssql_field_name' => ['string', 'result'=>'resource', 'offset='=>'int'], 'mssql_execute' => ['mixed', 'stmt'=>'resource', 'skip_results='=>'bool'],
'mssql_field_seek' => ['bool', 'result'=>'resource', 'field_offset'=>'int'], 'mssql_fetch_array' => ['array', 'result'=>'resource', 'result_type='=>'int'],
'mssql_field_type' => ['string', 'result'=>'resource', 'offset='=>'int'], 'mssql_fetch_assoc' => ['array', 'result_id'=>'resource'],
'mssql_free_result' => ['bool', 'result'=>'resource'], 'mssql_fetch_batch' => ['int', 'result'=>'resource'],
'mssql_free_statement' => ['bool', 'stmt'=>'resource'], 'mssql_fetch_field' => ['object', 'result'=>'resource', 'field_offset='=>'int'],
'mssql_get_last_message' => ['string'], 'mssql_fetch_object' => ['object', 'result'=>'resource'],
'mssql_guid_string' => ['string', 'binary'=>'string', 'short_format='=>'bool'], 'mssql_fetch_row' => ['array', 'result'=>'resource'],
'mssql_init' => ['resource', 'sp_name'=>'string', 'link_identifier='=>'resource'], 'mssql_field_length' => ['int', 'result'=>'resource', 'offset='=>'int'],
'mssql_min_error_severity' => ['void', 'severity'=>'int'], 'mssql_field_name' => ['string', 'result'=>'resource', 'offset='=>'int'],
'mssql_min_message_severity' => ['void', 'severity'=>'int'], 'mssql_field_seek' => ['bool', 'result'=>'resource', 'field_offset'=>'int'],
'mssql_next_result' => ['bool', 'result_id'=>'resource'], 'mssql_field_type' => ['string', 'result'=>'resource', 'offset='=>'int'],
'mssql_num_fields' => ['int', 'result'=>'resource'], 'mssql_free_result' => ['bool', 'result'=>'resource'],
'mssql_num_rows' => ['int', 'result'=>'resource'], 'mssql_free_statement' => ['bool', 'stmt'=>'resource'],
'mssql_pconnect' => ['resource', 'servername='=>'string', 'username='=>'string', 'password='=>'string', 'new_link='=>'bool'], 'mssql_get_last_message' => ['string'],
'mssql_query' => ['mixed', 'query'=>'string', 'link_identifier='=>'resource', 'batch_size='=>'int'], 'mssql_guid_string' => ['string', 'binary'=>'string', 'short_format='=>'bool'],
'mssql_result' => ['string', 'result'=>'resource', 'row'=>'int', 'field'=>'mixed'], 'mssql_init' => ['resource', 'sp_name'=>'string', 'link_identifier='=>'resource'],
'mssql_rows_affected' => ['int', 'link_identifier'=>'resource'], 'mssql_min_error_severity' => ['void', 'severity'=>'int'],
'mssql_select_db' => ['bool', 'database_name'=>'string', 'link_identifier='=>'resource'], 'mssql_min_message_severity' => ['void', 'severity'=>'int'],
'mysql_affected_rows' => ['int', 'link_identifier='=>'resource'], 'mssql_next_result' => ['bool', 'result_id'=>'resource'],
'mysql_client_encoding' => ['string', 'link_identifier='=>'resource'], 'mssql_num_fields' => ['int', 'result'=>'resource'],
'mysql_close' => ['bool', 'link_identifier='=>'resource'], 'mssql_num_rows' => ['int', 'result'=>'resource'],
'mysql_connect' => ['resource', 'server='=>'string', 'username='=>'string', 'password='=>'string', 'new_link='=>'bool', 'client_flags='=>'int'], 'mssql_pconnect' => ['resource', 'servername='=>'string', 'username='=>'string', 'password='=>'string', 'new_link='=>'bool'],
'mysql_create_db' => ['bool', 'database_name'=>'string', 'link_identifier='=>'resource'], 'mssql_query' => ['mixed', 'query'=>'string', 'link_identifier='=>'resource', 'batch_size='=>'int'],
'mysql_data_seek' => ['bool', 'result'=>'resource', 'row_number'=>'int'], 'mssql_result' => ['string', 'result'=>'resource', 'row'=>'int', 'field'=>'mixed'],
'mysql_db_name' => ['string', 'result'=>'resource', 'row'=>'int', 'field='=>'mixed'], 'mssql_rows_affected' => ['int', 'link_identifier'=>'resource'],
'mysql_db_query' => ['resource', 'database'=>'string', 'query'=>'string', 'link_identifier='=>'resource'], 'mssql_select_db' => ['bool', 'database_name'=>'string', 'link_identifier='=>'resource'],
'mysql_drop_db' => ['bool', 'database_name'=>'string', 'link_identifier='=>'resource'], 'mysql_affected_rows' => ['int', 'link_identifier='=>'resource'],
'mysql_errno' => ['int', 'link_identifier='=>'resource'], 'mysql_client_encoding' => ['string', 'link_identifier='=>'resource'],
'mysql_error' => ['string', 'link_identifier='=>'resource'], 'mysql_close' => ['bool', 'link_identifier='=>'resource'],
'mysql_escape_string' => ['string', 'unescaped_string'=>'string'], 'mysql_connect' => ['resource', 'server='=>'string', 'username='=>'string', 'password='=>'string', 'new_link='=>'bool', 'client_flags='=>'int'],
'mysql_fetch_array' => ['array', 'result'=>'resource', 'result_type='=>'int'], 'mysql_create_db' => ['bool', 'database_name'=>'string', 'link_identifier='=>'resource'],
'mysql_fetch_assoc' => ['array', 'result'=>'resource'], 'mysql_data_seek' => ['bool', 'result'=>'resource', 'row_number'=>'int'],
'mysql_fetch_field' => ['object', 'result'=>'resource', 'field_offset='=>'int'], 'mysql_db_name' => ['string', 'result'=>'resource', 'row'=>'int', 'field='=>'mixed'],
'mysql_fetch_lengths' => ['array', 'result'=>'resource'], 'mysql_db_query' => ['resource', 'database'=>'string', 'query'=>'string', 'link_identifier='=>'resource'],
'mysql_fetch_object' => ['object', 'result'=>'resource', 'class_name='=>'string', 'params='=>'array'], 'mysql_drop_db' => ['bool', 'database_name'=>'string', 'link_identifier='=>'resource'],
'mysql_fetch_row' => ['array', 'result'=>'resource'], 'mysql_errno' => ['int', 'link_identifier='=>'resource'],
'mysql_field_flags' => ['string', 'result'=>'resource', 'field_offset'=>'int'], 'mysql_error' => ['string', 'link_identifier='=>'resource'],
'mysql_field_len' => ['int', 'result'=>'resource', 'field_offset'=>'int'], 'mysql_escape_string' => ['string', 'unescaped_string'=>'string'],
'mysql_field_name' => ['string', 'result'=>'resource', 'field_offset'=>'int'], 'mysql_fetch_array' => ['array', 'result'=>'resource', 'result_type='=>'int'],
'mysql_field_seek' => ['bool', 'result'=>'resource', 'field_offset'=>'int'], 'mysql_fetch_assoc' => ['array', 'result'=>'resource'],
'mysql_field_table' => ['string', 'result'=>'resource', 'field_offset'=>'int'], 'mysql_fetch_field' => ['object', 'result'=>'resource', 'field_offset='=>'int'],
'mysql_field_type' => ['string', 'result'=>'resource', 'field_offset'=>'int'], 'mysql_fetch_lengths' => ['array', 'result'=>'resource'],
'mysql_free_result' => ['bool', 'result'=>'resource'], 'mysql_fetch_object' => ['object', 'result'=>'resource', 'class_name='=>'string', 'params='=>'array'],
'mysql_get_client_info' => ['string'], 'mysql_fetch_row' => ['array', 'result'=>'resource'],
'mysql_get_host_info' => ['string', 'link_identifier='=>'resource'], 'mysql_field_flags' => ['string', 'result'=>'resource', 'field_offset'=>'int'],
'mysql_get_proto_info' => ['int', 'link_identifier='=>'resource'], 'mysql_field_len' => ['int', 'result'=>'resource', 'field_offset'=>'int'],
'mysql_get_server_info' => ['string', 'link_identifier='=>'resource'], 'mysql_field_name' => ['string', 'result'=>'resource', 'field_offset'=>'int'],
'mysql_info' => ['string', 'link_identifier='=>'resource'], 'mysql_field_seek' => ['bool', 'result'=>'resource', 'field_offset'=>'int'],
'mysql_insert_id' => ['int', 'link_identifier='=>'resource'], 'mysql_field_table' => ['string', 'result'=>'resource', 'field_offset'=>'int'],
'mysql_list_dbs' => ['resource', 'link_identifier='=>'resource'], 'mysql_field_type' => ['string', 'result'=>'resource', 'field_offset'=>'int'],
'mysql_list_fields' => ['resource', 'database_name'=>'string', 'table_name'=>'string', 'link_identifier='=>'resource'], 'mysql_free_result' => ['bool', 'result'=>'resource'],
'mysql_list_processes' => ['resource', 'link_identifier='=>'resource'], 'mysql_get_client_info' => ['string'],
'mysql_list_tables' => ['resource', 'database'=>'string', 'link_identifier='=>'resource'], 'mysql_get_host_info' => ['string', 'link_identifier='=>'resource'],
'mysql_num_fields' => ['int', 'result'=>'resource'], 'mysql_get_proto_info' => ['int', 'link_identifier='=>'resource'],
'mysql_num_rows' => ['int', 'result'=>'resource'], 'mysql_get_server_info' => ['string', 'link_identifier='=>'resource'],
'mysql_pconnect' => ['resource', 'server='=>'string', 'username='=>'string', 'password='=>'string', 'client_flags='=>'int'], 'mysql_info' => ['string', 'link_identifier='=>'resource'],
'mysql_ping' => ['bool', 'link_identifier='=>'resource'], 'mysql_insert_id' => ['int', 'link_identifier='=>'resource'],
'mysql_query' => ['resource', 'query'=>'string', 'link_identifier='=>'resource'], 'mysql_list_dbs' => ['resource', 'link_identifier='=>'resource'],
'mysql_real_escape_string' => ['string', 'unescaped_string'=>'string', 'link_identifier='=>'resource'], 'mysql_list_fields' => ['resource', 'database_name'=>'string', 'table_name'=>'string', 'link_identifier='=>'resource'],
'mysql_result' => ['string', 'result'=>'resource', 'row'=>'int', 'field='=>'mixed'], 'mysql_list_processes' => ['resource', 'link_identifier='=>'resource'],
'mysql_select_db' => ['bool', 'database_name'=>'string', 'link_identifier='=>'resource'], 'mysql_list_tables' => ['resource', 'database'=>'string', 'link_identifier='=>'resource'],
'mysql_set_charset' => ['bool', 'charset'=>'string', 'link_identifier='=>'resource'], 'mysql_num_fields' => ['int', 'result'=>'resource'],
'mysql_stat' => ['string', 'link_identifier='=>'resource'], 'mysql_num_rows' => ['int', 'result'=>'resource'],
'mysql_tablename' => ['string', 'result'=>'resource', 'i'=>'int'], 'mysql_pconnect' => ['resource', 'server='=>'string', 'username='=>'string', 'password='=>'string', 'client_flags='=>'int'],
'mysql_thread_id' => ['int', 'link_identifier='=>'resource'], 'mysql_ping' => ['bool', 'link_identifier='=>'resource'],
'mysql_unbuffered_query' => ['resource', 'query'=>'string', 'link_identifier='=>'resource'], 'mysql_query' => ['resource', 'query'=>'string', 'link_identifier='=>'resource'],
'session_start' => ['bool'], 'mysql_real_escape_string' => ['string', 'unescaped_string'=>'string', 'link_identifier='=>'resource'],
'split' => ['list<string>', 'pattern'=>'string', 'string'=>'string', 'limit='=>'int'], 'mysql_result' => ['string', 'result'=>'resource', 'row'=>'int', 'field='=>'mixed'],
'spliti' => ['list<string>', 'pattern'=>'string', 'string'=>'string', 'limit='=>'int'], 'mysql_select_db' => ['bool', 'database_name'=>'string', 'link_identifier='=>'resource'],
'sql_regcase' => ['string', 'string'=>'string'], 'mysql_set_charset' => ['bool', 'charset'=>'string', 'link_identifier='=>'resource'],
'sybase_affected_rows' => ['int', 'link_identifier='=>'resource'], 'mysql_stat' => ['string', 'link_identifier='=>'resource'],
'sybase_close' => ['bool', 'link_identifier='=>'resource'], 'mysql_tablename' => ['string', 'result'=>'resource', 'i'=>'int'],
'sybase_connect' => ['resource', 'servername='=>'string', 'username='=>'string', 'password='=>'string', 'charset='=>'string', 'appname='=>'string', 'new='=>'bool'], 'mysql_thread_id' => ['int', 'link_identifier='=>'resource'],
'sybase_data_seek' => ['bool', 'result_identifier'=>'resource', 'row_number'=>'int'], 'mysql_unbuffered_query' => ['resource', 'query'=>'string', 'link_identifier='=>'resource'],
'sybase_deadlock_retry_count' => ['void', 'retry_count'=>'int'], 'split' => ['list<string>', 'pattern'=>'string', 'string'=>'string', 'limit='=>'int'],
'sybase_fetch_array' => ['array', 'result'=>'resource'], 'spliti' => ['list<string>', 'pattern'=>'string', 'string'=>'string', 'limit='=>'int'],
'sybase_fetch_assoc' => ['array', 'result'=>'resource'], 'sql_regcase' => ['string', 'string'=>'string'],
'sybase_fetch_field' => ['object', 'result'=>'resource', 'field_offset='=>'int'], 'sybase_affected_rows' => ['int', 'link_identifier='=>'resource'],
'sybase_fetch_object' => ['object', 'result'=>'resource', 'object='=>'mixed'], 'sybase_close' => ['bool', 'link_identifier='=>'resource'],
'sybase_fetch_row' => ['array', 'result'=>'resource'], 'sybase_connect' => ['resource', 'servername='=>'string', 'username='=>'string', 'password='=>'string', 'charset='=>'string', 'appname='=>'string', 'new='=>'bool'],
'sybase_field_seek' => ['bool', 'result'=>'resource', 'field_offset'=>'int'], 'sybase_data_seek' => ['bool', 'result_identifier'=>'resource', 'row_number'=>'int'],
'sybase_free_result' => ['bool', 'result'=>'resource'], 'sybase_deadlock_retry_count' => ['void', 'retry_count'=>'int'],
'sybase_get_last_message' => ['string'], 'sybase_fetch_array' => ['array', 'result'=>'resource'],
'sybase_min_client_severity' => ['void', 'severity'=>'int'], 'sybase_fetch_assoc' => ['array', 'result'=>'resource'],
'sybase_min_error_severity' => ['void', 'severity'=>'int'], 'sybase_fetch_field' => ['object', 'result'=>'resource', 'field_offset='=>'int'],
'sybase_min_message_severity' => ['void', 'severity'=>'int'], 'sybase_fetch_object' => ['object', 'result'=>'resource', 'object='=>'mixed'],
'sybase_min_server_severity' => ['void', 'severity'=>'int'], 'sybase_fetch_row' => ['array', 'result'=>'resource'],
'sybase_num_fields' => ['int', 'result'=>'resource'], 'sybase_field_seek' => ['bool', 'result'=>'resource', 'field_offset'=>'int'],
'sybase_num_rows' => ['int', 'result'=>'resource'], 'sybase_free_result' => ['bool', 'result'=>'resource'],
'sybase_pconnect' => ['resource', 'servername='=>'string', 'username='=>'string', 'password='=>'string', 'charset='=>'string', 'appname='=>'string'], 'sybase_get_last_message' => ['string'],
'sybase_query' => ['mixed', 'query'=>'string', 'link_identifier='=>'resource'], 'sybase_min_client_severity' => ['void', 'severity'=>'int'],
'sybase_result' => ['string', 'result'=>'resource', 'row'=>'int', 'field'=>'mixed'], 'sybase_min_error_severity' => ['void', 'severity'=>'int'],
'sybase_select_db' => ['bool', 'database_name'=>'string', 'link_identifier='=>'resource'], 'sybase_min_message_severity' => ['void', 'severity'=>'int'],
'sybase_set_message_handler' => ['bool', 'handler'=>'callable', 'connection='=>'resource'], 'sybase_min_server_severity' => ['void', 'severity'=>'int'],
'sybase_unbuffered_query' => ['resource', 'query'=>'string', 'link_identifier'=>'resource', 'store_result='=>'bool'], 'sybase_num_fields' => ['int', 'result'=>'resource'],
'unserialize' => ['mixed', 'data'=>'string'], 'sybase_num_rows' => ['int', 'result'=>'resource'],
], 'sybase_pconnect' => ['resource', 'servername='=>'string', 'username='=>'string', 'password='=>'string', 'charset='=>'string', 'appname='=>'string'],
'sybase_query' => ['mixed', 'query'=>'string', 'link_identifier='=>'resource'],
'sybase_result' => ['string', 'result'=>'resource', 'row'=>'int', 'field'=>'mixed'],
'sybase_select_db' => ['bool', 'database_name'=>'string', 'link_identifier='=>'resource'],
'sybase_set_message_handler' => ['bool', 'handler'=>'callable', 'connection='=>'resource'],
'sybase_unbuffered_query' => ['resource', 'query'=>'string', 'link_identifier'=>'resource', 'store_result='=>'bool'],
],
]; ];
@@ -14,38 +14,54 @@
* @phan-file-suppress PhanPluginMixedKeyNoKey (read by Phan when analyzing this file) * @phan-file-suppress PhanPluginMixedKeyNoKey (read by Phan when analyzing this file)
*/ */
return [ return [
'new' => [ 'added' => [
'Closure::fromCallable' => ['Closure', 'callback'=>'callable'], 'Closure::fromCallable' => ['Closure', 'callback'=>'callable'],
'SQLite3::createFunction' => ['bool', 'name'=>'string', 'callback'=>'callable', 'argCount='=>'int', 'flags='=>'int'], 'curl_multi_errno' => ['int', 'multi_handle'=>'resource'],
'curl_multi_errno' => ['int', 'multi_handle'=>'resource'], 'curl_share_errno' => ['int', 'share_handle'=>'resource'],
'curl_share_errno' => ['int', 'share_handle'=>'resource'], 'curl_share_strerror' => ['string', 'error_code'=>'int'],
'curl_share_strerror' => ['string', 'error_code'=>'int'], 'getenv\'1' => ['array<string,string>'],
'get_headers' => ['array<int|string,array|string>|false', 'url'=>'string', 'associative='=>'bool', 'context='=>'resource'], 'hash_hkdf' => ['string|false', 'algo'=>'string', 'key'=>'string', 'length='=>'int', 'info='=>'string', 'salt='=>'string'],
'getenv\'1' => ['array<string,string>'], 'is_iterable' => ['bool', 'value'=>'mixed'],
'getopt' => ['array<string,string>|array<string,false>|array<string,list<mixed>>', 'short_options'=>'string', 'long_options='=>'array', '&w_rest_index='=>'int'], 'openssl_get_curve_names' => ['list<string>'],
'hash_hkdf' => ['string|false', 'algo'=>'string', 'key'=>'string', 'length='=>'int', 'info='=>'string', 'salt='=>'string'], 'pcntl_async_signals' => ['bool', 'enable='=>'bool'],
'is_iterable' => ['bool', 'value'=>'mixed'], 'pcntl_signal_get_handler' => ['int|callable', 'signal'=>'int'],
'openssl_get_curve_names' => ['list<string>'], 'sapi_windows_cp_conv' => ['string', 'in_codepage'=>'int|string', 'out_codepage'=>'int|string', 'subject'=>'string'],
'pcntl_async_signals' => ['bool', 'enable='=>'bool'], 'sapi_windows_cp_get' => ['int', 'kind='=>'string'],
'pcntl_signal_get_handler' => ['int|callable', 'signal'=>'int'], 'sapi_windows_cp_is_utf8' => ['bool'],
'pg_fetch_all' => ['array<int,array>|false', 'result'=>'resource', 'mode='=>'int'], 'sapi_windows_cp_set' => ['bool', 'codepage'=>'int'],
'pg_last_error' => ['string', 'connection='=>'resource', 'operation='=>'int'], 'session_create_id' => ['string', 'prefix='=>'string'],
'pg_select' => ['string|bool', 'connection'=>'resource', 'table_name'=>'string', 'conditions'=>'array', 'flags='=>'int', 'mode='=>'int'], 'session_gc' => ['int|false'],
'sapi_windows_cp_conv' => ['string', 'in_codepage'=>'int|string', 'out_codepage'=>'int|string', 'subject'=>'string'], ],
'sapi_windows_cp_get' => ['int', 'kind='=>'string'], 'changed' => [
'sapi_windows_cp_is_utf8' => ['bool'], 'get_headers' => [
'sapi_windows_cp_set' => ['bool', 'codepage'=>'int'], 'old' => ['array<int|string,array|string>|false', 'url'=>'string', 'associative='=>'bool'],
'session_create_id' => ['string', 'prefix='=>'string'], 'new' => ['array<int|string,array|string>|false', 'url'=>'string', 'associative='=>'bool', 'context='=>'resource'],
'session_gc' => ['int|false'], ],
'unpack' => ['array|false', 'format'=>'string', 'string'=>'string', 'offset='=>'int'], 'getopt' => [
], 'old' => ['array<string,string>|array<string,false>|array<string,list<string|false>>', 'short_options'=>'string', 'long_options='=>'array'],
'old' => [ 'new' => ['array<string,string>|array<string,false>|array<string,list<mixed>>', 'short_options'=>'string', 'long_options='=>'array', '&w_rest_index='=>'int'],
'SQLite3::createFunction' => ['bool', 'name'=>'string', 'callback'=>'callable', 'argCount='=>'int'], ],
'get_headers' => ['array|false', 'url'=>'string', 'associative='=>'bool'], 'pg_fetch_all' => [
'getopt' => ['array<string,string>|array<string,false>|array<string,list<string|false>>', 'short_options'=>'string', 'long_options='=>'array'], 'old' => ['array', 'result'=>'resource'],
'pg_fetch_all' => ['array', 'result'=>'resource'], 'new' => ['array<int,array>|false', 'result'=>'resource', 'mode='=>'int'],
'pg_last_error' => ['string', 'connection='=>'resource'], ],
'pg_select' => ['mixed', 'connection'=>'resource', 'table_name'=>'string', 'conditions'=>'array', 'flags='=>'int'], 'pg_last_error' => [
'unpack' => ['array', 'format'=>'string', 'string'=>'string'], 'old' => ['string', 'connection='=>'resource'],
], 'new' => ['string', 'connection='=>'resource', 'operation='=>'int'],
],
'pg_select' => [
'old' => ['mixed', 'connection'=>'resource', 'table_name'=>'string', 'conditions'=>'array', 'flags='=>'int'],
'new' => ['string|bool', 'connection'=>'resource', 'table_name'=>'string', 'conditions'=>'array', 'flags='=>'int', 'mode='=>'int'],
],
'SQLite3::createFunction' => [
'old' => ['bool', 'name'=>'string', 'callback'=>'callable', 'argCount='=>'int'],
'new' => ['bool', 'name'=>'string', 'callback'=>'callable', 'argCount='=>'int', 'flags='=>'int'],
],
'unpack' => [
'old' => ['array', 'format'=>'string', 'string'=>'string'],
'new' => ['array|false', 'format'=>'string', 'string'=>'string', 'offset='=>'int'],
],
],
'removed' => [
],
]; ];
@@ -14,136 +14,152 @@
* @phan-file-suppress PhanPluginMixedKeyNoKey (read by Phan when analyzing this file) * @phan-file-suppress PhanPluginMixedKeyNoKey (read by Phan when analyzing this file)
*/ */
return [ return [
'new' => [ 'added' => [
'DOMNodeList::count' => ['int'], 'DOMNodeList::count' => ['int'],
'ftp_append' => ['bool', 'ftp'=>'resource', 'remote_filename'=>'string', 'local_filename'=>'string', 'mode='=>'int'], 'ftp_append' => ['bool', 'ftp'=>'resource', 'remote_filename'=>'string', 'local_filename'=>'string', 'mode='=>'int'],
'hash_copy' => ['HashContext', 'context'=>'HashContext'], 'hash_hmac_algos' => ['list<string>'],
'hash_final' => ['string', 'context'=>'HashContext', 'binary='=>'bool'], 'imagebmp' => ['bool', 'image'=>'resource', 'file='=>'null|resource|string', 'compressed='=>'bool'],
'hash_hmac_algos' => ['list<string>'], 'imagecreatefrombmp' => ['resource|false', 'filename'=>'string'],
'hash_init' => ['HashContext', 'algo'=>'string', 'flags='=>'int', 'key='=>'string'], 'imageopenpolygon' => ['bool', 'image'=>'resource', 'points'=>'array', 'num_points_or_color'=>'int', 'color='=>'int'],
'hash_update' => ['bool', 'context'=>'HashContext', 'data'=>'string'], 'imageresolution' => ['array<int,int>|bool', 'image'=>'resource', 'resolution_x='=>'int', 'resolution_y='=>'int'],
'hash_update_file' => ['bool', 'context'=>'HashContext', 'filename'=>'string', 'stream_context='=>'?resource'], 'imagesetclip' => ['bool', 'image'=>'resource', 'x1'=>'int', 'y1'=>'int', 'x2'=>'int', 'y2'=>'int'],
'hash_update_stream' => ['int', 'context'=>'HashContext', 'stream'=>'resource', 'length='=>'int'], 'ldap_exop' => ['bool|resource', 'ldap'=>'resource', 'request_oid'=>'string', 'request_data='=>'string', 'controls='=>'array', '&w_response_data='=>'string', '&w_response_oid='=>'string'],
'imagebmp' => ['bool', 'image'=>'resource', 'file='=>'null|resource|string', 'compressed='=>'bool'], 'ldap_exop_passwd' => ['bool|string', 'ldap'=>'resource', 'user='=>'string', 'old_password='=>'string', 'new_password='=>'string', '&controls='=>'array'],
'imagecreatefrombmp' => ['resource|false', 'filename'=>'string'], 'ldap_exop_refresh' => ['int|false', 'ldap'=>'resource', 'dn'=>'string', 'ttl'=>'int'],
'imageopenpolygon' => ['bool', 'image'=>'resource', 'points'=>'array', 'num_points_or_color'=>'int', 'color='=>'int'], 'ldap_exop_whoami' => ['string|false', 'ldap'=>'resource'],
'imageresolution' => ['array<int,int>|bool', 'image'=>'resource', 'resolution_x='=>'int', 'resolution_y='=>'int'], 'ldap_parse_exop' => ['bool', 'ldap'=>'resource', 'result'=>'resource', '&w_response_data='=>'string', '&w_response_oid='=>'string'],
'imagesetclip' => ['bool', 'image'=>'resource', 'x1'=>'int', 'x2'=>'int', 'y1'=>'int', 'y2'=>'int'], 'mb_chr' => ['string|false', 'codepoint'=>'int', 'encoding='=>'string'],
'ldap_exop' => ['bool|resource', 'ldap'=>'resource', 'request_oid'=>'string', 'request_data='=>'string', 'controls='=>'array', '&w_response_data='=>'string', '&w_response_oid='=>'string'], 'mb_ord' => ['int|false', 'string'=>'string', 'encoding='=>'string'],
'ldap_exop_passwd' => ['bool|string', 'ldap'=>'resource', 'user='=>'string', 'old_password='=>'string', 'new_password='=>'string', '&controls='=>'array'], 'mb_scrub' => ['string|false', 'string'=>'string', 'encoding='=>'string'],
'ldap_exop_refresh' => ['int|false', 'ldap'=>'resource', 'dn'=>'string', 'ttl'=>'int'], 'oci_register_taf_callback' => ['bool', 'connection'=>'resource', 'callback'=>'callable'],
'ldap_exop_whoami' => ['string|false', 'ldap'=>'resource'], 'oci_set_call_timeout' => ['bool', 'connection'=>'resource', 'timeout'=>'int'],
'ldap_parse_exop' => ['bool', 'ldap'=>'resource', 'result'=>'resource', '&w_response_data='=>'string', '&w_response_oid='=>'string'], 'oci_unregister_taf_callback' => ['bool', 'connection'=>'resource'],
'mb_chr' => ['string|false', 'codepoint'=>'int', 'encoding='=>'string'], 'ReflectionClass::isIterable' => ['bool'],
'mb_ord' => ['int|false', 'string'=>'string', 'encoding='=>'string'], 'sapi_windows_vt100_support' => ['bool', 'stream'=>'resource', 'enable='=>'bool'],
'mb_scrub' => ['string|false', 'string'=>'string', 'encoding='=>'string'], 'socket_addrinfo_bind' => ['?resource', 'address'=>'resource'],
'oci_register_taf_callback' => ['bool', 'connection'=>'resource', 'callback'=>'callable'], 'socket_addrinfo_connect' => ['?resource', 'address'=>'resource'],
'oci_set_call_timeout' => ['bool', 'connection'=>'resource', 'timeout'=>'int'], 'socket_addrinfo_explain' => ['array', 'address'=>'resource'],
'oci_unregister_taf_callback' => ['bool', 'connection'=>'resource'], 'socket_addrinfo_lookup' => ['resource[]', 'host'=>'string', 'service='=>'?string', 'hints='=>'array'],
'ReflectionClass::isIterable' => ['bool'], 'sodium_add' => ['void', '&string1'=>'string', 'string2'=>'string'],
'SQLite3::openBlob' => ['resource|false', 'table'=>'string', 'column'=>'string', 'rowid'=>'int', 'database='=>'string', 'flags='=>'int'], 'sodium_base642bin' => ['string', 'string'=>'string', 'id'=>'int', 'ignore='=>'string'],
'sapi_windows_vt100_support' => ['bool', 'stream'=>'resource', 'enable='=>'bool'], 'sodium_bin2base64' => ['string', 'string'=>'string', 'id'=>'int'],
'socket_addrinfo_bind' => ['?resource', 'address'=>'resource'], 'sodium_bin2hex' => ['string', 'string'=>'string'],
'socket_addrinfo_connect' => ['?resource', 'address'=>'resource'], 'sodium_compare' => ['int', 'string1'=>'string', 'string2'=>'string'],
'socket_addrinfo_explain' => ['array', 'address'=>'resource'], 'sodium_crypto_aead_aes256gcm_decrypt' => ['string|false', 'ciphertext'=>'string', 'additional_data'=>'string', 'nonce'=>'string', 'key'=>'string'],
'socket_addrinfo_lookup' => ['resource[]', 'host'=>'string', 'service='=>'?string', 'hints='=>'array'], 'sodium_crypto_aead_aes256gcm_encrypt' => ['string', 'message'=>'string', 'additional_data'=>'string', 'nonce'=>'string', 'key'=>'string'],
'sodium_add' => ['void', '&string1'=>'string', 'string2'=>'string'], 'sodium_crypto_aead_aes256gcm_is_available' => ['bool'],
'sodium_base642bin' => ['string', 'string'=>'string', 'id'=>'int', 'ignore='=>'string'], 'sodium_crypto_aead_aes256gcm_keygen' => ['string'],
'sodium_bin2base64' => ['string', 'string'=>'string', 'id'=>'int'], 'sodium_crypto_aead_chacha20poly1305_decrypt' => ['string', 'ciphertext'=>'string', 'additional_data'=>'string', 'nonce'=>'string', 'key'=>'string'],
'sodium_bin2hex' => ['string', 'string'=>'string'], 'sodium_crypto_aead_chacha20poly1305_encrypt' => ['string', 'message'=>'string', 'additional_data'=>'string', 'nonce'=>'string', 'key'=>'string'],
'sodium_compare' => ['int', 'string1'=>'string', 'string2'=>'string'], 'sodium_crypto_aead_chacha20poly1305_ietf_decrypt' => ['false|string', 'ciphertext'=>'string', 'additional_data'=>'string', 'nonce'=>'string', 'key'=>'string'],
'sodium_crypto_aead_aes256gcm_decrypt' => ['string|false', 'ciphertext'=>'string', 'additional_data'=>'string', 'nonce'=>'string', 'key'=>'string'], 'sodium_crypto_aead_chacha20poly1305_ietf_encrypt' => ['string', 'message'=>'string', 'additional_data'=>'string', 'nonce'=>'string', 'key'=>'string'],
'sodium_crypto_aead_aes256gcm_encrypt' => ['string', 'message'=>'string', 'additional_data'=>'string', 'nonce'=>'string', 'key'=>'string'], 'sodium_crypto_aead_chacha20poly1305_ietf_keygen' => ['string'],
'sodium_crypto_aead_aes256gcm_is_available' => ['bool'], 'sodium_crypto_aead_chacha20poly1305_keygen' => ['string'],
'sodium_crypto_aead_aes256gcm_keygen' => ['string'], 'sodium_crypto_aead_xchacha20poly1305_ietf_decrypt' => ['string|false', 'ciphertext'=>'string', 'additional_data'=>'string', 'nonce'=>'string', 'key'=>'string'],
'sodium_crypto_aead_chacha20poly1305_decrypt' => ['string', 'ciphertext'=>'string', 'additional_data'=>'string', 'nonce'=>'string', 'key'=>'string'], 'sodium_crypto_aead_xchacha20poly1305_ietf_encrypt' => ['string', 'message'=>'string', 'additional_data'=>'string', 'nonce'=>'string', 'key'=>'string'],
'sodium_crypto_aead_chacha20poly1305_encrypt' => ['string', 'message'=>'string', 'additional_data'=>'string', 'nonce'=>'string', 'key'=>'string'], 'sodium_crypto_aead_xchacha20poly1305_ietf_keygen' => ['string'],
'sodium_crypto_aead_chacha20poly1305_ietf_decrypt' => ['false|string', 'ciphertext'=>'string', 'additional_data'=>'string', 'nonce'=>'string', 'key'=>'string'], 'sodium_crypto_auth' => ['string', 'message'=>'string', 'key'=>'string'],
'sodium_crypto_aead_chacha20poly1305_ietf_encrypt' => ['string', 'message'=>'string', 'additional_data'=>'string', 'nonce'=>'string', 'key'=>'string'], 'sodium_crypto_auth_keygen' => ['string'],
'sodium_crypto_aead_chacha20poly1305_ietf_keygen' => ['string'], 'sodium_crypto_auth_verify' => ['bool', 'mac'=>'string', 'message'=>'string', 'key'=>'string'],
'sodium_crypto_aead_chacha20poly1305_keygen' => ['string'], 'sodium_crypto_box' => ['string', 'message'=>'string', 'nonce'=>'string', 'key_pair'=>'string'],
'sodium_crypto_aead_xchacha20poly1305_ietf_decrypt' => ['string|false', 'ciphertext'=>'string', 'additional_data'=>'string', 'nonce'=>'string', 'key'=>'string'], 'sodium_crypto_box_keypair' => ['string'],
'sodium_crypto_aead_xchacha20poly1305_ietf_encrypt' => ['string', 'message'=>'string', 'additional_data'=>'string', 'nonce'=>'string', 'key'=>'string'], 'sodium_crypto_box_keypair_from_secretkey_and_publickey' => ['string', 'secret_key'=>'string', 'public_key'=>'string'],
'sodium_crypto_aead_xchacha20poly1305_ietf_keygen' => ['string'], 'sodium_crypto_box_open' => ['string|false', 'ciphertext'=>'string', 'nonce'=>'string', 'key_pair'=>'string'],
'sodium_crypto_auth' => ['string', 'message'=>'string', 'key'=>'string'], 'sodium_crypto_box_publickey' => ['string', 'key_pair'=>'string'],
'sodium_crypto_auth_keygen' => ['string'], 'sodium_crypto_box_publickey_from_secretkey' => ['string', 'secret_key'=>'string'],
'sodium_crypto_auth_verify' => ['bool', 'mac'=>'string', 'message'=>'string', 'key'=>'string'], 'sodium_crypto_box_seal' => ['string', 'message'=>'string', 'public_key'=>'string'],
'sodium_crypto_box' => ['string', 'message'=>'string', 'nonce'=>'string', 'key_pair'=>'string'], 'sodium_crypto_box_seal_open' => ['string|false', 'ciphertext'=>'string', 'key_pair'=>'string'],
'sodium_crypto_box_keypair' => ['string'], 'sodium_crypto_box_secretkey' => ['string', 'key_pair'=>'string'],
'sodium_crypto_box_keypair_from_secretkey_and_publickey' => ['string', 'secret_key'=>'string', 'public_key'=>'string'], 'sodium_crypto_box_seed_keypair' => ['string', 'seed'=>'string'],
'sodium_crypto_box_open' => ['string|false', 'ciphertext'=>'string', 'nonce'=>'string', 'key_pair'=>'string'], 'sodium_crypto_generichash' => ['string', 'message'=>'string', 'key='=>'string', 'length='=>'int'],
'sodium_crypto_box_publickey' => ['string', 'key_pair'=>'string'], 'sodium_crypto_generichash_final' => ['string', '&state'=>'string', 'length='=>'int'],
'sodium_crypto_box_publickey_from_secretkey' => ['string', 'secret_key'=>'string'], 'sodium_crypto_generichash_init' => ['string', 'key='=>'string', 'length='=>'int'],
'sodium_crypto_box_seal' => ['string', 'message'=>'string', 'key_pair'=>'string'], 'sodium_crypto_generichash_keygen' => ['string'],
'sodium_crypto_box_seal_open' => ['string|false', 'ciphertext'=>'string', 'key_pair'=>'string'], 'sodium_crypto_generichash_update' => ['bool', '&state'=>'string', 'message'=>'string'],
'sodium_crypto_box_secretkey' => ['string', 'key_pair'=>'string'], 'sodium_crypto_kdf_derive_from_key' => ['string', 'subkey_length'=>'int', 'subkey_id'=>'int', 'context'=>'string', 'key'=>'string'],
'sodium_crypto_box_seed_keypair' => ['string', 'seed'=>'string'], 'sodium_crypto_kdf_keygen' => ['string'],
'sodium_crypto_generichash' => ['string', 'message'=>'string', 'key='=>'string', 'length='=>'int'], 'sodium_crypto_kx_client_session_keys' => ['array<int,string>', 'client_key_pair'=>'string', 'server_key'=>'string'],
'sodium_crypto_generichash_final' => ['string', '&state'=>'string', 'length='=>'int'], 'sodium_crypto_kx_keypair' => ['string'],
'sodium_crypto_generichash_init' => ['string', 'key='=>'string', 'length='=>'int'], 'sodium_crypto_kx_publickey' => ['string', 'key_pair'=>'string'],
'sodium_crypto_generichash_keygen' => ['string'], 'sodium_crypto_kx_secretkey' => ['string', 'key_pair'=>'string'],
'sodium_crypto_generichash_update' => ['bool', '&state'=>'string', 'message'=>'string'], 'sodium_crypto_kx_seed_keypair' => ['string', 'seed'=>'string'],
'sodium_crypto_kdf_derive_from_key' => ['string', 'subkey_length'=>'int', 'subkey_id'=>'int', 'context'=>'string', 'key'=>'string'], 'sodium_crypto_kx_server_session_keys' => ['array<int,string>', 'server_key_pair'=>'string', 'client_key'=>'string'],
'sodium_crypto_kdf_keygen' => ['string'], 'sodium_crypto_pwhash' => ['string', 'length'=>'int', 'password'=>'string', 'salt'=>'string', 'opslimit'=>'int', 'memlimit'=>'int', 'algo='=>'int'],
'sodium_crypto_kx_client_session_keys' => ['array<int,string>', 'client_key_pair'=>'string', 'server_key'=>'string'], 'sodium_crypto_pwhash_scryptsalsa208sha256' => ['string', 'length'=>'int', 'password'=>'string', 'salt'=>'string', 'opslimit'=>'int', 'memlimit'=>'int'],
'sodium_crypto_kx_keypair' => ['string'], 'sodium_crypto_pwhash_scryptsalsa208sha256_str' => ['string', 'password'=>'string', 'opslimit'=>'int', 'memlimit'=>'int'],
'sodium_crypto_kx_publickey' => ['string', 'key_pair'=>'string'], 'sodium_crypto_pwhash_scryptsalsa208sha256_str_verify' => ['bool', 'hash'=>'string', 'password'=>'string'],
'sodium_crypto_kx_secretkey' => ['string', 'key_pair'=>'string'], 'sodium_crypto_pwhash_str' => ['string', 'password'=>'string', 'opslimit'=>'int', 'memlimit'=>'int'],
'sodium_crypto_kx_seed_keypair' => ['string', 'seed'=>'string'], 'sodium_crypto_pwhash_str_needs_rehash' => ['bool', 'password'=>'string', 'opslimit'=>'int', 'memlimit'=>'int'],
'sodium_crypto_kx_server_session_keys' => ['array<int,string>', 'server_key_pair'=>'string', 'client_key'=>'string'], 'sodium_crypto_pwhash_str_verify' => ['bool', 'hash'=>'string', 'password'=>'string'],
'sodium_crypto_pwhash' => ['string', 'length'=>'int', 'password'=>'string', 'salt'=>'string', 'opslimit'=>'int', 'memlimit'=>'int', 'algo='=>'int'], 'sodium_crypto_scalarmult' => ['string', 'n'=>'string', 'p'=>'string'],
'sodium_crypto_pwhash_scryptsalsa208sha256' => ['string', 'length'=>'int', 'password'=>'string', 'salt'=>'string', 'opslimit'=>'int', 'memlimit'=>'int'], 'sodium_crypto_scalarmult_base' => ['string', 'secret_key'=>'string'],
'sodium_crypto_pwhash_scryptsalsa208sha256_str' => ['string', 'password'=>'string', 'opslimit'=>'int', 'memlimit'=>'int'], 'sodium_crypto_secretbox' => ['string', 'message'=>'string', 'nonce'=>'string', 'key'=>'string'],
'sodium_crypto_pwhash_scryptsalsa208sha256_str_verify' => ['bool', 'hash'=>'string', 'password'=>'string'], 'sodium_crypto_secretbox_keygen' => ['string'],
'sodium_crypto_pwhash_str' => ['string', 'password'=>'string', 'opslimit'=>'int', 'memlimit'=>'int'], 'sodium_crypto_secretbox_open' => ['string|false', 'ciphertext'=>'string', 'nonce'=>'string', 'key'=>'string'],
'sodium_crypto_pwhash_str_needs_rehash' => ['bool', 'password'=>'string', 'opslimit'=>'int', 'memlimit'=>'int'], 'sodium_crypto_secretstream_xchacha20poly1305_init_pull' => ['string', 'header'=>'string', 'key'=>'string'],
'sodium_crypto_pwhash_str_verify' => ['bool', 'hash'=>'string', 'password'=>'string'], 'sodium_crypto_secretstream_xchacha20poly1305_init_push' => ['array', 'key'=>'string'],
'sodium_crypto_scalarmult' => ['string', 'n'=>'string', 'p'=>'string'], 'sodium_crypto_secretstream_xchacha20poly1305_keygen' => ['string'],
'sodium_crypto_scalarmult_base' => ['string', 'secret_key'=>'string'], 'sodium_crypto_secretstream_xchacha20poly1305_pull' => ['array', '&state'=>'string', 'ciphertext'=>'string', 'additional_data='=>'string'],
'sodium_crypto_secretbox' => ['string', 'message'=>'string', 'nonce'=>'string', 'key'=>'string'], 'sodium_crypto_secretstream_xchacha20poly1305_push' => ['string', '&state'=>'string', 'message'=>'string', 'additional_data='=>'string', 'tag='=>'int'],
'sodium_crypto_secretbox_keygen' => ['string'], 'sodium_crypto_secretstream_xchacha20poly1305_rekey' => ['void', '&state'=>'string'],
'sodium_crypto_secretbox_open' => ['string|false', 'ciphertext'=>'string', 'nonce'=>'string', 'key'=>'string'], 'sodium_crypto_shorthash' => ['string', 'message'=>'string', 'key'=>'string'],
'sodium_crypto_secretstream_xchacha20poly1305_init_pull' => ['string', 'header'=>'string', 'key'=>'string'], 'sodium_crypto_shorthash_keygen' => ['string'],
'sodium_crypto_secretstream_xchacha20poly1305_init_push' => ['array', 'key'=>'string'], 'sodium_crypto_sign' => ['string', 'message'=>'string', 'secret_key'=>'string'],
'sodium_crypto_secretstream_xchacha20poly1305_keygen' => ['string'], 'sodium_crypto_sign_detached' => ['string', 'message'=>'string', 'secret_key'=>'string'],
'sodium_crypto_secretstream_xchacha20poly1305_pull' => ['array', '&state'=>'string', 'ciphertext'=>'string', 'additional_data='=>'string'], 'sodium_crypto_sign_ed25519_pk_to_curve25519' => ['string', 'public_key'=>'string'],
'sodium_crypto_secretstream_xchacha20poly1305_push' => ['string', '&state'=>'string', 'message'=>'string', 'additional_data='=>'string', 'tag='=>'int'], 'sodium_crypto_sign_ed25519_sk_to_curve25519' => ['string', 'secret_key'=>'string'],
'sodium_crypto_secretstream_xchacha20poly1305_rekey' => ['void', '&state'=>'string'], 'sodium_crypto_sign_keypair' => ['string'],
'sodium_crypto_shorthash' => ['string', 'message'=>'string', 'key'=>'string'], 'sodium_crypto_sign_keypair_from_secretkey_and_publickey' => ['string', 'secret_key'=>'string', 'public_key'=>'string'],
'sodium_crypto_shorthash_keygen' => ['string'], 'sodium_crypto_sign_open' => ['string|false', 'signed_message'=>'string', 'public_key'=>'string'],
'sodium_crypto_sign' => ['string', 'message'=>'string', 'secret_key'=>'string'], 'sodium_crypto_sign_publickey' => ['string', 'key_pair'=>'string'],
'sodium_crypto_sign_detached' => ['string', 'message'=>'string', 'secret_key'=>'string'], 'sodium_crypto_sign_publickey_from_secretkey' => ['string', 'secret_key'=>'string'],
'sodium_crypto_sign_ed25519_pk_to_curve25519' => ['string', 'public_key'=>'string'], 'sodium_crypto_sign_secretkey' => ['string', 'key_pair'=>'string'],
'sodium_crypto_sign_ed25519_sk_to_curve25519' => ['string', 'secret_key'=>'string'], 'sodium_crypto_sign_seed_keypair' => ['string', 'seed'=>'string'],
'sodium_crypto_sign_keypair' => ['string'], 'sodium_crypto_sign_verify_detached' => ['bool', 'signature'=>'string', 'message'=>'string', 'public_key'=>'string'],
'sodium_crypto_sign_keypair_from_secretkey_and_publickey' => ['string', 'secret_key'=>'string', 'public_key'=>'string'], 'sodium_crypto_stream' => ['string', 'length'=>'int', 'nonce'=>'string', 'key'=>'string'],
'sodium_crypto_sign_open' => ['string|false', 'ciphertext'=>'string', 'public_key'=>'string'], 'sodium_crypto_stream_keygen' => ['string'],
'sodium_crypto_sign_publickey' => ['string', 'key_pair'=>'string'], 'sodium_crypto_stream_xor' => ['string', 'message'=>'string', 'nonce'=>'string', 'key'=>'string'],
'sodium_crypto_sign_publickey_from_secretkey' => ['string', 'secret_key'=>'string'], 'sodium_hex2bin' => ['string', 'string'=>'string', 'ignore='=>'string'],
'sodium_crypto_sign_secretkey' => ['string', 'key_pair'=>'string'], 'sodium_increment' => ['void', '&string'=>'string'],
'sodium_crypto_sign_seed_keypair' => ['string', 'seed'=>'string'], 'sodium_memcmp' => ['int', 'string1'=>'string', 'string2'=>'string'],
'sodium_crypto_sign_verify_detached' => ['bool', 'signature'=>'string', 'message'=>'string', 'public_key'=>'string'], 'sodium_memzero' => ['void', '&string'=>'string'],
'sodium_crypto_stream' => ['string', 'length'=>'int', 'nonce'=>'string', 'key'=>'string'], 'sodium_pad' => ['string', 'string'=>'string', 'block_size'=>'int'],
'sodium_crypto_stream_keygen' => ['string'], 'sodium_unpad' => ['string', 'string'=>'string', 'block_size'=>'int'],
'sodium_crypto_stream_xor' => ['string', 'message'=>'string', 'nonce'=>'string', 'key'=>'string'], 'stream_isatty' => ['bool', 'stream'=>'resource'],
'sodium_hex2bin' => ['string', 'string'=>'string', 'ignore='=>'string'], 'ZipArchive::count' => ['int'],
'sodium_increment' => ['void', '&string'=>'string'], 'ZipArchive::setEncryptionIndex' => ['bool', 'index'=>'int', 'method'=>'int', 'password='=>'string'],
'sodium_memcmp' => ['int', 'string1'=>'string', 'string2'=>'string'], 'ZipArchive::setEncryptionName' => ['bool', 'name'=>'string', 'method'=>'int', 'password='=>'string'],
'sodium_memzero' => ['void', '&string'=>'string'], ],
'sodium_pad' => ['string', 'string'=>'string', 'length'=>'int'], 'changed' => [
'sodium_unpad' => ['string', 'string'=>'string', 'block_size'=>'int'], 'hash_copy' => [
'stream_isatty' => ['bool', 'stream'=>'resource'], 'old' => ['resource', 'context'=>'resource'],
'ZipArchive::count' => ['int'], 'new' => ['HashContext', 'context'=>'HashContext'],
'ZipArchive::setEncryptionIndex' => ['bool', 'index'=>'int', 'method'=>'string', 'password='=>'string'], ],
'ZipArchive::setEncryptionName' => ['bool', 'name'=>'string', 'method'=>'int', 'password='=>'string'], 'hash_final' => [
], 'old' => ['string', 'context'=>'resource', 'binary='=>'bool'],
'old' => [ 'new' => ['string', 'context'=>'HashContext', 'binary='=>'bool'],
'hash_copy' => ['resource', 'context'=>'resource'], ],
'hash_final' => ['string', 'context'=>'resource', 'binary='=>'bool'], 'hash_init' => [
'hash_init' => ['resource', 'algo'=>'string', 'flags='=>'int', 'key='=>'string'], 'old' => ['resource', 'algo'=>'string', 'flags='=>'int', 'key='=>'string'],
'hash_update' => ['bool', 'context'=>'resource', 'data'=>'string'], 'new' => ['HashContext', 'algo'=>'string', 'flags='=>'int', 'key='=>'string'],
'hash_update_file' => ['bool', 'context'=>'resource', 'filename'=>'string', 'stream_context='=>'?resource'], ],
'hash_update_stream' => ['int', 'context'=>'resource', 'stream'=>'resource', 'length='=>'int'], 'hash_update' => [
'SQLite3::openBlob' => ['resource|false', 'table'=>'string', 'column'=>'string', 'rowid'=>'int', 'database='=>'string'], 'old' => ['bool', 'context'=>'resource', 'data'=>'string'],
], 'new' => ['bool', 'context'=>'HashContext', 'data'=>'string'],
],
'hash_update_file' => [
'old' => ['bool', 'context'=>'resource', 'filename'=>'string', 'stream_context='=>'?resource'],
'new' => ['bool', 'context'=>'HashContext', 'filename'=>'string', 'stream_context='=>'?resource'],
],
'hash_update_stream' => [
'old' => ['int', 'context'=>'resource', 'stream'=>'resource', 'length='=>'int'],
'new' => ['int', 'context'=>'HashContext', 'stream'=>'resource', 'length='=>'int'],
],
'SQLite3::openBlob' => [
'old' => ['resource|false', 'table'=>'string', 'column'=>'string', 'rowid'=>'int', 'database='=>'string'],
'new' => ['resource|false', 'table'=>'string', 'column'=>'string', 'rowid'=>'int', 'database='=>'string', 'flags='=>'int'],
],
],
'removed' => [
],
]; ];
@@ -16,43 +16,45 @@
* TODO: Fix GMP signatures for gmp_div in 7.2, update other deltas. * TODO: Fix GMP signatures for gmp_div in 7.2, update other deltas.
*/ */
return [ return [
'new' => [ 'added' => [
'array_key_first' => ['int|string|null', 'array'=>'array'], 'array_key_first' => ['int|string|null', 'array'=>'array'],
'array_key_last' => ['int|string|null', 'array'=>'array'], 'array_key_last' => ['int|string|null', 'array'=>'array'],
'DateTime::createFromImmutable' => ['static', 'object'=>'DateTimeImmutable'], 'DateTime::createFromImmutable' => ['static', 'object'=>'DateTimeImmutable'],
'fpm_get_status' => ['array|false'], 'fpm_get_status' => ['array|false'],
'gmp_binomial' => ['GMP|false', 'n'=>'GMP|string|int', 'k'=>'int'], 'gc_status' => ['array{runs:int,collected:int,threshold:int,roots:int}'],
'gmp_lcm' => ['GMP', 'num1'=>'GMP|string|int', 'num2'=>'GMP|string|int'], 'gmp_binomial' => ['GMP|false', 'n'=>'GMP|string|int', 'k'=>'int'],
'gmp_perfect_power' => ['bool', 'num'=>'GMP|string|int'], 'gmp_kronecker' => ['int', 'num1'=>'GMP|string|int', 'num2'=>'GMP|string|int'],
'gmp_kronecker' => ['int', 'num1'=>'GMP|string|int', 'num2'=>'GMP|string|int'], 'gmp_lcm' => ['GMP', 'num1'=>'GMP|string|int', 'num2'=>'GMP|string|int'],
'gc_status' => ['array{runs:int,collected:int,threshold:int,roots:int}'], 'gmp_perfect_power' => ['bool', 'num'=>'GMP|string|int'],
'hrtime' => ['array{0:int,1:int}|int|false', 'as_number='=>'bool'], 'hrtime' => ['array{0:int,1:int}|int|false', 'as_number='=>'bool'],
'is_countable' => ['bool', 'value'=>'mixed'], 'is_countable' => ['bool', 'value'=>'mixed'],
'JsonException::__clone' => ['void'], 'JsonException::__clone' => ['void'],
'JsonException::__construct' => ['void'], 'JsonException::__construct' => ['void'],
'JsonException::__toString' => ['string'], 'JsonException::__toString' => ['string'],
'JsonException::__wakeup' => ['void'], 'JsonException::__wakeup' => ['void'],
'JsonException::getCode' => ['int'], 'JsonException::getCode' => ['int'],
'JsonException::getFile' => ['string'], 'JsonException::getFile' => ['string'],
'JsonException::getLine' => ['int'], 'JsonException::getLine' => ['int'],
'JsonException::getMessage' => ['string'], 'JsonException::getMessage' => ['string'],
'JsonException::getPrevious' => ['?Throwable'], 'JsonException::getPrevious' => ['?Throwable'],
'JsonException::getTrace' => ['array<int,array<string,mixed>>'], 'JsonException::getTrace' => ['array<int,array<string,mixed>>'],
'JsonException::getTraceAsString' => ['string'], 'JsonException::getTraceAsString' => ['string'],
'ldap_add_ext' => ['resource|false', 'ldap'=>'resource', 'dn'=>'string', 'entry'=>'array', 'controls='=>'array'], 'ldap_add_ext' => ['resource|false', 'ldap'=>'resource', 'dn'=>'string', 'entry'=>'array', 'controls='=>'array'],
'ldap_bind_ext' => ['resource|false', 'ldap'=>'resource', 'dn='=>'string', 'password='=>'?string', 'controls='=>'?array'], 'ldap_bind_ext' => ['resource|false', 'ldap'=>'resource', 'dn='=>'string', 'password='=>'?string', 'controls='=>'?array'],
'ldap_mod_add_ext' => ['resource|false', 'ldap'=>'resource', 'dn'=>'string', 'entry'=>'array', 'controls='=>'array'], 'ldap_mod_add_ext' => ['resource|false', 'ldap'=>'resource', 'dn'=>'string', 'entry'=>'array', 'controls='=>'array'],
'ldap_mod_del_ext' => ['resource|false', 'ldap'=>'resource', 'dn'=>'string', 'entry'=>'array', 'controls='=>'array'], 'ldap_mod_del_ext' => ['resource|false', 'ldap'=>'resource', 'dn'=>'string', 'entry'=>'array', 'controls='=>'array'],
'ldap_mod_replace_ext' => ['resource|false', 'ldap'=>'resource', 'dn'=>'string', 'entry'=>'array', 'controls='=>'array'], 'ldap_mod_replace_ext' => ['resource|false', 'ldap'=>'resource', 'dn'=>'string', 'entry'=>'array', 'controls='=>'array'],
'ldap_rename_ext' => ['resource|false', 'ldap'=>'resource', 'dn'=>'string', 'new_rdn'=>'string', 'new_parent'=>'string', 'delete_old_rdn'=>'bool', 'controls='=>'array'], 'ldap_rename_ext' => ['resource|false', 'ldap'=>'resource', 'dn'=>'string', 'new_rdn'=>'string', 'new_parent'=>'string', 'delete_old_rdn'=>'bool', 'controls='=>'array'],
'net_get_interfaces' => ['array<string,array<string,mixed>>|false'], 'net_get_interfaces' => ['array<string,array<string,mixed>>|false'],
'openssl_pkey_derive' => ['string|false', 'public_key'=>'mixed', 'private_key'=>'mixed', 'key_length='=>'?int'], 'openssl_pkey_derive' => ['string|false', 'public_key'=>'mixed', 'private_key'=>'mixed', 'key_length='=>'?int'],
'session_set_cookie_params\'1' => ['bool', 'lifetime_or_options'=>'array{lifetime?:int,path?:string,domain?:?string,secure?:bool,httponly?:bool}'], 'session_set_cookie_params\'1' => ['bool', 'lifetime_or_options'=>'array{lifetime?:int,path?:string,domain?:?string,secure?:bool,httponly?:bool}'],
'socket_wsaprotocol_info_export' => ['string|false', 'socket'=>'resource', 'process_id'=>'int'], 'socket_wsaprotocol_info_export' => ['string|false', 'socket'=>'resource', 'process_id'=>'int'],
'socket_wsaprotocol_info_import' => ['resource|false', 'info_id'=>'string'], 'socket_wsaprotocol_info_import' => ['resource|false', 'info_id'=>'string'],
'socket_wsaprotocol_info_release' => ['bool', 'info_id'=>'string'], 'socket_wsaprotocol_info_release' => ['bool', 'info_id'=>'string'],
'SplPriorityQueue::isCorrupted' => ['bool'], 'SplPriorityQueue::isCorrupted' => ['bool'],
], ],
'old' => [ 'changed' => [
], ],
'removed' => [
],
]; ];
@@ -14,50 +14,64 @@
* @phan-file-suppress PhanPluginMixedKeyNoKey (read by Phan when analyzing this file) * @phan-file-suppress PhanPluginMixedKeyNoKey (read by Phan when analyzing this file)
*/ */
return [ return [
'new' => [ 'added' => [
'DatePeriod::getRecurrences' => ['int'], 'DatePeriod::getRecurrences' => ['int'],
'FFI::addr' => ['FFI\CData', '&ptr'=>'FFI\CData'], 'FFI::addr' => ['FFI\CData', '&ptr'=>'FFI\CData'],
'FFI::alignof' => ['int', '&ptr'=>'mixed'], 'FFI::alignof' => ['int', '&ptr'=>'mixed'],
'FFI::arrayType' => ['FFI\CType', 'type'=>'string|FFI\CType', 'dimensions'=>'list<int>'], 'FFI::arrayType' => ['FFI\CType', 'type'=>'string|FFI\CType', 'dimensions'=>'list<int>'],
'FFI::cast' => ['FFI\CData', 'type'=>'string|FFI\CType', '&ptr'=>''], 'FFI::cast' => ['FFI\CData', 'type'=>'string|FFI\CType', '&ptr'=>''],
'FFI::cdef' => ['FFI', 'code='=>'string', 'lib='=>'?string'], 'FFI::cdef' => ['FFI', 'code='=>'string', 'lib='=>'?string'],
'FFI::free' => ['void', '&ptr'=>'FFI\CData'], 'FFI::free' => ['void', '&ptr'=>'FFI\CData'],
'FFI::isNull' => ['bool', '&ptr'=>'FFI\CData'], 'FFI::isNull' => ['bool', '&ptr'=>'FFI\CData'],
'FFI::load' => ['FFI', 'filename'=>'string'], 'FFI::load' => ['FFI', 'filename'=>'string'],
'FFI::memcmp' => ['int', '&ptr1'=>'FFI\CData|string', '&ptr2'=>'FFI\CData|string', 'size'=>'int'], 'FFI::memcmp' => ['int', '&ptr1'=>'FFI\CData|string', '&ptr2'=>'FFI\CData|string', 'size'=>'int'],
'FFI::memcpy' => ['void', '&to'=>'FFI\CData', '&from'=>'string|FFI\CData', 'size'=>'int'], 'FFI::memcpy' => ['void', '&to'=>'FFI\CData', '&from'=>'string|FFI\CData', 'size'=>'int'],
'FFI::memset' => ['void', '&ptr'=>'FFI\CData', 'value'=>'int', 'size'=>'int'], 'FFI::memset' => ['void', '&ptr'=>'FFI\CData', 'value'=>'int', 'size'=>'int'],
'FFI::new' => ['FFI\CData', 'type'=>'string|FFI\CType', 'owned='=>'bool', 'persistent='=>'bool'], 'FFI::new' => ['FFI\CData', 'type'=>'string|FFI\CType', 'owned='=>'bool', 'persistent='=>'bool'],
'FFI::scope' => ['FFI', 'name'=>'string'], 'FFI::scope' => ['FFI', 'name'=>'string'],
'FFI::sizeof' => ['int', '&ptr'=>'FFI\CData|FFI\CType'], 'FFI::sizeof' => ['int', '&ptr'=>'FFI\CData|FFI\CType'],
'FFI::string' => ['string', '&ptr'=>'FFI\CData', 'size='=>'int'], 'FFI::string' => ['string', '&ptr'=>'FFI\CData', 'size='=>'int'],
'FFI::typeof' => ['FFI\CType', '&ptr'=>'FFI\CData'], 'FFI::type' => ['FFI\CType', 'type'=>'string'],
'FFI::type' => ['FFI\CType', 'type'=>'string'], 'FFI::typeof' => ['FFI\CType', '&ptr'=>'FFI\CData'],
'get_mangled_object_vars' => ['array', 'object'=>'object'], 'get_mangled_object_vars' => ['array', 'object'=>'object'],
'imagecreatefromtga' => ['resource|false', 'filename'=>'string'], 'imagecreatefromtga' => ['resource|false', 'filename'=>'string'],
'openssl_x509_verify' => ['int', 'certificate'=>'string|resource', 'public_key'=>'string|resource'], 'openssl_x509_verify' => ['int', 'certificate'=>'string|resource', 'public_key'=>'string|resource'],
'password_algos' => ['list<string>'], 'password_algos' => ['list<string>'],
'password_hash' => ['string|false|null', 'password'=>'string', 'algo'=>'?string|?int', 'options='=>'array'], 'pcntl_unshare' => ['bool', 'flags'=>'int'],
'password_needs_rehash' => ['bool', 'hash'=>'string', 'algo'=>'?string|?int', 'options='=>'array'], 'ReflectionReference::fromArrayElement' => ['?ReflectionReference', 'array'=>'array', 'key'=>'int|string'],
'pcntl_unshare' => ['bool', 'flags'=>'int'], 'ReflectionReference::getId' => ['string'],
'preg_replace_callback' => ['string|string[]', 'pattern'=>'string|array', 'callback'=>'callable(array):string', 'subject'=>'string|array', 'limit='=>'int', '&w_count='=>'int', 'flags='=>'int'], 'sapi_windows_set_ctrl_handler' => ['bool', 'handler'=>'callable(int):void', 'add='=>'bool'],
'preg_replace_callback_array' => ['string|string[]', 'pattern'=>'array<string,callable(array):string>', 'subject'=>'string|array', 'limit='=>'int', '&w_count='=>'int', 'flags='=>'int'], 'SQLite3::backup' => ['bool', 'destination'=>'SQLite3', 'sourceDatabase='=>'string', 'destinationDatabase='=>'string'],
'proc_open' => ['resource|false', 'command'=>'string|string[]', 'descriptor_spec'=>'array', '&w_pipes'=>'resource[]', 'cwd='=>'?string', 'env_vars='=>'?array', 'options='=>'array'], 'SQLite3Stmt::getSQL' => ['string', 'expand='=>'bool'],
'ReflectionReference::fromArrayElement' => ['?ReflectionReference', 'array'=>'array', 'key'=>'int|string'], 'WeakReference::create' => ['WeakReference', 'object'=>'object'],
'ReflectionReference::getId' => ['string'], 'WeakReference::get' => ['?object'],
'sapi_windows_set_ctrl_handler' => ['bool', 'handler'=>'callable(int):void', 'add='=>'bool'], ],
'SQLite3Stmt::getSQL' => ['string', 'expand='=>'bool'], 'changed' => [
'SQLite3::backup' => ['bool', 'destination'=>'SQLite3', 'sourceDatabase='=>'string', 'destinationDatabase='=>'string'], 'password_hash' => [
'strip_tags' => ['string', 'string'=>'string', 'allowed_tags='=>'string|string[]'], 'old' => ['string|false|null', 'password'=>'string', 'algo'=>'int', 'options='=>'array'],
'WeakReference::create' => ['WeakReference', 'object'=>'object'], 'new' => ['string|false|null', 'password'=>'string', 'algo'=>'?string|?int', 'options='=>'array'],
'WeakReference::get' => ['?object'], ],
], 'password_needs_rehash' => [
'old' => [ 'old' => ['bool', 'hash'=>'string', 'algo'=>'int', 'options='=>'array'],
'password_hash' => ['string|false|null', 'password'=>'string', 'algo'=>'int', 'options='=>'array'], 'new' => ['bool', 'hash'=>'string', 'algo'=>'?string|?int', 'options='=>'array'],
'password_needs_rehash' => ['bool', 'hash'=>'string', 'algo'=>'int', 'options='=>'array'], ],
'preg_replace_callback' => ['string|string[]', 'pattern'=>'string|array', 'callback'=>'callable(array):string', 'subject'=>'string|array', 'limit='=>'int', '&w_count='=>'int'], 'preg_replace_callback' => [
'preg_replace_callback_array' => ['string|string[]', 'pattern'=>'array<string,callable(array):string>', 'subject'=>'string|array', 'limit='=>'int', '&w_count='=>'int'], 'old' => ['string|string[]', 'pattern'=>'string|array', 'callback'=>'callable(array):string', 'subject'=>'string|array', 'limit='=>'int', '&w_count='=>'int'],
'proc_open' => ['resource|false', 'command'=>'string', 'descriptor_spec'=>'array', '&w_pipes'=>'resource[]', 'cwd='=>'?string', 'env_vars='=>'?array', 'options='=>'array'], 'new' => ['string|string[]', 'pattern'=>'string|array', 'callback'=>'callable(array):string', 'subject'=>'string|array', 'limit='=>'int', '&w_count='=>'int', 'flags='=>'int'],
'strip_tags' => ['string', 'string'=>'string', 'allowed_tags='=>'string'], ],
], 'preg_replace_callback_array' => [
'old' => ['string|string[]', 'pattern'=>'array<string,callable(array):string>', 'subject'=>'string|array', 'limit='=>'int', '&w_count='=>'int'],
'new' => ['string|string[]', 'pattern'=>'array<string,callable(array):string>', 'subject'=>'string|array', 'limit='=>'int', '&w_count='=>'int', 'flags='=>'int'],
],
'proc_open' => [
'old' => ['resource|false', 'command'=>'string', 'descriptor_spec'=>'array', '&w_pipes'=>'resource[]', 'cwd='=>'?string', 'env_vars='=>'?array', 'options='=>'array'],
'new' => ['resource|false', 'command'=>'string|string[]', 'descriptor_spec'=>'array', '&w_pipes'=>'resource[]', 'cwd='=>'?string', 'env_vars='=>'?array', 'options='=>'array'],
],
'strip_tags' => [
'old' => ['string', 'string'=>'string', 'allowed_tags='=>'string'],
'new' => ['string', 'string'=>'string', 'allowed_tags='=>'string|string[]'],
],
],
'removed' => [
],
]; ];
@@ -3,899 +3,1693 @@
/** /**
* This contains the information needed to convert the function signatures for php 8.0 to php 7.4 (and vice versa) * This contains the information needed to convert the function signatures for php 8.0 to php 7.4 (and vice versa)
* *
* This has two sections. * This file has three sections.
* The 'new' section contains function/method names from FunctionSignatureMap (And alternates, if applicable) that do not exist in php7.4 or have different signatures in php 8.0. * The 'added' section contains function/method names from FunctionSignatureMap (And alternates, if applicable) that do not exist in php 7.4
* If they were just updated, the function/method will be present in the 'added' signatures. * The 'removed' section contains the signatures that were removed in php 8.0
* The 'old' signatures contains the signatures that are different in php 7.4. * The 'changed' section contains functions for which the signature has changed for php 8.0.
* Functions are expected to be removed only in major releases of php. * Each function in the 'changed' section has an 'old' and a 'new' section,
* * representing the function as it was in PHP 7.4 and in PHP 8.0, respectively
* TODO: Add remaining functions
* *
* @see FunctionSignatureMap.php * @see FunctionSignatureMap.php
* *
* @phan-file-suppress PhanPluginMixedKeyNoKey (read by Phan when analyzing this file) * @phan-file-suppress PhanPluginMixedKeyNoKey (read by Phan when analyzing this file)
*/ */
return [ return [
'new' => [ 'added' => [
'apache_request_headers' => ['array<string,mixed>'], 'DateTime::createFromInterface' => ['self', 'object'=>'DateTimeInterface'],
'array_combine' => ['associative-array', 'keys'=>'string[]|int[]', 'values'=>'array'], 'DateTimeImmutable::createFromInterface' => ['self', 'object'=>'DateTimeInterface'],
'array_key_exists' => ['bool', 'key'=>'string|int', 'array'=>'array'], 'fdiv' => ['float', 'num1'=>'float', 'num2'=>'float'],
'bcdiv' => ['string', 'num1'=>'string', 'num2'=>'string', 'scale='=>'int'], 'get_debug_type' => ['string', 'value'=>'mixed'],
'bcmod' => ['string', 'num1'=>'string', 'num2'=>'string', 'scale='=>'int'], 'get_resource_id' => ['int', 'resource'=>'resource'],
'bcpowmod' => ['string', 'num'=>'string', 'exponent'=>'string', 'modulus'=>'string', 'scale='=>'int'], 'imagegetinterpolation' => ['int', 'image'=>'GdImage'],
'collator_get_strength' => ['int', 'object'=>'collator'], 'PhpToken::getTokenName' => ['string'],
'com_load_typelib' => ['bool', 'typelib'=>'string', 'case_insensitive='=>'true'], 'PhpToken::is' => ['bool', 'kind'=>'string|int|string[]|int[]'],
'count_chars' => ['array<int,int>|string', 'string'=>'string', 'mode='=>'int'], 'PhpToken::isIgnorable' => ['bool'],
'curl_close' => ['void', 'handle'=>'CurlHandle'], 'PhpToken::tokenize' => ['list<PhpToken>', 'code'=>'string', 'flags='=>'int'],
'curl_copy_handle' => ['CurlHandle', 'handle'=>'CurlHandle'], 'ReflectionClass::getAttributes' => ['list<ReflectionAttribute>', 'name='=>'?string', 'flags='=>'int'],
'curl_errno' => ['int', 'handle'=>'CurlHandle'], 'ReflectionClassConstant::getAttributes' => ['list<ReflectionAttribute>', 'name='=>'?string', 'flags='=>'int'],
'curl_error' => ['string', 'handle'=>'CurlHandle'], 'ReflectionFunctionAbstract::getAttributes' => ['list<ReflectionAttribute>', 'name='=>'?string', 'flags='=>'int'],
'curl_escape' => ['string|false', 'handle'=>'CurlHandle', 'string'=>'string'], 'ReflectionParameter::getAttributes' => ['list<ReflectionAttribute>', 'name='=>'?string', 'flags='=>'int'],
'curl_exec' => ['bool|string', 'handle'=>'CurlHandle'], 'ReflectionProperty::getAttributes' => ['list<ReflectionAttribute>', 'name='=>'?string', 'flags='=>'int'],
'curl_getinfo' => ['mixed', 'handle'=>'CurlHandle', 'option='=>'int'], 'ReflectionUnionType::getTypes' => ['list<ReflectionNamedType>'],
'curl_init' => ['CurlHandle|false', 'url='=>'string'], 'str_contains' => ['bool', 'haystack'=>'string', 'needle'=>'string'],
'curl_multi_add_handle' => ['int', 'multi_handle'=>'CurlMultiHandle', 'handle'=>'CurlHandle'], 'str_ends_with' => ['bool', 'haystack'=>'string', 'needle'=>'string'],
'curl_multi_close' => ['void', 'multi_handle'=>'CurlMultiHandle'], 'str_starts_with' => ['bool', 'haystack'=>'string', 'needle'=>'string'],
'curl_multi_errno' => ['int', 'multi_handle'=>'CurlMultiHandle'], ],
'curl_multi_exec' => ['int', 'multi_handle'=>'CurlMultiHandle', '&w_still_running'=>'int'], 'changed' => [
'curl_multi_getcontent' => ['string', 'handle'=>'CurlHandle'], 'apache_request_headers' => [
'curl_multi_info_read' => ['array|false', 'multi_handle'=>'CurlMultiHandle', '&w_queued_messages='=>'int'], 'old' => ['array<string,mixed>|false'],
'curl_multi_init' => ['CurlMultiHandle'], 'new' => ['array<string,mixed>'],
'curl_multi_remove_handle' => ['int', 'multi_handle'=>'CurlMultiHandle', 'handle'=>'CurlHandle'], ],
'curl_multi_select' => ['int', 'multi_handle'=>'CurlMultiHandle', 'timeout='=>'float'], 'array_combine' => [
'curl_multi_setopt' => ['bool', 'multi_handle'=>'CurlMultiHandle', 'option'=>'int', 'value'=>'mixed'], 'old' => ['associative-array|false', 'keys'=>'string[]|int[]', 'values'=>'array'],
'curl_pause' => ['int', 'handle'=>'CurlHandle', 'flags'=>'int'], 'new' => ['associative-array', 'keys'=>'string[]|int[]', 'values'=>'array'],
'curl_reset' => ['void', 'handle'=>'CurlHandle'], ],
'curl_setopt' => ['bool', 'handle'=>'CurlHandle', 'option'=>'int', 'value'=>'mixed'], 'array_key_exists' => [
'curl_setopt_array' => ['bool', 'handle'=>'CurlHandle', 'options'=>'array'], 'old' => ['bool', 'key'=>'string|int', 'array'=>'array|ArrayObject'],
'curl_share_close' => ['void', 'share_handle'=>'CurlShareHandle'], 'new' => ['bool', 'key'=>'string|int', 'array'=>'array'],
'curl_share_errno' => ['int', 'share_handle'=>'CurlShareHandle'], ],
'curl_share_init' => ['CurlShareHandle'], 'bcdiv' => [
'curl_share_setopt' => ['bool', 'share_handle'=>'CurlShareHandle', 'option'=>'int', 'value'=>'mixed'], 'old' => ['?string', 'num1'=>'string', 'num2'=>'string', 'scale='=>'int'],
'curl_unescape' => ['string|false', 'handle'=>'CurlHandle', 'string'=>'string'], 'new' => ['string', 'num1'=>'string', 'num2'=>'string', 'scale='=>'int'],
'date_add' => ['DateTime', 'object'=>'DateTime', 'interval'=>'DateInterval'], ],
'date_date_set' => ['DateTime', 'object'=>'DateTime', 'year'=>'int', 'month'=>'int', 'day'=>'int'], 'bcmod' => [
'date_diff' => ['DateInterval', 'baseObject'=>'DateTimeInterface', 'targetObject'=>'DateTimeInterface', 'absolute='=>'bool'], 'old' => ['?string', 'num1'=>'string', 'num2'=>'string', 'scale='=>'int'],
'date_format' => ['string', 'object'=>'DateTimeInterface', 'format'=>'string'], 'new' => ['string', 'num1'=>'string', 'num2'=>'string', 'scale='=>'int'],
'date_isodate_set' => ['DateTime', 'object'=>'DateTime', 'year'=>'int', 'week'=>'int', 'dayOfWeek='=>'int'], ],
'date_parse' => ['array<string,mixed>', 'datetime'=>'string'], 'bcpowmod' => [
'date_sub' => ['DateTime', 'object'=>'DateTime', 'interval'=>'DateInterval'], 'old' => ['?string', 'num'=>'string', 'exponent'=>'string', 'modulus'=>'string', 'scale='=>'int'],
'date_sun_info' => ['array<string,bool|int>', 'timestamp'=>'int', 'latitude'=>'float', 'longitude'=>'float'], 'new' => ['string', 'num'=>'string', 'exponent'=>'string', 'modulus'=>'string', 'scale='=>'int'],
'date_time_set' => ['DateTime', 'object'=>'DateTime', 'hour'=>'int', 'minute'=>'int', 'second='=>'int', 'microsecond='=>'int'], ],
'date_timestamp_set' => ['DateTime', 'object'=>'DateTime', 'timestamp'=>'int'], 'collator_get_strength' => [
'date_timezone_set' => ['DateTime', 'object'=>'DateTime', 'timezone'=>'DateTimeZone'], 'old' => ['int|false', 'object'=>'collator'],
'debug_backtrace' => ['list<array>', 'options='=>'int', 'limit='=>'int'], 'new' => ['int', 'object'=>'collator'],
'debug_print_backtrace' => ['void', 'options='=>'int', 'limit='=>'int'], ],
'deflate_add' => ['string|false', 'context'=>'DeflateContext', 'data'=>'string', 'flush_mode='=>'int'], 'com_load_typelib' => [
'deflate_init' => ['DeflateContext|false', 'encoding'=>'int', 'options='=>'array'], 'old' => ['bool', 'typelib'=>'string', 'case_insensitive='=>'bool'],
'dom_import_simplexml' => ['DOMElement|null', 'node'=>'SimpleXMLElement'], 'new' => ['bool', 'typelib'=>'string', 'case_insensitive='=>'true'],
'easter_date' => ['int', 'year='=>'?int', 'mode='=>'int'], ],
'enchant_broker_describe' => ['array', 'broker'=>'EnchantBroker'], 'count_chars' => [
'enchant_broker_dict_exists' => ['bool', 'broker'=>'EnchantBroker', 'tag'=>'string'], 'old' => ['array<int,int>|false|string', 'string'=>'string', 'mode='=>'int'],
'enchant_broker_free' => ['bool', 'broker'=>'EnchantBroker'], 'new' => ['array<int,int>|string', 'string'=>'string', 'mode='=>'int'],
'enchant_broker_free_dict' => ['bool', 'dictionary'=>'EnchantDictionary'], ],
'enchant_broker_get_dict_path' => ['string', 'broker'=>'EnchantBroker', 'type'=>'int'], 'curl_close' => [
'enchant_broker_get_error' => ['string|false', 'broker'=>'EnchantBroker'], 'old' => ['void', 'handle'=>'resource'],
'enchant_broker_init' => ['EnchantBroker|false'], 'new' => ['void', 'handle'=>'CurlHandle'],
'enchant_broker_list_dicts' => ['array', 'broker'=>'EnchantBroker'], ],
'enchant_broker_request_dict' => ['EnchantDictionary|false', 'broker'=>'EnchantBroker', 'tag'=>'string'], 'curl_copy_handle' => [
'enchant_broker_request_pwl_dict' => ['EnchantDictionary|false', 'broker'=>'EnchantBroker', 'filename'=>'string'], 'old' => ['resource', 'handle'=>'resource'],
'enchant_broker_set_dict_path' => ['bool', 'broker'=>'EnchantBroker', 'type'=>'int', 'path'=>'string'], 'new' => ['CurlHandle', 'handle'=>'CurlHandle'],
'enchant_broker_set_ordering' => ['bool', 'broker'=>'EnchantBroker', 'tag'=>'string', 'ordering'=>'string'], ],
'enchant_dict_add_to_personal' => ['void', 'dictionary'=>'EnchantDictionary', 'word'=>'string'], 'curl_errno' => [
'enchant_dict_add_to_session' => ['void', 'dictionary'=>'EnchantDictionary', 'word'=>'string'], 'old' => ['int', 'handle'=>'resource'],
'enchant_dict_check' => ['bool', 'dictionary'=>'EnchantDictionary', 'word'=>'string'], 'new' => ['int', 'handle'=>'CurlHandle'],
'enchant_dict_describe' => ['array', 'dictionary'=>'EnchantDictionary'], ],
'enchant_dict_get_error' => ['string', 'dictionary'=>'EnchantDictionary'], 'curl_error' => [
'enchant_dict_is_in_session' => ['bool', 'dictionary'=>'EnchantDictionary', 'word'=>'string'], 'old' => ['string', 'handle'=>'resource'],
'enchant_dict_quick_check' => ['bool', 'dictionary'=>'EnchantDictionary', 'word'=>'string', '&w_suggestions='=>'array<int,string>'], 'new' => ['string', 'handle'=>'CurlHandle'],
'enchant_dict_store_replacement' => ['void', 'dictionary'=>'EnchantDictionary', 'misspelled'=>'string', 'correct'=>'string'], ],
'enchant_dict_suggest' => ['array', 'dictionary'=>'EnchantDictionary', 'word'=>'string'], 'curl_escape' => [
'fdiv' => ['float', 'num1'=>'float', 'num2'=>'float'], 'old' => ['string|false', 'handle'=>'resource', 'string'=>'string'],
'fpassthru' => ['int', 'stream'=>'resource'], 'new' => ['string|false', 'handle'=>'CurlHandle', 'string'=>'string'],
'get_debug_type' => ['string', 'value'=>'mixed'], ],
'get_resource_id' => ['int', 'resource'=>'resource'], 'curl_exec' => [
'gmdate' => ['string', 'format'=>'string', 'timestamp='=>'int'], 'old' => ['bool|string', 'handle'=>'resource'],
'gmmktime' => ['int|false', 'hour'=>'int', 'minute='=>'int', 'second='=>'int', 'month='=>'int', 'day='=>'int', 'year='=>'int'], 'new' => ['bool|string', 'handle'=>'CurlHandle'],
'gmp_binomial' => ['GMP', 'n'=>'GMP|string|int', 'k'=>'int'], ],
'gmp_export' => ['string', 'num'=>'GMP|string|int', 'word_size='=>'int', 'flags='=>'int'], 'curl_getinfo' => [
'gmp_import' => ['GMP', 'data'=>'string', 'word_size='=>'int', 'flags='=>'int'], 'old' => ['mixed', 'handle'=>'resource', 'option='=>'int'],
'gmp_random' => ['GMP', 'limiter='=>'int'], 'new' => ['mixed', 'handle'=>'CurlHandle', 'option='=>'int'],
'gmp_random_seed' => ['void', 'seed'=>'GMP|string|int'], ],
'gzpassthru' => ['int', 'stream'=>'resource'], 'curl_init' => [
'hash_hkdf' => ['string', 'algo'=>'string', 'key'=>'string', 'length='=>'int', 'info='=>'string', 'salt='=>'string'], 'old' => ['resource|false', 'url='=>'string'],
'imageaffine' => ['false|GdImage', 'image'=>'GdImage', 'affine'=>'array', 'clip='=>'array'], 'new' => ['CurlHandle|false', 'url='=>'string'],
'imagealphablending' => ['bool', 'image'=>'GdImage', 'enable'=>'bool'], ],
'imageantialias' => ['bool', 'image'=>'GdImage', 'enable'=>'bool'], 'curl_multi_add_handle' => [
'imagearc' => ['bool', 'image'=>'GdImage', 'center_x'=>'int', 'center_y'=>'int', 'width'=>'int', 'height'=>'int', 'start_angle'=>'int', 'end_angle'=>'int', 'color'=>'int'], 'old' => ['int', 'multi_handle'=>'resource', 'handle'=>'resource'],
'imagebmp' => ['bool', 'image'=>'GdImage', 'file='=>'null|resource|string', 'compressed='=>'bool'], 'new' => ['int', 'multi_handle'=>'CurlMultiHandle', 'handle'=>'CurlHandle'],
'imagechar' => ['bool', 'image'=>'GdImage', 'font'=>'int', 'x'=>'int', 'y'=>'int', 'char'=>'string', 'color'=>'int'], ],
'imagecharup' => ['bool', 'image'=>'GdImage', 'font'=>'int', 'x'=>'int', 'y'=>'int', 'char'=>'string', 'color'=>'int'], 'curl_multi_close' => [
'imagecolorallocatealpha' => ['int|false', 'image'=>'GdImage', 'red'=>'int', 'green'=>'int', 'blue'=>'int', 'alpha'=>'int'], 'old' => ['void', 'multi_handle'=>'resource'],
'imagecolorallocate' => ['int|false', 'image'=>'GdImage', 'red'=>'int', 'green'=>'int', 'blue'=>'int'], 'new' => ['void', 'multi_handle'=>'CurlMultiHandle'],
'imagecolorat' => ['int|false', 'image'=>'GdImage', 'x'=>'int', 'y'=>'int'], ],
'imagecolorclosestalpha' => ['int|false', 'image'=>'GdImage', 'red'=>'int', 'green'=>'int', 'blue'=>'int', 'alpha'=>'int'], 'curl_multi_errno' => [
'imagecolorclosesthwb' => ['int|false', 'image'=>'GdImage', 'red'=>'int', 'green'=>'int', 'blue'=>'int'], 'old' => ['int', 'multi_handle'=>'resource'],
'imagecolorclosest' => ['int|false', 'image'=>'GdImage', 'red'=>'int', 'green'=>'int', 'blue'=>'int'], 'new' => ['int', 'multi_handle'=>'CurlMultiHandle'],
'imagecolordeallocate' => ['bool', 'image'=>'GdImage', 'color'=>'int'], ],
'imagecolorexactalpha' => ['int|false', 'image'=>'GdImage', 'red'=>'int', 'green'=>'int', 'blue'=>'int', 'alpha'=>'int'], 'curl_multi_exec' => [
'imagecolorexact' => ['int|false', 'image'=>'GdImage', 'red'=>'int', 'green'=>'int', 'blue'=>'int'], 'old' => ['int', 'multi_handle'=>'resource', '&w_still_running'=>'int'],
'imagecolormatch' => ['bool', 'image1'=>'GdImage', 'image2'=>'GdImage'], 'new' => ['int', 'multi_handle'=>'CurlMultiHandle', '&w_still_running'=>'int'],
'imagecolorresolvealpha' => ['int|false', 'image'=>'GdImage', 'red'=>'int', 'green'=>'int', 'blue'=>'int', 'alpha'=>'int'], ],
'imagecolorresolve' => ['int|false', 'image'=>'GdImage', 'red'=>'int', 'green'=>'int', 'blue'=>'int'], 'curl_multi_getcontent' => [
'imagecolorset' => ['void', 'image'=>'GdImage', 'color'=>'int', 'red'=>'int', 'green'=>'int', 'blue'=>'int', 'alpha='=>'int'], 'old' => ['string', 'handle'=>'resource'],
'imagecolorsforindex' => ['array<string,int>|false', 'image'=>'GdImage', 'color'=>'int'], 'new' => ['string', 'handle'=>'CurlHandle'],
'imagecolorstotal' => ['int', 'image'=>'GdImage'], ],
'imagecolortransparent' => ['int|null', 'image'=>'GdImage', 'color='=>'int'], 'curl_multi_info_read' => [
'imageconvolution' => ['bool', 'image'=>'GdImage', 'matrix'=>'array', 'divisor'=>'float', 'offset'=>'float'], 'old' => ['array|false', 'multi_handle'=>'resource', '&w_queued_messages='=>'int'],
'imagecopy' => ['bool', 'dst_image'=>'GdImage', 'src_image'=>'GdImage', 'dst_x'=>'int', 'dst_y'=>'int', 'src_x'=>'int', 'src_y'=>'int', 'src_width'=>'int', 'src_height'=>'int'], 'new' => ['array|false', 'multi_handle'=>'CurlMultiHandle', '&w_queued_messages='=>'int'],
'imagecopymerge' => ['bool', 'dst_image'=>'GdImage', 'src_image'=>'GdImage', 'dst_x'=>'int', 'dst_y'=>'int', 'src_x'=>'int', 'src_y'=>'int', 'src_width'=>'int', 'src_height'=>'int', 'pct'=>'int'], ],
'imagecopymergegray' => ['bool', 'dst_image'=>'GdImage', 'src_image'=>'GdImage', 'dst_x'=>'int', 'dst_y'=>'int', 'src_x'=>'int', 'src_y'=>'int', 'src_width'=>'int', 'src_height'=>'int', 'pct'=>'int'], 'curl_multi_init' => [
'imagecopyresampled' => ['bool', 'dst_image'=>'GdImage', 'src_image'=>'GdImage', 'dst_x'=>'int', 'dst_y'=>'int', 'src_x'=>'int', 'src_y'=>'int', 'dst_width'=>'int', 'dst_height'=>'int', 'src_width'=>'int', 'src_height'=>'int'], 'old' => ['resource'],
'imagecopyresized' => ['bool', 'dst_image'=>'GdImage', 'src_image'=>'GdImage', 'dst_x'=>'int', 'dst_y'=>'int', 'src_x'=>'int', 'src_y'=>'int', 'dst_width'=>'int', 'dst_height'=>'int', 'src_width'=>'int', 'src_height'=>'int'], 'new' => ['CurlMultiHandle'],
'imagecreate' => ['false|GdImage', 'width'=>'int', 'height'=>'int'], ],
'imagecreatefrombmp' => ['false|GdImage', 'filename'=>'string'], 'curl_multi_remove_handle' => [
'imagecreatefromgd2' => ['false|GdImage', 'filename'=>'string'], 'old' => ['int', 'multi_handle'=>'resource', 'handle'=>'resource'],
'imagecreatefromgd2part' => ['false|GdImage', 'filename'=>'string', 'x'=>'int', 'y'=>'int', 'width'=>'int', 'height'=>'int'], 'new' => ['int', 'multi_handle'=>'CurlMultiHandle', 'handle'=>'CurlHandle'],
'imagecreatefromgd' => ['false|GdImage', 'filename'=>'string'], ],
'imagecreatefromgif' => ['false|GdImage', 'filename'=>'string'], 'curl_multi_select' => [
'imagecreatefromjpeg' => ['false|GdImage', 'filename'=>'string'], 'old' => ['int', 'multi_handle'=>'resource', 'timeout='=>'float'],
'imagecreatefrompng' => ['false|GdImage', 'filename'=>'string'], 'new' => ['int', 'multi_handle'=>'CurlMultiHandle', 'timeout='=>'float'],
'imagecreatefromstring' => ['false|GdImage', 'data'=>'string'], ],
'imagecreatefromtga' => ['false|GdImage', 'filename'=>'string'], 'curl_multi_setopt' => [
'imagecreatefromwbmp' => ['false|GdImage', 'filename'=>'string'], 'old' => ['bool', 'multi_handle'=>'resource', 'option'=>'int', 'value'=>'mixed'],
'imagecreatefromwebp' => ['false|GdImage', 'filename'=>'string'], 'new' => ['bool', 'multi_handle'=>'CurlMultiHandle', 'option'=>'int', 'value'=>'mixed'],
'imagecreatefromxbm' => ['false|GdImage', 'filename'=>'string'], ],
'imagecreatefromxpm' => ['false|GdImage', 'filename'=>'string'], 'curl_pause' => [
'imagecreatetruecolor' => ['false|GdImage', 'width'=>'int', 'height'=>'int'], 'old' => ['int', 'handle'=>'resource', 'flags'=>'int'],
'imagecropauto' => ['false|GdImage', 'image'=>'GdImage', 'mode='=>'int', 'threshold='=>'float', 'color='=>'int'], 'new' => ['int', 'handle'=>'CurlHandle', 'flags'=>'int'],
'imagecrop' => ['false|GdImage', 'image'=>'GdImage', 'rectangle'=>'array'], ],
'imagedashedline' => ['bool', 'image'=>'GdImage', 'x1'=>'int', 'y1'=>'int', 'x2'=>'int', 'y2'=>'int', 'color'=>'int'], 'curl_reset' => [
'imagedestroy' => ['bool', 'image'=>'GdImage'], 'old' => ['void', 'handle'=>'resource'],
'imageellipse' => ['bool', 'image'=>'GdImage', 'center_x'=>'int', 'center_y'=>'int', 'width'=>'int', 'height'=>'int', 'color'=>'int'], 'new' => ['void', 'handle'=>'CurlHandle'],
'imagefill' => ['bool', 'image'=>'GdImage', 'x'=>'int', 'y'=>'int', 'color'=>'int'], ],
'imagefilledarc' => ['bool', 'image'=>'GdImage', 'center_x'=>'int', 'center_y'=>'int', 'width'=>'int', 'height'=>'int', 'start_angle'=>'int', 'end_angle'=>'int', 'color'=>'int', 'style'=>'int'], 'curl_setopt' => [
'imagefilledellipse' => ['bool', 'image'=>'GdImage', 'center_x'=>'int', 'center_y'=>'int', 'width'=>'int', 'height'=>'int', 'color'=>'int'], 'old' => ['bool', 'handle'=>'resource', 'option'=>'int', 'value'=>'mixed'],
'imagefilledpolygon' => ['bool', 'image'=>'GdImage', 'points'=>'array', 'num_points_or_color'=>'int', 'color='=>'int'], 'new' => ['bool', 'handle'=>'CurlHandle', 'option'=>'int', 'value'=>'mixed'],
'imagefilledrectangle' => ['bool', 'image'=>'GdImage', 'x1'=>'int', 'y1'=>'int', 'x2'=>'int', 'y2'=>'int', 'color'=>'int'], ],
'imagefilltoborder' => ['bool', 'image'=>'GdImage', 'x'=>'int', 'y'=>'int', 'border_color'=>'int', 'color'=>'int'], 'curl_setopt_array' => [
'imagefilter' => ['bool', 'image'=>'GdImage', 'filter'=>'int', '...args='=>'int', 'arg2='=>'int', 'arg3='=>'int', 'arg4='=>'int'], 'old' => ['bool', 'handle'=>'resource', 'options'=>'array'],
'imageflip' => ['bool', 'image'=>'GdImage', 'mode'=>'int'], 'new' => ['bool', 'handle'=>'CurlHandle', 'options'=>'array'],
'imagefttext' => ['array<int,int>|false', 'image'=>'GdImage', 'size'=>'float', 'angle'=>'float', 'x'=>'int', 'y'=>'int', 'color'=>'int', 'font_filename'=>'string', 'text'=>'string', 'options='=>'array'], ],
'imagegammacorrect' => ['bool', 'image'=>'GdImage', 'input_gamma'=>'float', 'output_gamma'=>'float'], 'curl_share_close' => [
'imagegd2' => ['bool', 'image'=>'GdImage', 'file='=>'string', 'chunk_size='=>'int', 'mode='=>'int'], 'old' => ['void', 'share_handle'=>'resource'],
'imagegd' => ['bool', 'image'=>'GdImage', 'file='=>'string'], 'new' => ['void', 'share_handle'=>'CurlShareHandle'],
'imagegetclip' => ['array<int,int>', 'image'=>'GdImage'], ],
'imagegetinterpolation' => ['int', 'image'=>'GdImage'], 'curl_share_errno' => [
'imagegif' => ['bool', 'image'=>'GdImage', 'file='=>'?string'], 'old' => ['int', 'share_handle'=>'resource'],
'imagegrabscreen' => ['false|GdImage'], 'new' => ['int', 'share_handle'=>'CurlShareHandle'],
'imagegrabwindow' => ['false|GdImage', 'handle'=>'int', 'client_area='=>'bool'], ],
'imageinterlace' => ['int', 'image'=>'GdImage', 'enable='=>'?bool'], 'curl_share_init' => [
'imageistruecolor' => ['bool', 'image'=>'GdImage'], 'old' => ['resource'],
'imagejpeg' => ['bool', 'image'=>'GdImage', 'file='=>'?string', 'quality='=>'int'], 'new' => ['CurlShareHandle'],
'imagelayereffect' => ['bool', 'image'=>'GdImage', 'effect'=>'int'], ],
'imageline' => ['bool', 'image'=>'GdImage', 'x1'=>'int', 'y1'=>'int', 'x2'=>'int', 'y2'=>'int', 'color'=>'int'], 'curl_share_setopt' => [
'imageopenpolygon' => ['bool', 'image'=>'GdImage', 'points'=>'array', 'num_points_or_color'=>'int', 'color='=>'int'], 'old' => ['bool', 'share_handle'=>'resource', 'option'=>'int', 'value'=>'mixed'],
'imagepalettecopy' => ['void', 'dst'=>'GdImage', 'src'=>'GdImage'], 'new' => ['bool', 'share_handle'=>'CurlShareHandle', 'option'=>'int', 'value'=>'mixed'],
'imagepalettetotruecolor' => ['bool', 'image'=>'GdImage'], ],
'imagepng' => ['bool', 'image'=>'GdImage', 'file='=>'?string', 'quality='=>'int', 'filters='=>'int'], 'curl_unescape' => [
'imagepolygon' => ['bool', 'image'=>'GdImage', 'points'=>'array', 'num_points_or_color'=>'int', 'color='=>'int'], 'old' => ['string|false', 'handle'=>'resource', 'string'=>'string'],
'imagerectangle' => ['bool', 'image'=>'GdImage', 'x1'=>'int', 'y1'=>'int', 'x2'=>'int', 'y2'=>'int', 'color'=>'int'], 'new' => ['string|false', 'handle'=>'CurlHandle', 'string'=>'string'],
'imageresolution' => ['array<int,int>|bool', 'image'=>'GdImage', 'resolution_x='=>'int', 'resolution_y='=>'int'], ],
'imagerotate' => ['false|GdImage', 'image'=>'GdImage', 'angle'=>'float', 'background_color'=>'int', 'ignore_transparent='=>'bool'], 'date_add' => [
'imagesavealpha' => ['bool', 'image'=>'GdImage', 'enable'=>'bool'], 'old' => ['DateTime|false', 'object'=>'DateTime', 'interval'=>'DateInterval'],
'imagescale' => ['false|GdImage', 'image'=>'GdImage', 'width'=>'int', 'height='=>'int', 'mode='=>'int'], 'new' => ['DateTime', 'object'=>'DateTime', 'interval'=>'DateInterval'],
'imagesetbrush' => ['bool', 'image'=>'GdImage', 'brush'=>'GdImage'], ],
'imagesetclip' => ['bool', 'image'=>'GdImage', 'x1'=>'int', 'x2'=>'int', 'y1'=>'int', 'y2'=>'int'], 'date_date_set' => [
'imagesetinterpolation' => ['bool', 'image'=>'GdImage', 'method='=>'int'], 'old' => ['DateTime|false', 'object'=>'DateTime', 'year'=>'int', 'month'=>'int', 'day'=>'int'],
'imagesetpixel' => ['bool', 'image'=>'GdImage', 'x'=>'int', 'y'=>'int', 'color'=>'int'], 'new' => ['DateTime', 'object'=>'DateTime', 'year'=>'int', 'month'=>'int', 'day'=>'int'],
'imagesetstyle' => ['bool', 'image'=>'GdImage', 'style'=>'non-empty-array'], ],
'imagesetthickness' => ['bool', 'image'=>'GdImage', 'thickness'=>'int'], 'date_diff' => [
'imagesettile' => ['bool', 'image'=>'GdImage', 'tile'=>'GdImage'], 'old' => ['DateInterval|false', 'baseObject'=>'DateTimeInterface', 'targetObject'=>'DateTimeInterface', 'absolute='=>'bool'],
'imagestring' => ['bool', 'image'=>'GdImage', 'font'=>'int', 'x'=>'int', 'y'=>'int', 'string'=>'string', 'color'=>'int'], 'new' => ['DateInterval', 'baseObject'=>'DateTimeInterface', 'targetObject'=>'DateTimeInterface', 'absolute='=>'bool'],
'imagestringup' => ['bool', 'image'=>'GdImage', 'font'=>'int', 'x'=>'int', 'y'=>'int', 'string'=>'string', 'color'=>'int'], ],
'imagesx' => ['int', 'image'=>'GdImage'], 'date_format' => [
'imagesy' => ['int', 'image'=>'GdImage'], 'old' => ['string|false', 'object'=>'DateTimeInterface', 'format'=>'string'],
'imagetruecolortopalette' => ['bool', 'image'=>'GdImage', 'dither'=>'bool', 'num_colors'=>'int'], 'new' => ['string', 'object'=>'DateTimeInterface', 'format'=>'string'],
'imagettftext' => ['false|array<int,int>', 'image'=>'GdImage', 'size'=>'float', 'angle'=>'float', 'x'=>'int', 'y'=>'int', 'color'=>'int', 'font_filename'=>'string', 'text'=>'string', 'options='=>'array'], ],
'imagewbmp' => ['bool', 'image'=>'GdImage', 'file='=>'?string', 'foreground_color='=>'int'], 'date_isodate_set' => [
'imagewebp' => ['bool', 'image'=>'GdImage', 'file='=>'?string', 'quality='=>'int'], 'old' => ['DateTime|false', 'object'=>'DateTime', 'year'=>'int', 'week'=>'int', 'dayOfWeek='=>'int'],
'imagexbm' => ['bool', 'image'=>'GdImage', 'filename'=>'?string', 'foreground_color='=>'int'], 'new' => ['DateTime', 'object'=>'DateTime', 'year'=>'int', 'week'=>'int', 'dayOfWeek='=>'int'],
'imap_mailboxmsginfo' => ['stdClass', 'imap'=>'resource'], ],
'inflate_add' => ['string|false', 'context'=>'InflateContext', 'data'=>'string', 'flush_mode='=>'int'], 'date_parse' => [
'inflate_get_read_len' => ['int', 'context'=>'InflateContext'], 'old' => ['array<string,mixed>|false', 'datetime'=>'string'],
'inflate_get_status' => ['int', 'context'=>'InflateContext'], 'new' => ['array<string,mixed>', 'datetime'=>'string'],
'inflate_init' => ['InflateContext|false', 'encoding'=>'int', 'options='=>'array'], ],
'ldap_count_entries' => ['int', 'ldap'=>'resource', 'result'=>'resource'], 'date_sub' => [
'ldap_get_attributes' => ['array', 'ldap'=>'resource', 'entry'=>'resource'], 'old' => ['DateTime|false', 'object'=>'DateTime', 'interval'=>'DateInterval'],
'mb_convert_case' => ['string', 'string'=>'string', 'mode'=>'int', 'encoding='=>'string'], 'new' => ['DateTime', 'object'=>'DateTime', 'interval'=>'DateInterval'],
'mb_convert_kana' => ['string', 'string'=>'string', 'mode='=>'string', 'encoding='=>'string'], ],
'mb_decode_numericentity' => ['string', 'string'=>'string', 'map'=>'array', 'encoding='=>'string'], 'date_sun_info' => [
'mb_encode_mimeheader' => ['string', 'string'=>'string', 'charset='=>'string', 'transfer_encoding='=>'string', 'newline='=>'string', 'indent='=>'int'], 'old' => ['array<string,bool|int>|false', 'timestamp'=>'int', 'latitude'=>'float', 'longitude'=>'float'],
'mb_encode_numericentity' => ['string', 'string'=>'string', 'map'=>'array', 'encoding='=>'string', 'hex='=>'bool'], 'new' => ['array<string,bool|int>', 'timestamp'=>'int', 'latitude'=>'float', 'longitude'=>'float'],
'mb_encoding_aliases' => ['list<string>', 'encoding'=>'string'], ],
'mb_ereg' => ['bool', 'pattern'=>'string', 'string'=>'string', '&w_matches='=>'array'], 'date_time_set' => [
'mb_eregi' => ['bool', 'pattern'=>'string', 'string'=>'string', '&w_matches='=>'array'], 'old' => ['DateTime|false', 'object'=>'DateTime', 'hour'=>'int', 'minute'=>'int', 'second='=>'int', 'microsecond='=>'int'],
'mb_scrub' => ['string', 'string'=>'string', 'encoding='=>'string'], 'new' => ['DateTime', 'object'=>'DateTime', 'hour'=>'int', 'minute'=>'int', 'second='=>'int', 'microsecond='=>'int'],
'mb_strcut' => ['string', 'string'=>'string', 'start'=>'int', 'length='=>'int', 'encoding='=>'string'], ],
'mb_strimwidth' => ['string', 'string'=>'string', 'start'=>'int', 'width'=>'int', 'trim_marker='=>'string', 'encoding='=>'string'], 'date_timestamp_set' => [
'mb_strlen' => ['int', 'string'=>'string', 'encoding='=>'string'], 'old' => ['DateTime|false', 'object'=>'DateTime', 'timestamp'=>'int'],
'mb_strtolower' => ['string', 'string'=>'string', 'encoding='=>'string'], 'new' => ['DateTime', 'object'=>'DateTime', 'timestamp'=>'int'],
'mb_strtoupper' => ['string', 'string'=>'string', 'encoding='=>'string'], ],
'mb_strwidth' => ['int', 'string'=>'string', 'encoding='=>'string'], 'date_timezone_set' => [
'mb_substr' => ['string', 'string'=>'string', 'start'=>'int', 'length='=>'?int', 'encoding='=>'string'], 'old' => ['DateTime|false', 'object'=>'DateTime', 'timezone'=>'DateTimeZone'],
'mb_substr_count' => ['int', 'haystack'=>'string', 'needle'=>'string', 'encoding='=>'string'], 'new' => ['DateTime', 'object'=>'DateTime', 'timezone'=>'DateTimeZone'],
'mktime' => ['int|false', 'hour'=>'int', 'minute='=>'int', 'second='=>'int', 'month='=>'int', 'day='=>'int', 'year='=>'int'], ],
'msg_get_queue' => ['SysvMessageQueue', 'key'=>'int', 'permissions='=>'int'], 'debug_backtrace' => [
'msg_remove_queue' => ['bool', 'queue'=>'SysvMessageQueue'], 'old' => ['list<array>', 'options='=>'int|bool', 'limit='=>'int'],
'msg_send' => ['bool', 'queue'=>'SysvMessageQueue', 'message_type'=>'int', 'message'=>'array|object|bool|float|int|string|null', 'serialize='=>'bool', 'blocking='=>'bool', '&w_error_code='=>'int'], 'new' => ['list<array>', 'options='=>'int', 'limit='=>'int'],
'msg_set_queue' => ['bool', 'queue'=>'SysvMessageQueue', 'data'=>'array'], ],
'msg_stat_queue' => ['array', 'queue'=>'SysvMessageQueue'], 'debug_print_backtrace' => [
'mysqli_fetch_fields' => ['array<int,object>', 'result'=>'mysqli_result'], 'old' => ['void', 'options='=>'int|bool', 'limit='=>'int'],
'mysqli_get_client_stats' => ['array'], 'new' => ['void', 'options='=>'int', 'limit='=>'int'],
'mysqli_get_connection_stats' => ['array', 'mysql'=>'mysqli'], ],
'mysqli_stmt_attr_get' => ['int', 'statement'=>'mysqli_stmt', 'attribute'=>'int'], 'deflate_add' => [
'numfmt_create' => ['NumberFormatter|null', 'locale'=>'string', 'style'=>'int', 'pattern='=>'string'], 'old' => ['string|false', 'context'=>'resource', 'data'=>'string', 'flush_mode='=>'int'],
'ob_implicit_flush' => ['void', 'enable='=>'bool'], 'new' => ['string|false', 'context'=>'DeflateContext', 'data'=>'string', 'flush_mode='=>'int'],
'oci_collection_append' => ['bool', 'collection'=>'OCICollection', 'value'=>'string'], ],
'oci_collection_assign' => ['bool', 'to'=>'OCICollection', 'from'=>'OCICollection'], 'deflate_init' => [
'oci_collection_element_assign' => ['bool', 'collection'=>'OCICollection', 'index'=>'int', 'value'=>'string'], 'old' => ['resource|false', 'encoding'=>'int', 'options='=>'array'],
'oci_collection_element_get' => ['string', 'collection'=>'OCICollection', 'index'=>'int'], 'new' => ['DeflateContext|false', 'encoding'=>'int', 'options='=>'array'],
'oci_collection_max' => ['int', 'collection'=>'OCICollection'], ],
'oci_collection_size' => ['int', 'collection'=>'OCICollection'], 'dom_import_simplexml' => [
'oci_collection_trim' => ['bool', 'collection'=>'OCICollection', 'num'=>'int'], 'old' => ['DOMElement|false|null', 'node'=>'SimpleXMLElement'],
'oci_fetch_all' => ['int', 'statement'=>'resource', '&w_output'=>'array', 'offset='=>'int', 'limit='=>'int', 'flags='=>'int'], 'new' => ['DOMElement|null', 'node'=>'SimpleXMLElement'],
'oci_free_collection' => ['bool', 'collection'=>'OCICollection'], ],
'oci_free_descriptor' => ['bool', 'lob'=>'OCILob'], 'easter_date' => [
'oci_new_descriptor' => ['?OCILob', 'connection'=>'resource', 'type='=>'int'], 'old' => ['int', 'year='=>'int', 'mode='=>'int'],
'openssl_cipher_iv_length' => ['int|false', 'cipher_algo'=>'string'], 'new' => ['int', 'year='=>'?int', 'mode='=>'int'],
'openssl_csr_export' => ['bool', 'csr'=>'string|OpenSSLCertificateSigningRequest', '&w_output'=>'OpenSSLAsymmetricKey', 'no_text='=>'bool'], ],
'openssl_csr_export_to_file' => ['bool', 'csr'=>'string|OpenSSLCertificateSigningRequest', 'output_filename'=>'string', 'no_text='=>'bool'], 'enchant_broker_describe' => [
'openssl_csr_get_public_key' => ['OpenSSLAsymmetricKey|false', 'csr'=>'string|OpenSSLCertificateSigningRequest', 'short_names='=>'bool'], 'old' => ['array', 'broker'=>'resource'],
'openssl_csr_get_subject' => ['array|false', 'csr'=>'string|OpenSSLCertificateSigningRequest', 'short_names='=>'bool'], 'new' => ['array', 'broker'=>'EnchantBroker'],
'openssl_csr_new' => ['OpenSSLCertificateSigningRequest|false', 'distinguished_names'=>'array', '&w_private_key'=>'OpenSSLAsymmetricKey', 'options='=>'array', 'extra_attributes='=>'array'], ],
'openssl_csr_sign' => ['OpenSSLCertificate|false', 'csr'=>'string|OpenSSLCertificateSigningRequest', 'ca_certificate'=>'string|OpenSSLCertificate|null', 'private_key'=>'string|OpenSSLAsymmetricKey|OpenSSLCertificate|array', 'days'=>'int', 'options='=>'array', 'serial='=>'int'], 'enchant_broker_dict_exists' => [
'openssl_decrypt' => ['string|false', 'data'=>'string', 'cipher_algo'=>'string', 'passphrase'=>'string', 'options='=>'int', 'iv='=>'string', 'tag='=>'string', 'aad='=>'string'], 'old' => ['bool', 'broker'=>'resource', 'tag'=>'string'],
'openssl_dh_compute_key' => ['string|false', 'public_key'=>'string', 'private_key'=>'OpenSSLAsymmetricKey'], 'new' => ['bool', 'broker'=>'EnchantBroker', 'tag'=>'string'],
'openssl_digest' => ['string|false', 'data'=>'string', 'digest_algo'=>'string', 'binary='=>'bool'], ],
'openssl_encrypt' => ['string|false', 'data'=>'string', 'cipher_algo'=>'string', 'passphrase'=>'string', 'options='=>'int', 'iv='=>'string', '&w_tag='=>'string', 'aad='=>'string', 'tag_length='=>'int'], 'enchant_broker_free' => [
'openssl_error_string' => ['string|false'], 'old' => ['bool', 'broker'=>'resource'],
'openssl_free_key' => ['void', 'key'=>'OpenSSLAsymmetricKey'], 'new' => ['bool', 'broker'=>'EnchantBroker'],
'openssl_get_cert_locations' => ['array'], ],
'openssl_get_cipher_methods' => ['array', 'aliases='=>'bool'], 'enchant_broker_free_dict' => [
'openssl_get_curve_names' => ['list<string>'], 'old' => ['bool', 'dictionary'=>'resource'],
'openssl_get_md_methods' => ['array', 'aliases='=>'bool'], 'new' => ['bool', 'dictionary'=>'EnchantDictionary'],
'openssl_get_privatekey' => ['OpenSSLAsymmetricKey|false', 'private_key'=>'string', 'passphrase='=>'string'], ],
'openssl_get_publickey' => ['OpenSSLAsymmetricKey|false', 'public_key'=>'OpenSSLAsymmetricKey|OpenSSLCertificate|array|string'], 'enchant_broker_get_dict_path' => [
'openssl_open' => ['bool', 'data'=>'string', '&w_output'=>'string', 'encrypted_key'=>'string', 'private_key'=>'OpenSSLAsymmetricKey|OpenSSLCertificate|array|string', 'cipher_algo'=>'string', 'iv='=>'string'], 'old' => ['string', 'broker'=>'resource', 'type'=>'int'],
'openssl_pbkdf2' => ['string|false', 'password'=>'string', 'salt'=>'string', 'key_length'=>'int', 'iterations'=>'int', 'digest_algo='=>'string'], 'new' => ['string', 'broker'=>'EnchantBroker', 'type'=>'int'],
'openssl_pkcs12_export' => ['bool', 'certificate'=>'string|OpenSSLCertificate', '&w_output'=>'string', 'private_key'=>'OpenSSLAsymmetricKey|OpenSSLCertificate|array|string', 'passphrase'=>'string', 'options='=>'array'], ],
'openssl_pkcs12_export_to_file' => ['bool', 'certificate'=>'string|OpenSSLCertificate', 'output_filename'=>'string', 'private_key'=>'OpenSSLAsymmetricKey|OpenSSLCertificate|array|string', 'passphrase'=>'string', 'options='=>'array'], 'enchant_broker_get_error' => [
'openssl_pkcs12_read' => ['bool', 'pkcs12'=>'string', '&w_certificates'=>'array', 'passphrase'=>'string'], 'old' => ['string|false', 'broker'=>'resource'],
'openssl_pkcs7_decrypt' => ['bool', 'input_filename'=>'string', 'output_filename'=>'string', 'certificate'=>'OpenSSLCertificate|string', 'private_key='=>'OpenSSLAsymmetricKey|OpenSSLCertificate|array|null|string'], 'new' => ['string|false', 'broker'=>'EnchantBroker'],
'openssl_pkcs7_encrypt' => ['bool', 'input_filename'=>'string', 'output_filename'=>'string', 'certificate'=>'OpenSSLCertificate|array|string', 'headers'=>'array', 'flags='=>'int', 'cipher_algo='=>'int'], ],
'openssl_pkcs7_read' => ['bool', 'input_filename'=>'string', '&w_certificates'=>'array'], 'enchant_broker_init' => [
'openssl_pkcs7_sign' => ['bool', 'input_filename'=>'string', 'output_filename'=>'string', 'certificate'=>'OpenSSLCertificate|string', 'private_key'=>'OpenSSLAsymmetricKey|OpenSSLCertificate|array|string', 'headers'=>'array', 'flags='=>'int', 'untrusted_certificates_filename='=>'string'], 'old' => ['resource|false'],
'openssl_pkcs7_verify' => ['bool|int', 'input_filename'=>'string', 'flags'=>'int', 'signers_certificates_filename='=>'string', 'ca_info='=>'array', 'untrusted_certificates_filename='=>'string', 'content='=>'string', 'output_filename='=>'string'], 'new' => ['EnchantBroker|false'],
'openssl_pkey_derive' => ['string|false', 'public_key'=>'OpenSSLAsymmetricKey|OpenSSLCertificate|array|string', 'private_key'=>'OpenSSLAsymmetricKey|OpenSSLCertificate|array|string', 'key_length='=>'int'], ],
'openssl_pkey_export' => ['bool', 'key'=>'OpenSSLAsymmetricKey|OpenSSLCertificate|array|string', '&w_output'=>'string', 'passphrase='=>'?string', 'options='=>'array'], 'enchant_broker_list_dicts' => [
'openssl_pkey_export_to_file' => ['bool', 'key'=>'OpenSSLAsymmetricKey|OpenSSLCertificate|array|string', 'output_filename'=>'string', 'passphrase='=>'?string', 'options='=>'array'], 'old' => ['array', 'broker'=>'resource'],
'openssl_pkey_free' => ['void', 'key'=>'OpenSSLAsymmetricKey'], 'new' => ['array', 'broker'=>'EnchantBroker'],
'openssl_pkey_get_details' => ['array|false', 'key'=>'OpenSSLAsymmetricKey'], ],
'openssl_pkey_get_private' => ['OpenSSLAsymmetricKey|false', 'private_key'=>'string', 'passphrase='=>'string'], 'enchant_broker_request_dict' => [
'openssl_pkey_get_public' => ['OpenSSLAsymmetricKey|false', 'public_key'=>'OpenSSLAsymmetricKey|OpenSSLCertificate|array|string|string'], 'old' => ['resource|false', 'broker'=>'resource', 'tag'=>'string'],
'openssl_pkey_new' => ['OpenSSLAsymmetricKey|false', 'options='=>'array'], 'new' => ['EnchantDictionary|false', 'broker'=>'EnchantBroker', 'tag'=>'string'],
'openssl_private_decrypt' => ['bool', 'data'=>'string', '&w_decrypted_data'=>'string', 'private_key'=>'OpenSSLAsymmetricKey|OpenSSLCertificate|array|string', 'padding='=>'int'], ],
'openssl_private_encrypt' => ['bool', 'data'=>'string', '&w_encrypted_data'=>'string', 'private_key'=>'OpenSSLAsymmetricKey|OpenSSLCertificate|array|string', 'padding='=>'int'], 'enchant_broker_request_pwl_dict' => [
'openssl_public_decrypt' => ['bool', 'data'=>'string', '&w_decrypted_data'=>'string', 'public_key'=>'OpenSSLAsymmetricKey|OpenSSLCertificate|array|string', 'padding='=>'int'], 'old' => ['resource|false', 'broker'=>'resource', 'filename'=>'string'],
'openssl_public_encrypt' => ['bool', 'data'=>'string', '&w_encrypted_data'=>'string', 'public_key'=>'OpenSSLAsymmetricKey|OpenSSLCertificate|array|string', 'padding='=>'int'], 'new' => ['EnchantDictionary|false', 'broker'=>'EnchantBroker', 'filename'=>'string'],
'openssl_random_pseudo_bytes' => ['string', 'length'=>'int', '&w_strong_result='=>'bool'], ],
'openssl_seal' => ['int|false', 'data'=>'string', '&w_sealed_data'=>'string', '&rw_encrypted_keys'=>'array', 'public_key'=>'array', 'cipher_algo'=>'string', '&iv='=>'string'], 'enchant_broker_set_dict_path' => [
'openssl_sign' => ['bool', 'data'=>'string', '&w_signature'=>'string', 'private_key'=>'OpenSSLAsymmetricKey|OpenSSLCertificate|array|string', 'algorithm='=>'int|string'], 'old' => ['bool', 'broker'=>'resource', 'type'=>'int', 'path'=>'string'],
'openssl_spki_export' => ['false|string', 'spki'=>'string'], 'new' => ['bool', 'broker'=>'EnchantBroker', 'type'=>'int', 'path'=>'string'],
'openssl_spki_export_challenge' => ['false|string', 'spki'=>'string'], ],
'openssl_spki_new' => ['false|string', 'private_key'=>'OpenSSLAsymmetricKey', 'challenge'=>'string', 'digest_algo='=>'int'], 'enchant_broker_set_ordering' => [
'openssl_spki_verify' => ['bool', 'spki'=>'string'], 'old' => ['bool', 'broker'=>'resource', 'tag'=>'string', 'ordering'=>'string'],
'openssl_verify' => ['int', 'data'=>'string', 'signature'=>'string', 'public_key'=>'OpenSSLAsymmetricKey|OpenSSLCertificate|array|string', 'algorithm='=>'int|string'], 'new' => ['bool', 'broker'=>'EnchantBroker', 'tag'=>'string', 'ordering'=>'string'],
'openssl_x509_check_private_key' => ['bool', 'certificate'=>'OpenSSLCertificate|string', 'private_key'=>'OpenSSLAsymmetricKey|OpenSSLCertificate|array|string'], ],
'openssl_x509_checkpurpose' => ['bool|int', 'certificate'=>'string|OpenSSLCertificate', 'purpose'=>'int', 'ca_info='=>'array', 'untrusted_certificates_file='=>'string'], 'enchant_dict_add_to_personal' => [
'openssl_x509_export' => ['bool', 'certificate'=>'string|OpenSSLCertificate', '&w_output'=>'string', 'no_text='=>'bool'], 'old' => ['void', 'dictionary'=>'resource', 'word'=>'string'],
'openssl_x509_export_to_file' => ['bool', 'certificate'=>'string|OpenSSLCertificate', 'output_filename'=>'string', 'no_text='=>'bool'], 'new' => ['void', 'dictionary'=>'EnchantDictionary', 'word'=>'string'],
'openssl_x509_fingerprint' => ['string|false', 'certificate'=>'string|OpenSSLCertificate', 'digest_algo='=>'string', 'binary='=>'bool'], ],
'openssl_x509_free' => ['void', 'certificate'=>'OpenSSLCertificate'], 'enchant_dict_add_to_session' => [
'openssl_x509_parse' => ['array|false', 'certificate'=>'string|OpenSSLCertificate', 'short_names='=>'bool'], 'old' => ['void', 'dictionary'=>'resource', 'word'=>'string'],
'openssl_x509_read' => ['OpenSSLCertificate|false', 'certificate'=>'string|OpenSSLCertificate'], 'new' => ['void', 'dictionary'=>'EnchantDictionary', 'word'=>'string'],
'openssl_x509_verify' => ['int', 'certificate'=>'OpenSSLCertificate|string', 'public_key'=>'OpenSSLAsymmetricKey|OpenSSLCertificate|array|string'], ],
'parse_str' => ['void', 'string'=>'string', '&w_result'=>'array'], 'enchant_dict_check' => [
'password_hash' => ['string', 'password'=>'string', 'algo'=>'?string|?int', 'options='=>'array'], 'old' => ['bool', 'dictionary'=>'resource', 'word'=>'string'],
'PhpToken::getTokenName' => ['string'], 'new' => ['bool', 'dictionary'=>'EnchantDictionary', 'word'=>'string'],
'PhpToken::is' => ['bool', 'kind'=>'string|int|string[]|int[]'], ],
'PhpToken::isIgnorable' => ['bool'], 'enchant_dict_describe' => [
'PhpToken::tokenize' => ['list<PhpToken>', 'code'=>'string', 'flags='=>'int'], 'old' => ['array', 'dictionary'=>'resource'],
'pg_fetch_all' => ['array<int,array>', 'result'=>'resource', 'mode='=>'int'], 'new' => ['array', 'dictionary'=>'EnchantDictionary'],
'pg_fetch_all_columns' => ['array<int,?string>', 'result'=>'resource', 'field='=>'int'], ],
'proc_get_status' => ['array<string,int|string|bool>', 'process'=>'resource'], 'enchant_dict_get_error' => [
'ReflectionClass::getAttributes' => ['list<ReflectionAttribute>', 'name='=>'?string', 'flags='=>'int'], 'old' => ['string', 'dictionary'=>'resource'],
'ReflectionClassConstant::getAttributes' => ['list<ReflectionAttribute>', 'name='=>'?string', 'flags='=>'int'], 'new' => ['string', 'dictionary'=>'EnchantDictionary'],
'ReflectionFunctionAbstract::getAttributes' => ['list<ReflectionAttribute>', 'name='=>'?string', 'flags='=>'int'], ],
'ReflectionParameter::getAttributes' => ['list<ReflectionAttribute>', 'name='=>'?string', 'flags='=>'int'], 'enchant_dict_is_in_session' => [
'ReflectionProperty::getAttributes' => ['list<ReflectionAttribute>', 'name='=>'?string', 'flags='=>'int'], 'old' => ['bool', 'dictionary'=>'resource', 'word'=>'string'],
'sem_acquire' => ['bool', 'semaphore'=>'SysvSemaphore', 'non_blocking='=>'bool'], 'new' => ['bool', 'dictionary'=>'EnchantDictionary', 'word'=>'string'],
'sem_get' => ['SysvSemaphore|false', 'key'=>'int', 'max_acquire='=>'int', 'permissions='=>'int', 'auto_release='=>'bool'], ],
'sem_release' => ['bool', 'semaphore'=>'SysvSemaphore'], 'enchant_dict_quick_check' => [
'sem_remove' => ['bool', 'semaphore'=>'SysvSemaphore'], 'old' => ['bool', 'dictionary'=>'resource', 'word'=>'string', '&w_suggestions='=>'array<int,string>'],
'shm_attach' => ['SysvSharedMemory', 'key'=>'int', 'size='=>'int', 'permissions='=>'int'], 'new' => ['bool', 'dictionary'=>'EnchantDictionary', 'word'=>'string', '&w_suggestions='=>'array<int,string>'],
'shm_detach' => ['bool', 'shm'=>'SysvSharedMemory'], ],
'shm_get_var' => ['mixed', 'shm'=>'SysvSharedMemory', 'key'=>'int'], 'enchant_dict_store_replacement' => [
'shm_has_var' => ['bool', 'shm'=>'SysvSharedMemory', 'key'=>'int'], 'old' => ['void', 'dictionary'=>'resource', 'misspelled'=>'string', 'correct'=>'string'],
'shm_put_var' => ['bool', 'shm'=>'SysvSharedMemory', 'key'=>'int', 'value'=>'mixed'], 'new' => ['void', 'dictionary'=>'EnchantDictionary', 'misspelled'=>'string', 'correct'=>'string'],
'shm_remove' => ['bool', 'shm'=>'SysvSharedMemory'], ],
'shm_remove_var' => ['bool', 'shm'=>'SysvSharedMemory', 'key'=>'int'], 'enchant_dict_suggest' => [
'shmop_close' => ['void', 'shmop'=>'Shmop'], 'old' => ['array', 'dictionary'=>'resource', 'word'=>'string'],
'shmop_delete' => ['bool', 'shmop'=>'Shmop'], 'new' => ['array', 'dictionary'=>'EnchantDictionary', 'word'=>'string'],
'shmop_open' => ['Shmop', 'key'=>'int', 'mode'=>'string', 'permissions'=>'int', 'size'=>'int'], ],
'shmop_read' => ['string', 'shmop'=>'Shmop', 'offset'=>'int', 'size'=>'int'], 'fpassthru' => [
'shmop_size' => ['int', 'shmop'=>'Shmop'], 'old' => ['int|false', 'stream'=>'resource'],
'shmop_write' => ['int', 'shmop'=>'Shmop', 'data'=>'string', 'offset'=>'int'], 'new' => ['int', 'stream'=>'resource'],
'simplexml_import_dom' => ['SimpleXMLElement', 'node'=>'DOMNode', 'class_name='=>'string'], ],
'sleep' => ['int', 'seconds'=>'int'], 'gmdate' => [
'socket_accept' => ['Socket|false', 'socket'=>'Socket'], 'old' => ['string|false', 'format'=>'string', 'timestamp='=>'int'],
'socket_addrinfo_bind' => ['Socket|false', 'address'=>'AddressInfo'], 'new' => ['string', 'format'=>'string', 'timestamp='=>'int'],
'socket_addrinfo_connect' => ['Socket|false', 'address'=>'AddressInfo'], ],
'socket_addrinfo_explain' => ['array', 'address'=>'AddressInfo'], 'gmp_binomial' => [
'socket_addrinfo_lookup' => ['AddressInfo[]', 'host'=>'string', 'service='=>'?string', 'hints='=>'array'], 'old' => ['GMP|false', 'n'=>'GMP|string|int', 'k'=>'int'],
'socket_bind' => ['bool', 'socket'=>'Socket', 'address'=>'string', 'port='=>'int'], 'new' => ['GMP', 'n'=>'GMP|string|int', 'k'=>'int'],
'socket_clear_error' => ['void', 'socket='=>'Socket'], ],
'socket_close' => ['void', 'socket'=>'Socket'], 'gmp_export' => [
'socket_connect' => ['bool', 'socket'=>'Socket', 'address'=>'string', 'port='=>'int'], 'old' => ['string|false', 'num'=>'GMP|string|int', 'word_size='=>'int', 'flags='=>'int'],
'socket_create' => ['Socket|false', 'domain'=>'int', 'type'=>'int', 'protocol'=>'int'], 'new' => ['string', 'num'=>'GMP|string|int', 'word_size='=>'int', 'flags='=>'int'],
'socket_create_listen' => ['Socket|false', 'port'=>'int', 'backlog='=>'int'], ],
'socket_create_pair' => ['bool', 'domain'=>'int', 'type'=>'int', 'protocol'=>'int', '&w_pair'=>'Socket[]'], 'gmp_import' => [
'socket_export_stream' => ['resource|false', 'socket'=>'Socket'], 'old' => ['GMP|false', 'data'=>'string', 'word_size='=>'int', 'flags='=>'int'],
'socket_get_option' => ['array|false|int', 'socket'=>'Socket', 'level'=>'int', 'option'=>'int'], 'new' => ['GMP', 'data'=>'string', 'word_size='=>'int', 'flags='=>'int'],
'socket_getopt' => ['array|false|int', 'socket'=>'Socket', 'level'=>'int', 'option'=>'int'], ],
'socket_getpeername' => ['bool', 'socket'=>'Socket', '&w_address'=>'string', '&w_port='=>'int'], 'gmp_random_seed' => [
'socket_getsockname' => ['bool', 'socket'=>'Socket', '&w_address'=>'string', '&w_port='=>'int'], 'old' => ['void|false', 'seed'=>'GMP|string|int'],
'socket_import_stream' => ['Socket|false', 'stream'=>'resource'], 'new' => ['void', 'seed'=>'GMP|string|int'],
'socket_last_error' => ['int', 'socket='=>'Socket'], ],
'socket_listen' => ['bool', 'socket'=>'Socket', 'backlog='=>'int'], 'gzpassthru' => [
'socket_read' => ['string|false', 'socket'=>'Socket', 'length'=>'int', 'mode='=>'int'], 'old' => ['int|false', 'stream'=>'resource'],
'socket_recv' => ['int|false', 'socket'=>'Socket', '&w_data'=>'string', 'length'=>'int', 'flags'=>'int'], 'new' => ['int', 'stream'=>'resource'],
'socket_recvfrom' => ['int|false', 'socket'=>'Socket', '&w_data'=>'string', 'length'=>'int', 'flags'=>'int', '&w_address'=>'string', '&w_port='=>'int'], ],
'socket_recvmsg' => ['int|false', 'socket'=>'Socket', '&w_message'=>'array', 'flags='=>'int'], 'hash_hkdf' => [
'socket_select' => ['int|false', '&rw_read'=>'Socket[]|null', '&rw_write'=>'Socket[]|null', '&rw_except'=>'Socket[]|null', 'seconds'=>'int', 'microseconds='=>'int'], 'old' => ['string|false', 'algo'=>'string', 'key'=>'string', 'length='=>'int', 'info='=>'string', 'salt='=>'string'],
'socket_send' => ['int|false', 'socket'=>'Socket', 'data'=>'string', 'length'=>'int', 'flags'=>'int'], 'new' => ['string', 'algo'=>'string', 'key'=>'string', 'length='=>'int', 'info='=>'string', 'salt='=>'string'],
'socket_sendmsg' => ['int|false', 'socket'=>'Socket', 'message'=>'array', 'flags='=>'int'], ],
'socket_sendto' => ['int|false', 'socket'=>'Socket', 'data'=>'string', 'length'=>'int', 'flags'=>'int', 'address'=>'string', 'port='=>'int'], 'imageaffine' => [
'socket_set_block' => ['bool', 'socket'=>'Socket'], 'old' => ['resource|false', 'image'=>'resource', 'affine'=>'array', 'clip='=>'array'],
'socket_set_nonblock' => ['bool', 'socket'=>'Socket'], 'new' => ['false|GdImage', 'image'=>'GdImage', 'affine'=>'array', 'clip='=>'array'],
'socket_set_option' => ['bool', 'socket'=>'Socket', 'level'=>'int', 'option'=>'int', 'value'=>'int|string|array'], ],
'socket_set_timeout' => ['bool', 'stream'=>'resource', 'seconds'=>'int', 'microseconds='=>'int'], 'imagealphablending' => [
'socket_setopt' => ['bool', 'socket'=>'Socket', 'level'=>'int', 'option'=>'int', 'value'=>'int|string|array'], 'old' => ['bool', 'image'=>'resource', 'enable'=>'bool'],
'socket_shutdown' => ['bool', 'socket'=>'Socket', 'mode='=>'int'], 'new' => ['bool', 'image'=>'GdImage', 'enable'=>'bool'],
'socket_strerror' => ['string', 'error_code'=>'int'], ],
'socket_write' => ['int|false', 'socket'=>'Socket', 'data'=>'string', 'length='=>'int'], 'imageantialias' => [
'socket_wsaprotocol_info_export' => ['string|false', 'socket'=>'Socket', 'process_id'=>'int'], 'old' => ['bool', 'image'=>'resource', 'enable'=>'bool'],
'socket_wsaprotocol_info_import' => ['Socket|false', 'info_id'=>'string'], 'new' => ['bool', 'image'=>'GdImage', 'enable'=>'bool'],
'socket_wsaprotocol_info_release' => ['bool', 'info_id'=>'string'], ],
'substr' => ['string', 'string'=>'string', 'offset'=>'int', 'length='=>'int'], 'imagearc' => [
'str_contains' => ['bool', 'haystack'=>'string', 'needle'=>'string'], 'old' => ['bool', 'image'=>'resource', 'center_x'=>'int', 'center_y'=>'int', 'width'=>'int', 'height'=>'int', 'start_angle'=>'int', 'end_angle'=>'int', 'color'=>'int'],
'str_ends_with' => ['bool', 'haystack'=>'string', 'needle'=>'string'], 'new' => ['bool', 'image'=>'GdImage', 'center_x'=>'int', 'center_y'=>'int', 'width'=>'int', 'height'=>'int', 'start_angle'=>'int', 'end_angle'=>'int', 'color'=>'int'],
'str_starts_with' => ['bool', 'haystack'=>'string', 'needle'=>'string'], ],
'strchr' => ['string|false', 'haystack'=>'string', 'needle'=>'string', 'before_needle='=>'bool'], 'imagebmp' => [
'stream_bucket_new' => ['object', 'stream'=>'resource', 'buffer'=>'string'], 'old' => ['bool', 'image'=>'resource', 'file='=>'null|resource|string', 'compressed='=>'bool'],
'stream_set_chunk_size' => ['int', 'stream'=>'resource', 'size'=>'int'], 'new' => ['bool', 'image'=>'GdImage', 'file='=>'null|resource|string', 'compressed='=>'bool'],
'stripos' => ['int|false', 'haystack'=>'string', 'needle'=>'string', 'offset='=>'int'], ],
'stristr' => ['string|false', 'haystack'=>'string', 'needle'=>'string', 'before_needle='=>'bool'], 'imagechar' => [
'strpos' => ['int|false', 'haystack'=>'string', 'needle'=>'string', 'offset='=>'int'], 'old' => ['bool', 'image'=>'resource', 'font'=>'int', 'x'=>'int', 'y'=>'int', 'char'=>'string', 'color'=>'int'],
'strrchr' => ['string|false', 'haystack'=>'string', 'needle'=>'string'], 'new' => ['bool', 'image'=>'GdImage', 'font'=>'int', 'x'=>'int', 'y'=>'int', 'char'=>'string', 'color'=>'int'],
'strripos' => ['int|false', 'haystack'=>'string', 'needle'=>'string', 'offset='=>'int'], ],
'strrpos' => ['int|false', 'haystack'=>'string', 'needle'=>'string', 'offset='=>'int'], 'imagecharup' => [
'strstr' => ['string|false', 'haystack'=>'string', 'needle'=>'string', 'before_needle='=>'bool'], 'old' => ['bool', 'image'=>'resource', 'font'=>'int', 'x'=>'int', 'y'=>'int', 'char'=>'string', 'color'=>'int'],
'substr_compare' => ['int', 'haystack'=>'string', 'needle'=>'string', 'offset'=>'int', 'length='=>'int', 'case_insensitive='=>'bool'], 'new' => ['bool', 'image'=>'GdImage', 'font'=>'int', 'x'=>'int', 'y'=>'int', 'char'=>'string', 'color'=>'int'],
'timezone_identifiers_list' => ['list<string>', 'timezoneGroup='=>'int', 'countryCode='=>'?string'], ],
'timezone_offset_get' => ['int', 'object'=>'DateTimeZone', 'datetime'=>'DateTimeInterface'], 'imagecolorallocate' => [
'version_compare' => ['int|bool', 'version1'=>'string', 'version2'=>'string', 'operator='=>'?(\'\x3c\'|\'lt\'|\'\x3c=\'|\'le\'|\'\x3e\'|\'gt\'|\'\x3e=\'|\'ge\'|\'==\'|\'=\'|\'eq\'|\'!=\'|\'\x3c\x3e\'|\'ne\')'], 'old' => ['int|false', 'image'=>'resource', 'red'=>'int', 'green'=>'int', 'blue'=>'int'],
'xml_get_current_byte_index' => ['int', 'parser'=>'XMLParser'], 'new' => ['int|false', 'image'=>'GdImage', 'red'=>'int', 'green'=>'int', 'blue'=>'int'],
'xml_get_current_column_number' => ['int', 'parser'=>'XMLParser'], ],
'xml_get_current_line_number' => ['int', 'parser'=>'XMLParser'], 'imagecolorallocatealpha' => [
'xml_get_error_code' => ['int', 'parser'=>'XMLParser'], 'old' => ['int|false', 'image'=>'resource', 'red'=>'int', 'green'=>'int', 'blue'=>'int', 'alpha'=>'int'],
'xml_parse_into_struct' => ['int', 'parser'=>'XMLParser', 'data'=>'string', '&w_values'=>'array', '&w_index='=>'array'], 'new' => ['int|false', 'image'=>'GdImage', 'red'=>'int', 'green'=>'int', 'blue'=>'int', 'alpha'=>'int'],
'xml_parse' => ['int', 'parser'=>'XMLParser', 'data'=>'string', 'is_final='=>'bool'], ],
'xml_parser_create' => ['XMLParser', 'encoding='=>'string'], 'imagecolorat' => [
'xml_parser_create_ns' => ['XMLParser', 'encoding='=>'string', 'separator='=>'string'], 'old' => ['int|false', 'image'=>'resource', 'x'=>'int', 'y'=>'int'],
'xml_parser_free' => ['bool', 'parser'=>'XMLParser'], 'new' => ['int|false', 'image'=>'GdImage', 'x'=>'int', 'y'=>'int'],
'xml_parser_get_option' => ['int|string', 'parser'=>'XMLParser', 'option'=>'int'], ],
'xml_parser_set_option' => ['bool', 'parser'=>'XMLParser', 'option'=>'int', 'value'=>'int|string'], 'imagecolorclosest' => [
'xml_set_character_data_handler' => ['bool', 'parser'=>'XMLParser', 'handler'=>'callable'], 'old' => ['int|false', 'image'=>'resource', 'red'=>'int', 'green'=>'int', 'blue'=>'int'],
'xml_set_element_handler' => ['bool', 'parser'=>'XMLParser', 'start_handler'=>'callable', 'end_handler'=>'callable'], 'new' => ['int|false', 'image'=>'GdImage', 'red'=>'int', 'green'=>'int', 'blue'=>'int'],
'xml_set_default_handler' => ['bool', 'parser'=>'XMLParser', 'handler'=>'callable'], ],
'xml_set_end_namespace_decl_handler' => ['bool', 'parser'=>'XMLParser', 'handler'=>'callable'], 'imagecolorclosestalpha' => [
'xml_set_external_entity_ref_handler' => ['bool', 'parser'=>'XMLParser', 'handler'=>'callable'], 'old' => ['int|false', 'image'=>'resource', 'red'=>'int', 'green'=>'int', 'blue'=>'int', 'alpha'=>'int'],
'xml_set_notation_decl_handler' => ['bool', 'parser'=>'XMLParser', 'handler'=>'callable'], 'new' => ['int|false', 'image'=>'GdImage', 'red'=>'int', 'green'=>'int', 'blue'=>'int', 'alpha'=>'int'],
'xml_set_object' => ['bool', 'parser'=>'XMLParser', 'object'=>'object'], ],
'xml_set_processing_instruction_handler' => ['bool', 'parser'=>'XMLParser', 'handler'=>'callable'], 'imagecolorclosesthwb' => [
'xml_set_start_namespace_decl_handler' => ['bool', 'parser'=>'XMLParser', 'handler'=>'callable'], 'old' => ['int|false', 'image'=>'resource', 'red'=>'int', 'green'=>'int', 'blue'=>'int'],
'xml_set_unparsed_entity_decl_handler' => ['bool', 'parser'=>'XMLParser', 'handler'=>'callable'], 'new' => ['int|false', 'image'=>'GdImage', 'red'=>'int', 'green'=>'int', 'blue'=>'int'],
'xmlwriter_end_attribute' => ['bool', 'writer'=>'XMLWriter'], ],
'xmlwriter_end_cdata' => ['bool', 'writer'=>'XMLWriter'], 'imagecolordeallocate' => [
'xmlwriter_end_comment' => ['bool', 'writer'=>'XMLWriter'], 'old' => ['bool', 'image'=>'resource', 'color'=>'int'],
'xmlwriter_end_document' => ['bool', 'writer'=>'XMLWriter'], 'new' => ['bool', 'image'=>'GdImage', 'color'=>'int'],
'xmlwriter_end_dtd' => ['bool', 'writer'=>'XMLWriter'], ],
'xmlwriter_end_dtd_attlist' => ['bool', 'writer'=>'XMLWriter'], 'imagecolorexact' => [
'xmlwriter_end_dtd_element' => ['bool', 'writer'=>'XMLWriter'], 'old' => ['int|false', 'image'=>'resource', 'red'=>'int', 'green'=>'int', 'blue'=>'int'],
'xmlwriter_end_dtd_entity' => ['bool', 'writer'=>'XMLWriter'], 'new' => ['int|false', 'image'=>'GdImage', 'red'=>'int', 'green'=>'int', 'blue'=>'int'],
'xmlwriter_end_element' => ['bool', 'writer'=>'XMLWriter'], ],
'xmlwriter_end_pi' => ['bool', 'writer'=>'XMLWriter'], 'imagecolorexactalpha' => [
'xmlwriter_flush' => ['int|string', 'writer'=>'XMLWriter', 'empty='=>'bool'], 'old' => ['int|false', 'image'=>'resource', 'red'=>'int', 'green'=>'int', 'blue'=>'int', 'alpha'=>'int'],
'xmlwriter_full_end_element' => ['bool', 'writer'=>'XMLWriter'], 'new' => ['int|false', 'image'=>'GdImage', 'red'=>'int', 'green'=>'int', 'blue'=>'int', 'alpha'=>'int'],
'xmlwriter_open_memory' => ['XMLWriter'], ],
'xmlwriter_open_uri' => ['XMLWriter', 'uri'=>'string'], 'imagecolormatch' => [
'xmlwriter_output_memory' => ['string', 'writer'=>'XMLWriter', 'flush='=>'bool'], 'old' => ['bool', 'image1'=>'resource', 'image2'=>'resource'],
'xmlwriter_set_indent' => ['bool', 'writer'=>'XMLWriter', 'enable'=>'bool'], 'new' => ['bool', 'image1'=>'GdImage', 'image2'=>'GdImage'],
'xmlwriter_set_indent_string' => ['bool', 'writer'=>'XMLWriter', 'indentation'=>'string'], ],
'xmlwriter_start_attribute' => ['bool', 'writer'=>'XMLWriter', 'name'=>'string'], 'imagecolorresolve' => [
'xmlwriter_start_attribute_ns' => ['bool', 'writer'=>'XMLWriter', 'prefix'=>'string', 'name'=>'string', 'namespace'=>'string'], 'old' => ['int|false', 'image'=>'resource', 'red'=>'int', 'green'=>'int', 'blue'=>'int'],
'xmlwriter_start_cdata' => ['bool', 'writer'=>'XMLWriter'], 'new' => ['int|false', 'image'=>'GdImage', 'red'=>'int', 'green'=>'int', 'blue'=>'int'],
'xmlwriter_start_comment' => ['bool', 'writer'=>'XMLWriter'], ],
'xmlwriter_start_document' => ['bool', 'writer'=>'XMLWriter', 'version='=>'string', 'encoding='=>'string', 'standalone='=>'string'], 'imagecolorresolvealpha' => [
'xmlwriter_start_dtd' => ['bool', 'writer'=>'XMLWriter', 'qualifiedName'=>'string', 'publicId='=>'string', 'systemId='=>'string'], 'old' => ['int|false', 'image'=>'resource', 'red'=>'int', 'green'=>'int', 'blue'=>'int', 'alpha'=>'int'],
'xmlwriter_start_dtd_attlist' => ['bool', 'writer'=>'XMLWriter', 'name'=>'string'], 'new' => ['int|false', 'image'=>'GdImage', 'red'=>'int', 'green'=>'int', 'blue'=>'int', 'alpha'=>'int'],
'xmlwriter_start_dtd_element' => ['bool', 'writer'=>'XMLWriter', 'qualifiedName'=>'string'], ],
'xmlwriter_start_dtd_entity' => ['bool', 'writer'=>'XMLWriter', 'name'=>'string', 'isParam'=>'bool'], 'imagecolorset' => [
'xmlwriter_start_element' => ['bool', 'writer'=>'XMLWriter', 'name'=>'string'], 'old' => ['void', 'image'=>'resource', 'color'=>'int', 'red'=>'int', 'green'=>'int', 'blue'=>'int', 'alpha='=>'int'],
'xmlwriter_start_element_ns' => ['bool', 'writer'=>'XMLWriter', 'prefix'=>'string', 'name'=>'string', 'namespace'=>'string'], 'new' => ['void', 'image'=>'GdImage', 'color'=>'int', 'red'=>'int', 'green'=>'int', 'blue'=>'int', 'alpha='=>'int'],
'xmlwriter_start_pi' => ['bool', 'writer'=>'XMLWriter', 'target'=>'string'], ],
'xmlwriter_text' => ['bool', 'writer'=>'XMLWriter', 'content'=>'string'], 'imagecolorsforindex' => [
'xmlwriter_write_attribute' => ['bool', 'writer'=>'XMLWriter', 'name'=>'string', 'value'=>'string'], 'old' => ['array<string,int>|false', 'image'=>'resource', 'color'=>'int'],
'xmlwriter_write_attribute_ns' => ['bool', 'writer'=>'XMLWriter', 'prefix'=>'string', 'name'=>'string', 'namespace'=>'string', 'value'=>'string'], 'new' => ['array<string,int>|false', 'image'=>'GdImage', 'color'=>'int'],
'xmlwriter_write_cdata' => ['bool', 'writer'=>'XMLWriter', 'content'=>'string'], ],
'xmlwriter_write_comment' => ['bool', 'writer'=>'XMLWriter', 'content'=>'string'], 'imagecolorstotal' => [
'xmlwriter_write_dtd' => ['bool', 'writer'=>'XMLWriter', 'name'=>'string', 'publicId='=>'string', 'systemId='=>'string', 'content='=>'string'], 'old' => ['int|false', 'image'=>'resource'],
'xmlwriter_write_dtd_attlist' => ['bool', 'writer'=>'XMLWriter', 'name'=>'string', 'content'=>'string'], 'new' => ['int', 'image'=>'GdImage'],
'xmlwriter_write_dtd_element' => ['bool', 'writer'=>'XMLWriter', 'name'=>'string', 'content'=>'string'], ],
'xmlwriter_write_dtd_entity' => ['bool', 'writer'=>'XMLWriter', 'name'=>'string', 'content'=>'string', 'isParam='=>'bool', 'publicId='=>'string', 'systemId='=>'string', 'notationData='=>'string'], 'imagecolortransparent' => [
'xmlwriter_write_element' => ['bool', 'writer'=>'XMLWriter', 'name'=>'string', 'content='=>'string'], 'old' => ['int|false', 'image'=>'resource', 'color='=>'int'],
'xmlwriter_write_element_ns' => ['bool', 'writer'=>'XMLWriter', 'prefix'=>'string', 'name'=>'string', 'namespace'=>'string', 'content='=>'string'], 'new' => ['int|null', 'image'=>'GdImage', 'color='=>'int'],
'xmlwriter_write_pi' => ['bool', 'writer'=>'XMLWriter', 'target'=>'string', 'content'=>'string'], ],
'xmlwriter_write_raw' => ['bool', 'writer'=>'XMLWriter', 'content'=>'string'], 'imageconvolution' => [
], 'old' => ['bool', 'image'=>'resource', 'matrix'=>'array', 'divisor'=>'float', 'offset'=>'float'],
'old' => [ 'new' => ['bool', 'image'=>'GdImage', 'matrix'=>'array', 'divisor'=>'float', 'offset'=>'float'],
'apache_request_headers' => ['array<string,mixed>|false'], ],
'array_combine' => ['associative-array|false', 'keys'=>'string[]|int[]', 'values'=>'array'], 'imagecopy' => [
'array_key_exists' => ['bool', 'key'=>'string|int', 'array'=>'array|ArrayObject'], 'old' => ['bool', 'dst_image'=>'resource', 'src_image'=>'resource', 'dst_x'=>'int', 'dst_y'=>'int', 'src_x'=>'int', 'src_y'=>'int', 'src_width'=>'int', 'src_height'=>'int'],
'bcdiv' => ['?string', 'num1'=>'string', 'num2'=>'string', 'scale='=>'int'], 'new' => ['bool', 'dst_image'=>'GdImage', 'src_image'=>'GdImage', 'dst_x'=>'int', 'dst_y'=>'int', 'src_x'=>'int', 'src_y'=>'int', 'src_width'=>'int', 'src_height'=>'int'],
'bcmod' => ['?string', 'num1'=>'string', 'num2'=>'string', 'scale='=>'int'], ],
'bcpowmod' => ['?string', 'num'=>'string', 'exponent'=>'string', 'modulus'=>'string', 'scale='=>'int'], 'imagecopymerge' => [
'com_load_typelib' => ['bool', 'typelib'=>'string', 'case_insensitive='=>'bool'], 'old' => ['bool', 'dst_image'=>'resource', 'src_image'=>'resource', 'dst_x'=>'int', 'dst_y'=>'int', 'src_x'=>'int', 'src_y'=>'int', 'src_width'=>'int', 'src_height'=>'int', 'pct'=>'int'],
'count_chars' => ['array<int,int>|false|string', 'string'=>'string', 'mode='=>'int'], 'new' => ['bool', 'dst_image'=>'GdImage', 'src_image'=>'GdImage', 'dst_x'=>'int', 'dst_y'=>'int', 'src_x'=>'int', 'src_y'=>'int', 'src_width'=>'int', 'src_height'=>'int', 'pct'=>'int'],
'create_function' => ['string', 'args'=>'string', 'code'=>'string'], ],
'collator_get_strength' => ['int|false', 'object'=>'collator'], 'imagecopymergegray' => [
'curl_close' => ['void', 'handle'=>'resource'], 'old' => ['bool', 'dst_image'=>'resource', 'src_image'=>'resource', 'dst_x'=>'int', 'dst_y'=>'int', 'src_x'=>'int', 'src_y'=>'int', 'src_width'=>'int', 'src_height'=>'int', 'pct'=>'int'],
'curl_copy_handle' => ['resource', 'handle'=>'resource'], 'new' => ['bool', 'dst_image'=>'GdImage', 'src_image'=>'GdImage', 'dst_x'=>'int', 'dst_y'=>'int', 'src_x'=>'int', 'src_y'=>'int', 'src_width'=>'int', 'src_height'=>'int', 'pct'=>'int'],
'curl_errno' => ['int', 'handle'=>'resource'], ],
'curl_error' => ['string', 'handle'=>'resource'], 'imagecopyresampled' => [
'curl_escape' => ['string|false', 'handle'=>'resource', 'string'=>'string'], 'old' => ['bool', 'dst_image'=>'resource', 'src_image'=>'resource', 'dst_x'=>'int', 'dst_y'=>'int', 'src_x'=>'int', 'src_y'=>'int', 'dst_width'=>'int', 'dst_height'=>'int', 'src_width'=>'int', 'src_height'=>'int'],
'curl_exec' => ['bool|string', 'handle'=>'resource'], 'new' => ['bool', 'dst_image'=>'GdImage', 'src_image'=>'GdImage', 'dst_x'=>'int', 'dst_y'=>'int', 'src_x'=>'int', 'src_y'=>'int', 'dst_width'=>'int', 'dst_height'=>'int', 'src_width'=>'int', 'src_height'=>'int'],
'curl_getinfo' => ['mixed', 'handle'=>'resource', 'option='=>'int'], ],
'curl_init' => ['resource|false', 'url='=>'string'], 'imagecopyresized' => [
'curl_multi_add_handle' => ['int', 'multi_handle'=>'resource', 'handle'=>'resource'], 'old' => ['bool', 'dst_image'=>'resource', 'src_image'=>'resource', 'dst_x'=>'int', 'dst_y'=>'int', 'src_x'=>'int', 'src_y'=>'int', 'dst_width'=>'int', 'dst_height'=>'int', 'src_width'=>'int', 'src_height'=>'int'],
'curl_multi_close' => ['void', 'multi_handle'=>'resource'], 'new' => ['bool', 'dst_image'=>'GdImage', 'src_image'=>'GdImage', 'dst_x'=>'int', 'dst_y'=>'int', 'src_x'=>'int', 'src_y'=>'int', 'dst_width'=>'int', 'dst_height'=>'int', 'src_width'=>'int', 'src_height'=>'int'],
'curl_multi_errno' => ['int', 'multi_handle'=>'resource'], ],
'curl_multi_exec' => ['int', 'multi_handle'=>'resource', '&w_still_running'=>'int'], 'imagecreate' => [
'curl_multi_getcontent' => ['string', 'handle'=>'resource'], 'old' => ['resource|false', 'width'=>'int', 'height'=>'int'],
'curl_multi_info_read' => ['array|false', 'multi_handle'=>'resource', '&w_queued_messages='=>'int'], 'new' => ['false|GdImage', 'width'=>'int', 'height'=>'int'],
'curl_multi_init' => ['resource'], ],
'curl_multi_remove_handle' => ['int', 'multi_handle'=>'resource', 'handle'=>'resource'], 'imagecreatefrombmp' => [
'curl_multi_select' => ['int', 'multi_handle'=>'resource', 'timeout='=>'float'], 'old' => ['resource|false', 'filename'=>'string'],
'curl_multi_setopt' => ['bool', 'multi_handle'=>'resource', 'option'=>'int', 'value'=>'mixed'], 'new' => ['false|GdImage', 'filename'=>'string'],
'curl_pause' => ['int', 'handle'=>'resource', 'flags'=>'int'], ],
'curl_reset' => ['void', 'handle'=>'resource'], 'imagecreatefromgd' => [
'curl_setopt' => ['bool', 'handle'=>'resource', 'option'=>'int', 'value'=>'mixed'], 'old' => ['resource|false', 'filename'=>'string'],
'curl_setopt_array' => ['bool', 'handle'=>'resource', 'options'=>'array'], 'new' => ['false|GdImage', 'filename'=>'string'],
'curl_share_close' => ['void', 'share_handle'=>'resource'], ],
'curl_share_errno' => ['int', 'share_handle'=>'resource'], 'imagecreatefromgd2' => [
'curl_share_init' => ['resource'], 'old' => ['resource|false', 'filename'=>'string'],
'curl_share_setopt' => ['bool', 'share_handle'=>'resource', 'option'=>'int', 'value'=>'mixed'], 'new' => ['false|GdImage', 'filename'=>'string'],
'curl_unescape' => ['string|false', 'handle'=>'resource', 'string'=>'string'], ],
'date_add' => ['DateTime|false', 'object'=>'DateTime', 'interval'=>'DateInterval'], 'imagecreatefromgd2part' => [
'date_date_set' => ['DateTime|false', 'object'=>'DateTime', 'year'=>'int', 'month'=>'int', 'day'=>'int'], 'old' => ['resource|false', 'filename'=>'string', 'x'=>'int', 'y'=>'int', 'width'=>'int', 'height'=>'int'],
'date_diff' => ['DateInterval|false', 'baseObject'=>'DateTimeInterface', 'targetObject'=>'DateTimeInterface', 'absolute='=>'bool'], 'new' => ['false|GdImage', 'filename'=>'string', 'x'=>'int', 'y'=>'int', 'width'=>'int', 'height'=>'int'],
'date_format' => ['string|false', 'object'=>'DateTimeInterface', 'format'=>'string'], ],
'date_isodate_set' => ['DateTime|false', 'object'=>'DateTime', 'year'=>'int', 'week'=>'int', 'dayOfWeek='=>'int'], 'imagecreatefromgif' => [
'date_parse' => ['array<string,mixed>|false', 'datetime'=>'string'], 'old' => ['resource|false', 'filename'=>'string'],
'date_sub' => ['DateTime|false', 'object'=>'DateTime', 'interval'=>'DateInterval'], 'new' => ['false|GdImage', 'filename'=>'string'],
'date_sun_info' => ['array<string,bool|int>|false', 'timestamp'=>'int', 'latitude'=>'float', 'longitude'=>'float'], ],
'date_time_set' => ['DateTime|false', 'object'=>'DateTime', 'hour'=>'int', 'minute'=>'int', 'second='=>'int', 'microsecond='=>'int'], 'imagecreatefromjpeg' => [
'date_timestamp_set' => ['DateTime|false', 'object'=>'DateTime', 'timestamp'=>'int'], 'old' => ['resource|false', 'filename'=>'string'],
'date_timezone_set' => ['DateTime|false', 'object'=>'DateTime', 'timezone'=>'DateTimeZone'], 'new' => ['false|GdImage', 'filename'=>'string'],
'debug_backtrace' => ['list<array>', 'options='=>'int|bool', 'limit='=>'int'], ],
'debug_print_backtrace' => ['void', 'options='=>'int|bool', 'limit='=>'int'], 'imagecreatefrompng' => [
'deflate_add' => ['string|false', 'context'=>'resource', 'data'=>'string', 'flush_mode='=>'int'], 'old' => ['resource|false', 'filename'=>'string'],
'deflate_init' => ['resource|false', 'encoding'=>'int', 'options='=>'array'], 'new' => ['false|GdImage', 'filename'=>'string'],
'dom_import_simplexml' => ['DOMElement|false|null', 'node'=>'SimpleXMLElement'], ],
'easter_date' => ['int', 'year='=>'int', 'mode='=>'int'], 'imagecreatefromstring' => [
'each' => ['array{0:int|string,key:int|string,1:mixed,value:mixed}', '&r_arr'=>'array'], 'old' => ['resource|false', 'data'=>'string'],
'enchant_broker_describe' => ['array', 'broker'=>'resource'], 'new' => ['false|GdImage', 'data'=>'string'],
'enchant_broker_dict_exists' => ['bool', 'broker'=>'resource', 'tag'=>'string'], ],
'enchant_broker_free' => ['bool', 'broker'=>'resource'], 'imagecreatefromtga' => [
'enchant_broker_free_dict' => ['bool', 'dictionary'=>'resource'], 'old' => ['resource|false', 'filename'=>'string'],
'enchant_broker_get_dict_path' => ['string', 'broker'=>'resource', 'type'=>'int'], 'new' => ['false|GdImage', 'filename'=>'string'],
'enchant_broker_get_error' => ['string|false', 'broker'=>'resource'], ],
'enchant_broker_init' => ['resource|false'], 'imagecreatefromwbmp' => [
'enchant_broker_list_dicts' => ['array', 'broker'=>'resource'], 'old' => ['resource|false', 'filename'=>'string'],
'enchant_broker_request_dict' => ['resource|false', 'broker'=>'resource', 'tag'=>'string'], 'new' => ['false|GdImage', 'filename'=>'string'],
'enchant_broker_request_pwl_dict' => ['resource|false', 'broker'=>'resource', 'filename'=>'string'], ],
'enchant_broker_set_dict_path' => ['bool', 'broker'=>'resource', 'type'=>'int', 'path'=>'string'], 'imagecreatefromwebp' => [
'enchant_broker_set_ordering' => ['bool', 'broker'=>'resource', 'tag'=>'string', 'ordering'=>'string'], 'old' => ['resource|false', 'filename'=>'string'],
'enchant_dict_add_to_personal' => ['void', 'dictionary'=>'resource', 'word'=>'string'], 'new' => ['false|GdImage', 'filename'=>'string'],
'enchant_dict_add_to_session' => ['void', 'dictionary'=>'resource', 'word'=>'string'], ],
'enchant_dict_check' => ['bool', 'dictionary'=>'resource', 'word'=>'string'], 'imagecreatefromxbm' => [
'enchant_dict_describe' => ['array', 'dictionary'=>'resource'], 'old' => ['resource|false', 'filename'=>'string'],
'enchant_dict_get_error' => ['string', 'dictionary'=>'resource'], 'new' => ['false|GdImage', 'filename'=>'string'],
'enchant_dict_is_in_session' => ['bool', 'dictionary'=>'resource', 'word'=>'string'], ],
'enchant_dict_quick_check' => ['bool', 'dictionary'=>'resource', 'word'=>'string', '&w_suggestions='=>'array<int,string>'], 'imagecreatefromxpm' => [
'enchant_dict_store_replacement' => ['void', 'dictionary'=>'resource', 'misspelled'=>'string', 'correct'=>'string'], 'old' => ['resource|false', 'filename'=>'string'],
'enchant_dict_suggest' => ['array', 'dictionary'=>'resource', 'word'=>'string'], 'new' => ['false|GdImage', 'filename'=>'string'],
'fpassthru' => ['int|false', 'stream'=>'resource'], ],
'gmdate' => ['string|false', 'format'=>'string', 'timestamp='=>'int'], 'imagecreatetruecolor' => [
'gmmktime' => ['int|false', 'hour'=>'int', 'minute='=>'int', 'second='=>'int', 'month='=>'int', 'day='=>'int', 'year='=>'int'], 'old' => ['resource|false', 'width'=>'int', 'height'=>'int'],
'gmp_binomial' => ['GMP|false', 'n'=>'GMP|string|int', 'k'=>'int'], 'new' => ['false|GdImage', 'width'=>'int', 'height'=>'int'],
'gmp_export' => ['string|false', 'num'=>'GMP|string|int', 'word_size='=>'int', 'flags='=>'int'], ],
'gmp_import' => ['GMP|false', 'data'=>'string', 'word_size='=>'int', 'flags='=>'int'], 'imagecrop' => [
'gmp_random' => ['GMP', 'limiter='=>'int'], 'old' => ['resource|false', 'image'=>'resource', 'rectangle'=>'array'],
'gmp_random_seed' => ['void|false', 'seed'=>'GMP|string|int'], 'new' => ['false|GdImage', 'image'=>'GdImage', 'rectangle'=>'array'],
'gzgetss' => ['string|false', 'zp'=>'resource', 'length'=>'int', 'allowable_tags='=>'string'], ],
'gzpassthru' => ['int|false', 'stream'=>'resource'], 'imagecropauto' => [
'hash_hkdf' => ['string|false', 'algo'=>'string', 'key'=>'string', 'length='=>'int', 'info='=>'string', 'salt='=>'string'], 'old' => ['resource|false', 'image'=>'resource', 'mode='=>'int', 'threshold='=>'float', 'color='=>'int'],
'image2wbmp' => ['bool', 'im'=>'resource', 'filename='=>'?string', 'threshold='=>'int'], 'new' => ['false|GdImage', 'image'=>'GdImage', 'mode='=>'int', 'threshold='=>'float', 'color='=>'int'],
'imageaffine' => ['resource|false', 'image'=>'resource', 'affine'=>'array', 'clip='=>'array'], ],
'imagealphablending' => ['bool', 'image'=>'resource', 'enable'=>'bool'], 'imagedashedline' => [
'imageantialias' => ['bool', 'image'=>'resource', 'enable'=>'bool'], 'old' => ['bool', 'image'=>'resource', 'x1'=>'int', 'y1'=>'int', 'x2'=>'int', 'y2'=>'int', 'color'=>'int'],
'imagearc' => ['bool', 'image'=>'resource', 'center_x'=>'int', 'center_y'=>'int', 'width'=>'int', 'height'=>'int', 'start_angle'=>'int', 'end_angle'=>'int', 'color'=>'int'], 'new' => ['bool', 'image'=>'GdImage', 'x1'=>'int', 'y1'=>'int', 'x2'=>'int', 'y2'=>'int', 'color'=>'int'],
'imagebmp' => ['bool', 'image'=>'resource', 'file='=>'null|resource|string', 'compressed='=>'bool'], ],
'imagechar' => ['bool', 'image'=>'resource', 'font'=>'int', 'x'=>'int', 'y'=>'int', 'char'=>'string', 'color'=>'int'], 'imagedestroy' => [
'imagecharup' => ['bool', 'image'=>'resource', 'font'=>'int', 'x'=>'int', 'y'=>'int', 'char'=>'string', 'color'=>'int'], 'old' => ['bool', 'image'=>'resource'],
'imagecolorallocatealpha' => ['int|false', 'image'=>'resource', 'red'=>'int', 'green'=>'int', 'blue'=>'int', 'alpha'=>'int'], 'new' => ['bool', 'image'=>'GdImage'],
'imagecolorallocate' => ['int|false', 'image'=>'resource', 'red'=>'int', 'green'=>'int', 'blue'=>'int'], ],
'imagecolorat' => ['int|false', 'image'=>'resource', 'x'=>'int', 'y'=>'int'], 'imageellipse' => [
'imagecolorclosestalpha' => ['int|false', 'image'=>'resource', 'red'=>'int', 'green'=>'int', 'blue'=>'int', 'alpha'=>'int'], 'old' => ['bool', 'image'=>'resource', 'center_x'=>'int', 'center_y'=>'int', 'width'=>'int', 'height'=>'int', 'color'=>'int'],
'imagecolorclosesthwb' => ['int|false', 'image'=>'resource', 'red'=>'int', 'green'=>'int', 'blue'=>'int'], 'new' => ['bool', 'image'=>'GdImage', 'center_x'=>'int', 'center_y'=>'int', 'width'=>'int', 'height'=>'int', 'color'=>'int'],
'imagecolorclosest' => ['int|false', 'image'=>'resource', 'red'=>'int', 'green'=>'int', 'blue'=>'int'], ],
'imagecolordeallocate' => ['bool', 'image'=>'resource', 'color'=>'int'], 'imagefill' => [
'imagecolorexactalpha' => ['int|false', 'image'=>'resource', 'red'=>'int', 'green'=>'int', 'blue'=>'int', 'alpha'=>'int'], 'old' => ['bool', 'image'=>'resource', 'x'=>'int', 'y'=>'int', 'color'=>'int'],
'imagecolorexact' => ['int|false', 'image'=>'resource', 'red'=>'int', 'green'=>'int', 'blue'=>'int'], 'new' => ['bool', 'image'=>'GdImage', 'x'=>'int', 'y'=>'int', 'color'=>'int'],
'imagecolormatch' => ['bool', 'image1'=>'resource', 'image2'=>'resource'], ],
'imagecolorresolvealpha' => ['int|false', 'image'=>'resource', 'red'=>'int', 'green'=>'int', 'blue'=>'int', 'alpha'=>'int'], 'imagefilledarc' => [
'imagecolorresolve' => ['int|false', 'image'=>'resource', 'red'=>'int', 'green'=>'int', 'blue'=>'int'], 'old' => ['bool', 'image'=>'resource', 'center_x'=>'int', 'center_y'=>'int', 'width'=>'int', 'height'=>'int', 'start_angle'=>'int', 'end_angle'=>'int', 'color'=>'int', 'style'=>'int'],
'imagecolorset' => ['void', 'image'=>'resource', 'color'=>'int', 'red'=>'int', 'green'=>'int', 'blue'=>'int', 'alpha='=>'int'], 'new' => ['bool', 'image'=>'GdImage', 'center_x'=>'int', 'center_y'=>'int', 'width'=>'int', 'height'=>'int', 'start_angle'=>'int', 'end_angle'=>'int', 'color'=>'int', 'style'=>'int'],
'imagecolorsforindex' => ['array<string,int>|false', 'image'=>'resource', 'color'=>'int'], ],
'imagecolorstotal' => ['int|false', 'image'=>'resource'], 'imagefilledellipse' => [
'imagecolortransparent' => ['int|false', 'image'=>'resource', 'color='=>'int'], 'old' => ['bool', 'image'=>'resource', 'center_x'=>'int', 'center_y'=>'int', 'width'=>'int', 'height'=>'int', 'color'=>'int'],
'imageconvolution' => ['bool', 'image'=>'resource', 'matrix'=>'array', 'divisor'=>'float', 'offset'=>'float'], 'new' => ['bool', 'image'=>'GdImage', 'center_x'=>'int', 'center_y'=>'int', 'width'=>'int', 'height'=>'int', 'color'=>'int'],
'imagecopy' => ['bool', 'dst_image'=>'resource', 'src_image'=>'resource', 'dst_x'=>'int', 'dst_y'=>'int', 'src_x'=>'int', 'src_y'=>'int', 'src_width'=>'int', 'src_height'=>'int'], ],
'imagecopymerge' => ['bool', 'dst_image'=>'resource', 'src_image'=>'resource', 'dst_x'=>'int', 'dst_y'=>'int', 'src_x'=>'int', 'src_y'=>'int', 'src_width'=>'int', 'src_height'=>'int', 'pct'=>'int'], 'imagefilledpolygon' => [
'imagecopymergegray' => ['bool', 'dst_image'=>'resource', 'src_image'=>'resource', 'dst_x'=>'int', 'dst_y'=>'int', 'src_x'=>'int', 'src_y'=>'int', 'src_width'=>'int', 'src_height'=>'int', 'pct'=>'int'], 'old' => ['bool', 'image'=>'resource', 'points'=>'array', 'num_points_or_color'=>'int', 'color='=>'int'],
'imagecopyresampled' => ['bool', 'dst_image'=>'resource', 'src_image'=>'resource', 'dst_x'=>'int', 'dst_y'=>'int', 'src_x'=>'int', 'src_y'=>'int', 'dst_width'=>'int', 'dst_height'=>'int', 'src_width'=>'int', 'src_height'=>'int'], 'new' => ['bool', 'image'=>'GdImage', 'points'=>'array', 'num_points_or_color'=>'int', 'color='=>'int'],
'imagecopyresized' => ['bool', 'dst_image'=>'resource', 'src_image'=>'resource', 'dst_x'=>'int', 'dst_y'=>'int', 'src_x'=>'int', 'src_y'=>'int', 'dst_width'=>'int', 'dst_height'=>'int', 'src_width'=>'int', 'src_height'=>'int'], ],
'imagecreatefrombmp' => ['resource|false', 'filename'=>'string'], 'imagefilledrectangle' => [
'imagecreatefromgd2part' => ['resource|false', 'filename'=>'string', 'x'=>'int', 'y'=>'int', 'width'=>'int', 'height'=>'int'], 'old' => ['bool', 'image'=>'resource', 'x1'=>'int', 'y1'=>'int', 'x2'=>'int', 'y2'=>'int', 'color'=>'int'],
'imagecreatefromgd2' => ['resource|false', 'filename'=>'string'], 'new' => ['bool', 'image'=>'GdImage', 'x1'=>'int', 'y1'=>'int', 'x2'=>'int', 'y2'=>'int', 'color'=>'int'],
'imagecreatefromgd' => ['resource|false', 'filename'=>'string'], ],
'imagecreatefromgif' => ['resource|false', 'filename'=>'string'], 'imagefilltoborder' => [
'imagecreatefromjpeg' => ['resource|false', 'filename'=>'string'], 'old' => ['bool', 'image'=>'resource', 'x'=>'int', 'y'=>'int', 'border_color'=>'int', 'color'=>'int'],
'imagecreatefrompng' => ['resource|false', 'filename'=>'string'], 'new' => ['bool', 'image'=>'GdImage', 'x'=>'int', 'y'=>'int', 'border_color'=>'int', 'color'=>'int'],
'imagecreatefromstring' => ['resource|false', 'data'=>'string'], ],
'imagecreatefromtga' => ['resource|false', 'filename'=>'string'], 'imagefilter' => [
'imagecreatefromwbmp' => ['resource|false', 'filename'=>'string'], 'old' => ['bool', 'image'=>'resource', 'filter'=>'int', '...args='=>'int', 'arg2='=>'int', 'arg3='=>'int', 'arg4='=>'int'],
'imagecreatefromwebp' => ['resource|false', 'filename'=>'string'], 'new' => ['bool', 'image'=>'GdImage', 'filter'=>'int', '...args='=>'int', 'arg2='=>'int', 'arg3='=>'int', 'arg4='=>'int'],
'imagecreatefromxbm' => ['resource|false', 'filename'=>'string'], ],
'imagecreatefromxpm' => ['resource|false', 'filename'=>'string'], 'imageflip' => [
'imagecreate' => ['resource|false', 'width'=>'int', 'height'=>'int'], 'old' => ['bool', 'image'=>'resource', 'mode'=>'int'],
'imagecreatetruecolor' => ['resource|false', 'width'=>'int', 'height'=>'int'], 'new' => ['bool', 'image'=>'GdImage', 'mode'=>'int'],
'imagecropauto' => ['resource|false', 'image'=>'resource', 'mode='=>'int', 'threshold='=>'float', 'color='=>'int'], ],
'imagecrop' => ['resource|false', 'image'=>'resource', 'rectangle'=>'array'], 'imagefttext' => [
'imagedashedline' => ['bool', 'image'=>'resource', 'x1'=>'int', 'y1'=>'int', 'x2'=>'int', 'y2'=>'int', 'color'=>'int'], 'old' => ['array<int,int>|false', 'image'=>'resource', 'size'=>'float', 'angle'=>'float', 'x'=>'int', 'y'=>'int', 'color'=>'int', 'font_filename'=>'string', 'text'=>'string', 'options='=>'array'],
'imagedestroy' => ['bool', 'image'=>'resource'], 'new' => ['array<int,int>|false', 'image'=>'GdImage', 'size'=>'float', 'angle'=>'float', 'x'=>'int', 'y'=>'int', 'color'=>'int', 'font_filename'=>'string', 'text'=>'string', 'options='=>'array'],
'imageellipse' => ['bool', 'image'=>'resource', 'center_x'=>'int', 'center_y'=>'int', 'width'=>'int', 'height'=>'int', 'color'=>'int'], ],
'imagefill' => ['bool', 'image'=>'resource', 'x'=>'int', 'y'=>'int', 'color'=>'int'], 'imagegammacorrect' => [
'imagefilledarc' => ['bool', 'image'=>'resource', 'center_x'=>'int', 'center_y'=>'int', 'width'=>'int', 'height'=>'int', 'start_angle'=>'int', 'end_angle'=>'int', 'color'=>'int', 'style'=>'int'], 'old' => ['bool', 'image'=>'resource', 'input_gamma'=>'float', 'output_gamma'=>'float'],
'imagefilledellipse' => ['bool', 'image'=>'resource', 'center_x'=>'int', 'center_y'=>'int', 'width'=>'int', 'height'=>'int', 'color'=>'int'], 'new' => ['bool', 'image'=>'GdImage', 'input_gamma'=>'float', 'output_gamma'=>'float'],
'imagefilledpolygon' => ['bool', 'image'=>'resource', 'points'=>'array', 'num_points_or_color'=>'int', 'color='=>'int'], ],
'imagefilledrectangle' => ['bool', 'image'=>'resource', 'x1'=>'int', 'y1'=>'int', 'x2'=>'int', 'y2'=>'int', 'color'=>'int'], 'imagegd' => [
'imagefilltoborder' => ['bool', 'image'=>'resource', 'x'=>'int', 'y'=>'int', 'border_color'=>'int', 'color'=>'int'], 'old' => ['bool', 'image'=>'resource', 'file='=>'?string'],
'imagefilter' => ['bool', 'image'=>'resource', 'filter'=>'int', '...args='=>'int', 'arg2='=>'int', 'arg3='=>'int', 'arg4='=>'int'], 'new' => ['bool', 'image'=>'GdImage', 'file='=>'string'],
'imageflip' => ['bool', 'image'=>'resource', 'mode'=>'int'], ],
'imagefttext' => ['array<int,int>|false', 'image'=>'resource', 'size'=>'float', 'angle'=>'float', 'x'=>'int', 'y'=>'int', 'color'=>'int', 'font_filename'=>'string', 'text'=>'string', 'options='=>'array'], 'imagegd2' => [
'imagegammacorrect' => ['bool', 'image'=>'resource', 'input_gamma'=>'float', 'output_gamma'=>'float'], 'old' => ['bool', 'image'=>'resource', 'file='=>'?string', 'chunk_size='=>'int', 'mode='=>'int'],
'imagegd2' => ['bool', 'image'=>'resource', 'file='=>'?string', 'chunk_size='=>'int', 'mode='=>'int'], 'new' => ['bool', 'image'=>'GdImage', 'file='=>'string', 'chunk_size='=>'int', 'mode='=>'int'],
'imagegd' => ['bool', 'image'=>'resource', 'file='=>'?string'], ],
'imagegetclip' => ['array<int,int>|false', 'image'=>'resource'], 'imagegetclip' => [
'imagegif' => ['bool', 'image'=>'resource', 'file='=>'?string'], 'old' => ['array<int,int>|false', 'image'=>'resource'],
'imagegrabscreen' => ['false|resource'], 'new' => ['array<int,int>', 'image'=>'GdImage'],
'imagegrabwindow' => ['false|resource', 'handle'=>'int', 'client_area='=>'bool'], ],
'imageinterlace' => ['int|false', 'image'=>'resource', 'enable='=>'?bool'], 'imagegif' => [
'imageistruecolor' => ['bool', 'image'=>'resource'], 'old' => ['bool', 'image'=>'resource', 'file='=>'?string'],
'imagejpeg' => ['bool', 'image'=>'resource', 'file='=>'?string', 'quality='=>'int'], 'new' => ['bool', 'image'=>'GdImage', 'file='=>'?string'],
'imagelayereffect' => ['bool', 'image'=>'resource', 'effect'=>'int'], ],
'imageline' => ['bool', 'image'=>'resource', 'x1'=>'int', 'y1'=>'int', 'x2'=>'int', 'y2'=>'int', 'color'=>'int'], 'imagegrabscreen' => [
'imageopenpolygon' => ['bool', 'image'=>'resource', 'points'=>'array', 'num_points_or_color'=>'int', 'color='=>'int'], 'old' => ['false|resource'],
'imagepalettecopy' => ['void', 'dst'=>'resource', 'src'=>'resource'], 'new' => ['false|GdImage'],
'imagepalettetotruecolor' => ['bool', 'image'=>'resource'], ],
'imagepng' => ['bool', 'image'=>'resource', 'file='=>'?string', 'quality='=>'int', 'filters='=>'int'], 'imagegrabwindow' => [
'imagepolygon' => ['bool', 'image'=>'resource', 'points'=>'array', 'num_points_or_color'=>'int', 'color='=>'int'], 'old' => ['false|resource', 'handle'=>'int', 'client_area='=>'bool'],
'imagerectangle' => ['bool', 'image'=>'resource', 'x1'=>'int', 'y1'=>'int', 'x2'=>'int', 'y2'=>'int', 'color'=>'int'], 'new' => ['false|GdImage', 'handle'=>'int', 'client_area='=>'bool'],
'imageresolution' => ['array<int,int>|bool', 'image'=>'resource', 'resolution_x='=>'int', 'resolution_y='=>'int'], ],
'imagerotate' => ['resource|false', 'image'=>'resource', 'angle'=>'float', 'background_color'=>'int', 'ignore_transparent='=>'bool'], 'imageinterlace' => [
'imagesavealpha' => ['bool', 'image'=>'resource', 'enable'=>'bool'], 'old' => ['int|false', 'image'=>'resource', 'enable='=>'?bool'],
'imagescale' => ['resource|false', 'image'=>'resource', 'width'=>'int', 'height='=>'int', 'mode='=>'int'], 'new' => ['int', 'image'=>'GdImage', 'enable='=>'?bool'],
'imagesetbrush' => ['bool', 'image'=>'resource', 'brush'=>'resource'], ],
'imagesetclip' => ['bool', 'image'=>'resource', 'x1'=>'int', 'x2'=>'int', 'y1'=>'int', 'y2'=>'int'], 'imageistruecolor' => [
'imagesetinterpolation' => ['bool', 'image'=>'resource', 'method='=>'int'], 'old' => ['bool', 'image'=>'resource'],
'imagesetpixel' => ['bool', 'image'=>'resource', 'x'=>'int', 'y'=>'int', 'color'=>'int'], 'new' => ['bool', 'image'=>'GdImage'],
'imagesetstyle' => ['bool', 'image'=>'resource', 'style'=>'non-empty-array'], ],
'imagesetthickness' => ['bool', 'image'=>'resource', 'thickness'=>'int'], 'imagejpeg' => [
'imagesettile' => ['bool', 'image'=>'resource', 'tile'=>'resource'], 'old' => ['bool', 'image'=>'resource', 'file='=>'?string', 'quality='=>'int'],
'imagestring' => ['bool', 'image'=>'resource', 'font'=>'int', 'x'=>'int', 'y'=>'int', 'string'=>'string', 'color'=>'int'], 'new' => ['bool', 'image'=>'GdImage', 'file='=>'?string', 'quality='=>'int'],
'imagestringup' => ['bool', 'image'=>'resource', 'font'=>'int', 'x'=>'int', 'y'=>'int', 'string'=>'string', 'color'=>'int'], ],
'imagesx' => ['int|false', 'image'=>'resource'], 'imagelayereffect' => [
'imagesy' => ['int|false', 'image'=>'resource'], 'old' => ['bool', 'image'=>'resource', 'effect'=>'int'],
'imagetruecolortopalette' => ['bool', 'image'=>'resource', 'dither'=>'bool', 'num_colors'=>'int'], 'new' => ['bool', 'image'=>'GdImage', 'effect'=>'int'],
'imagettftext' => ['false|array<int,int>', 'image'=>'resource', 'size'=>'float', 'angle'=>'float', 'x'=>'int', 'y'=>'int', 'color'=>'int', 'font_filename'=>'string', 'text'=>'string', 'options='=>'array'], ],
'imagewbmp' => ['bool', 'image'=>'resource', 'file='=>'?string', 'foreground_color='=>'int'], 'imageline' => [
'imagewebp' => ['bool', 'image'=>'resource', 'file='=>'?string', 'quality='=>'int'], 'old' => ['bool', 'image'=>'resource', 'x1'=>'int', 'y1'=>'int', 'x2'=>'int', 'y2'=>'int', 'color'=>'int'],
'imagexbm' => ['bool', 'image'=>'resource', 'filename'=>'?string', 'foreground_color='=>'int'], 'new' => ['bool', 'image'=>'GdImage', 'x1'=>'int', 'y1'=>'int', 'x2'=>'int', 'y2'=>'int', 'color'=>'int'],
'imap_mailboxmsginfo' => ['stdClass|false', 'imap'=>'resource'], ],
'inflate_add' => ['string|false', 'context'=>'resource', 'data'=>'string', 'flush_mode='=>'int'], 'imageopenpolygon' => [
'inflate_get_read_len' => ['int|false', 'context'=>'resource'], 'old' => ['bool', 'image'=>'resource', 'points'=>'array', 'num_points_or_color'=>'int', 'color='=>'int'],
'inflate_get_status' => ['int|false', 'context'=>'resource'], 'new' => ['bool', 'image'=>'GdImage', 'points'=>'array', 'num_points_or_color'=>'int', 'color='=>'int'],
'inflate_init' => ['resource|false', 'encoding'=>'int', 'options='=>'array'], ],
'jpeg2wbmp' => ['bool', 'jpegname'=>'string', 'wbmpname'=>'string', 'dest_height'=>'int', 'dest_width'=>'int', 'threshold'=>'int'], 'imagepalettecopy' => [
'ldap_count_entries' => ['int|false', 'ldap'=>'resource', 'result'=>'resource'], 'old' => ['void', 'dst'=>'resource', 'src'=>'resource'],
'ldap_get_attributes' => ['array|false', 'ldap'=>'resource', 'entry'=>'resource'], 'new' => ['void', 'dst'=>'GdImage', 'src'=>'GdImage'],
'ldap_sort' => ['bool', 'link_identifier'=>'resource', 'result_identifier'=>'resource', 'sortfilter'=>'string'], ],
'mb_convert_case' => ['string|false', 'string'=>'string', 'mode'=>'int', 'encoding='=>'string'], 'imagepalettetotruecolor' => [
'mb_convert_kana' => ['string|false', 'string'=>'string', 'mode='=>'string', 'encoding='=>'string'], 'old' => ['bool', 'image'=>'resource'],
'mb_decode_numericentity' => ['string|false', 'string'=>'string', 'map'=>'array', 'encoding='=>'string', 'is_hex='=>'bool'], 'new' => ['bool', 'image'=>'GdImage'],
'mb_encode_mimeheader' => ['string|false', 'string'=>'string', 'charset='=>'string', 'transfer_encoding='=>'string', 'newline='=>'string', 'indent='=>'int'], ],
'mb_encode_numericentity' => ['string|false', 'string'=>'string', 'map'=>'array', 'encoding='=>'string', 'hex='=>'bool'], 'imagepng' => [
'mb_encoding_aliases' => ['list<string>|false', 'encoding'=>'string'], 'old' => ['bool', 'image'=>'resource', 'file='=>'?string', 'quality='=>'int', 'filters='=>'int'],
'mb_ereg' => ['int|false', 'pattern'=>'string', 'string'=>'string', '&w_matches='=>'array'], 'new' => ['bool', 'image'=>'GdImage', 'file='=>'?string', 'quality='=>'int', 'filters='=>'int'],
'mb_eregi' => ['int|false', 'pattern'=>'string', 'string'=>'string', '&w_matches='=>'array'], ],
'mb_scrub' => ['string|false', 'string'=>'string', 'encoding='=>'string'], 'imagepolygon' => [
'mb_strcut' => ['string|false', 'string'=>'string', 'start'=>'int', 'length='=>'int', 'encoding='=>'string'], 'old' => ['bool', 'image'=>'resource', 'points'=>'array', 'num_points_or_color'=>'int', 'color='=>'int'],
'mb_strimwidth' => ['string|false', 'string'=>'string', 'start'=>'int', 'width'=>'int', 'trim_marker='=>'string', 'encoding='=>'string'], 'new' => ['bool', 'image'=>'GdImage', 'points'=>'array', 'num_points_or_color'=>'int', 'color='=>'int'],
'mb_strlen' => ['int|false', 'string'=>'string', 'encoding='=>'string'], ],
'mb_strtolower' => ['string|false', 'string'=>'string', 'encoding='=>'string'], 'imagerectangle' => [
'mb_strtoupper' => ['string|false', 'string'=>'string', 'encoding='=>'string'], 'old' => ['bool', 'image'=>'resource', 'x1'=>'int', 'y1'=>'int', 'x2'=>'int', 'y2'=>'int', 'color'=>'int'],
'mb_strwidth' => ['int|false', 'string'=>'string', 'encoding='=>'string'], 'new' => ['bool', 'image'=>'GdImage', 'x1'=>'int', 'y1'=>'int', 'x2'=>'int', 'y2'=>'int', 'color'=>'int'],
'mb_substr' => ['string|false', 'string'=>'string', 'start'=>'int', 'length='=>'?int', 'encoding='=>'string'], ],
'mb_substr_count' => ['int|false', 'haystack'=>'string', 'needle'=>'string', 'encoding='=>'string'], 'imageresolution' => [
'mktime' => ['int|false', 'hour'=>'int', 'minute='=>'int', 'second='=>'int', 'month='=>'int', 'day='=>'int', 'year='=>'int'], 'old' => ['array<int,int>|bool', 'image'=>'resource', 'resolution_x='=>'int', 'resolution_y='=>'int'],
'msg_get_queue' => ['resource', 'key'=>'int', 'permissions='=>'int'], 'new' => ['array<int,int>|bool', 'image'=>'GdImage', 'resolution_x='=>'int', 'resolution_y='=>'int'],
'msg_receive' => ['bool', 'queue'=>'resource', 'desired_message_type'=>'int', '&w_received_message_type'=>'int', 'max_message_size'=>'int', '&w_message'=>'mixed', 'unserialize='=>'bool', 'flags='=>'int', '&w_error_code='=>'int'], ],
'msg_remove_queue' => ['bool', 'queue'=>'resource'], 'imagerotate' => [
'msg_send' => ['bool', 'queue'=>'resource', 'message_type'=>'int', 'message'=>'array|object|bool|float|int|string|null', 'serialize='=>'bool', 'blocking='=>'bool', '&w_error_code='=>'int'], 'old' => ['resource|false', 'image'=>'resource', 'angle'=>'float', 'background_color'=>'int', 'ignore_transparent='=>'bool'],
'msg_set_queue' => ['bool', 'queue'=>'resource', 'data'=>'array'], 'new' => ['false|GdImage', 'image'=>'GdImage', 'angle'=>'float', 'background_color'=>'int', 'ignore_transparent='=>'bool'],
'msg_stat_queue' => ['array', 'queue'=>'resource'], ],
'mysqli_fetch_fields' => ['?array<int,object>', 'result'=>'mysqli_result'], 'imagesavealpha' => [
'mysqli_get_client_stats' => ['array|false'], 'old' => ['bool', 'image'=>'resource', 'enable'=>'bool'],
'mysqli_get_connection_stats' => ['array|false', 'mysql'=>'mysqli'], 'new' => ['bool', 'image'=>'GdImage', 'enable'=>'bool'],
'mysqli_stmt_attr_get' => ['int|false', 'statement'=>'mysqli_stmt', 'attribute'=>'int'], ],
'numfmt_create' => ['NumberFormatter|false', 'locale'=>'string', 'style'=>'int', 'pattern='=>'string'], 'imagescale' => [
'ob_implicit_flush' => ['void', 'enable='=>'int'], 'old' => ['resource|false', 'image'=>'resource', 'width'=>'int', 'height='=>'int', 'mode='=>'int'],
'oci_collection_append' => ['bool', 'collection'=>'resource', 'value'=>'string'], 'new' => ['false|GdImage', 'image'=>'GdImage', 'width'=>'int', 'height='=>'int', 'mode='=>'int'],
'oci_collection_assign' => ['bool', 'to'=>'resource', 'from'=>'object'], ],
'oci_collection_element_assign' => ['bool', 'collection'=>'resource', 'index'=>'int', 'value'=>'string'], 'imagesetbrush' => [
'oci_collection_element_get' => ['string', 'collection'=>'resource', 'index'=>'int'], 'old' => ['bool', 'image'=>'resource', 'brush'=>'resource'],
'oci_collection_max' => ['int', 'collection'=>'resource'], 'new' => ['bool', 'image'=>'GdImage', 'brush'=>'GdImage'],
'oci_collection_size' => ['int', 'collection'=>'resource'], ],
'oci_collection_trim' => ['bool', 'collection'=>'resource', 'num'=>'int'], 'imagesetclip' => [
'oci_fetch_all' => ['int|false', 'statement'=>'resource', '&w_output'=>'array', 'offset='=>'int', 'limit='=>'int', 'flags='=>'int'], 'old' => ['bool', 'image'=>'resource', 'x1'=>'int', 'y1'=>'int', 'x2'=>'int', 'y2'=>'int'],
'oci_free_collection' => ['bool', 'collection'=>'resource'], 'new' => ['bool', 'image'=>'GdImage', 'x1'=>'int', 'y1'=>'int', 'x2'=>'int', 'y2'=>'int'],
'oci_free_descriptor' => ['bool', 'lob'=>'resource'], ],
'oci_new_descriptor' => ['OCILob|false', 'connection'=>'resource', 'type='=>'int'], 'imagesetinterpolation' => [
'openssl_cipher_iv_length' => ['int|false', 'cipher_algo'=>'string'], 'old' => ['bool', 'image'=>'resource', 'method='=>'int'],
'openssl_csr_export' => ['bool', 'csr'=>'string|resource', '&w_output'=>'string', 'no_text='=>'bool'], 'new' => ['bool', 'image'=>'GdImage', 'method='=>'int'],
'openssl_csr_export_to_file' => ['bool', 'csr'=>'string|resource', 'output_filename'=>'string', 'no_text='=>'bool'], ],
'openssl_csr_get_public_key' => ['resource|false', 'csr'=>'string|resource', 'short_names='=>'bool'], 'imagesetpixel' => [
'openssl_csr_get_subject' => ['array|false', 'csr'=>'string|resource', 'short_names='=>'bool'], 'old' => ['bool', 'image'=>'resource', 'x'=>'int', 'y'=>'int', 'color'=>'int'],
'openssl_csr_new' => ['resource|false', 'distinguished_names'=>'array', '&w_private_key'=>'resource', 'options='=>'array', 'extra_attributes='=>'array'], 'new' => ['bool', 'image'=>'GdImage', 'x'=>'int', 'y'=>'int', 'color'=>'int'],
'openssl_csr_sign' => ['resource|false', 'csr'=>'string|resource', 'ca_certificate'=>'string|resource|null', 'private_key'=>'string|resource|array', 'days'=>'int', 'options='=>'array', 'serial='=>'int'], ],
'openssl_decrypt' => ['string|false', 'data'=>'string', 'cipher_algo'=>'string', 'passphrase'=>'string', 'options='=>'int', 'iv='=>'string', 'tag='=>'string', 'aad='=>'string'], 'imagesetstyle' => [
'openssl_dh_compute_key' => ['string|false', 'public_key'=>'string', 'private_key'=>'resource'], 'old' => ['bool', 'image'=>'resource', 'style'=>'non-empty-array'],
'openssl_digest' => ['string|false', 'data'=>'string', 'digest_algo'=>'string', 'binary='=>'bool'], 'new' => ['bool', 'image'=>'GdImage', 'style'=>'non-empty-array'],
'openssl_encrypt' => ['string|false', 'data'=>'string', 'cipher_algo'=>'string', 'passphrase'=>'string', 'options='=>'int', 'iv='=>'string', '&w_tag='=>'string', 'aad='=>'string', 'tag_length='=>'int'], ],
'openssl_error_string' => ['string|false'], 'imagesetthickness' => [
'openssl_free_key' => ['void', 'key'=>'resource'], 'old' => ['bool', 'image'=>'resource', 'thickness'=>'int'],
'openssl_get_cert_locations' => ['array'], 'new' => ['bool', 'image'=>'GdImage', 'thickness'=>'int'],
'openssl_get_cipher_methods' => ['array', 'aliases='=>'bool'], ],
'openssl_get_curve_names' => ['list<string>'], 'imagesettile' => [
'openssl_get_md_methods' => ['array', 'aliases='=>'bool'], 'old' => ['bool', 'image'=>'resource', 'tile'=>'resource'],
'openssl_get_privatekey' => ['resource|false', 'private_key'=>'string', 'passphrase='=>'string'], 'new' => ['bool', 'image'=>'GdImage', 'tile'=>'GdImage'],
'openssl_get_publickey' => ['resource|false', 'public_key'=>'resource|string'], ],
'openssl_open' => ['bool', 'data'=>'string', '&w_output'=>'string', 'encrypted_key'=>'string', 'private_key'=>'string|array|resource', 'cipher_algo'=>'string', 'iv='=>'string'], 'imagestring' => [
'openssl_pbkdf2' => ['string|false', 'password'=>'string', 'salt'=>'string', 'key_length'=>'int', 'iterations'=>'int', 'digest_algo='=>'string'], 'old' => ['bool', 'image'=>'resource', 'font'=>'int', 'x'=>'int', 'y'=>'int', 'string'=>'string', 'color'=>'int'],
'openssl_pkcs12_export' => ['bool', 'certificate'=>'string|resource', '&w_output'=>'string', 'private_key'=>'string|array|resource', 'passphrase'=>'string', 'options='=>'array'], 'new' => ['bool', 'image'=>'GdImage', 'font'=>'int', 'x'=>'int', 'y'=>'int', 'string'=>'string', 'color'=>'int'],
'openssl_pkcs12_export_to_file' => ['bool', 'certificate'=>'string|resource', 'output_filename'=>'string', 'private_key'=>'string|array|resource', 'passphrase'=>'string', 'options='=>'array'], ],
'openssl_pkcs12_read' => ['bool', 'pkcs12'=>'string', '&w_certificates'=>'array', 'passphrase'=>'string'], 'imagestringup' => [
'openssl_pkcs7_decrypt' => ['bool', 'input_filename'=>'string', 'output_filename'=>'string', 'certificate'=>'string|resource', 'private_key='=>'string|resource|array'], 'old' => ['bool', 'image'=>'resource', 'font'=>'int', 'x'=>'int', 'y'=>'int', 'string'=>'string', 'color'=>'int'],
'openssl_pkcs7_encrypt' => ['bool', 'input_filename'=>'string', 'output_filename'=>'string', 'certificate'=>'string|resource|array', 'headers'=>'array', 'flags='=>'int', 'cipher_algo='=>'int'], 'new' => ['bool', 'image'=>'GdImage', 'font'=>'int', 'x'=>'int', 'y'=>'int', 'string'=>'string', 'color'=>'int'],
'openssl_pkcs7_read' => ['bool', 'input_filename'=>'string', '&w_certificates'=>'array'], ],
'openssl_pkcs7_sign' => ['bool', 'input_filename'=>'string', 'output_filename'=>'string', 'certificate'=>'string|resource', 'private_key'=>'string|resource|array', 'headers'=>'array', 'flags='=>'int', 'untrusted_certificates_filename='=>'string'], 'imagesx' => [
'openssl_pkcs7_verify' => ['bool|int', 'input_filename'=>'string', 'flags'=>'int', 'signers_certificates_filename='=>'string', 'ca_info='=>'array', 'untrusted_certificates_filename='=>'string', 'content='=>'string', 'output_filename='=>'string'], 'old' => ['int|false', 'image'=>'resource'],
'openssl_pkey_derive' => ['string|false', 'public_key'=>'mixed', 'private_key'=>'mixed', 'key_length='=>'?int'], 'new' => ['int', 'image'=>'GdImage'],
'openssl_pkey_export' => ['bool', 'key'=>'resource', '&w_output'=>'string', 'passphrase='=>'?string', 'options='=>'array'], ],
'openssl_pkey_export_to_file' => ['bool', 'key'=>'resource|string|array', 'output_filename'=>'string', 'passphrase='=>'?string', 'options='=>'array'], 'imagesy' => [
'openssl_pkey_free' => ['void', 'key'=>'resource'], 'old' => ['int|false', 'image'=>'resource'],
'openssl_pkey_get_details' => ['array|false', 'key'=>'resource'], 'new' => ['int', 'image'=>'GdImage'],
'openssl_pkey_get_private' => ['resource|false', 'private_key'=>'string', 'passphrase='=>'string'], ],
'openssl_pkey_get_public' => ['resource|false', 'public_key'=>'resource|string'], 'imagetruecolortopalette' => [
'openssl_pkey_new' => ['resource|false', 'options='=>'array'], 'old' => ['bool', 'image'=>'resource', 'dither'=>'bool', 'num_colors'=>'int'],
'openssl_private_decrypt' => ['bool', 'data'=>'string', '&w_decrypted_data'=>'string', 'private_key'=>'string|resource|array', 'padding='=>'int'], 'new' => ['bool', 'image'=>'GdImage', 'dither'=>'bool', 'num_colors'=>'int'],
'openssl_private_encrypt' => ['bool', 'data'=>'string', '&w_encrypted_data'=>'string', 'private_key'=>'string|resource|array', 'padding='=>'int'], ],
'openssl_public_decrypt' => ['bool', 'data'=>'string', '&w_decrypted_data'=>'string', 'public_key'=>'string|resource', 'padding='=>'int'], 'imagettftext' => [
'openssl_public_encrypt' => ['bool', 'data'=>'string', '&w_encrypted_data'=>'string', 'public_key'=>'string|resource', 'padding='=>'int'], 'old' => ['false|array<int,int>', 'image'=>'resource', 'size'=>'float', 'angle'=>'float', 'x'=>'int', 'y'=>'int', 'color'=>'int', 'font_filename'=>'string', 'text'=>'string', 'options='=>'array'],
'openssl_random_pseudo_bytes' => ['string|false', 'length'=>'int', '&w_strong_result='=>'bool'], 'new' => ['false|array<int,int>', 'image'=>'GdImage', 'size'=>'float', 'angle'=>'float', 'x'=>'int', 'y'=>'int', 'color'=>'int', 'font_filename'=>'string', 'text'=>'string', 'options='=>'array'],
'openssl_seal' => ['int|false', 'data'=>'string', '&w_sealed_data'=>'string', '&rw_encrypted_keys'=>'array', 'public_key'=>'array', 'cipher_algo'=>'string', '&iv='=>'string'], ],
'openssl_sign' => ['bool', 'data'=>'string', '&w_signature'=>'string', 'private_key'=>'resource|string', 'algorithm='=>'int|string'], 'imagewbmp' => [
'openssl_spki_export' => ['?string', 'spki'=>'string'], 'old' => ['bool', 'image'=>'resource', 'file='=>'?string', 'foreground_color='=>'int'],
'openssl_spki_export_challenge' => ['?string', 'spki'=>'string'], 'new' => ['bool', 'image'=>'GdImage', 'file='=>'?string', 'foreground_color='=>'int'],
'openssl_spki_new' => ['?string', 'private_key'=>'resource', 'challenge'=>'string', 'digest_algo='=>'int'], ],
'openssl_spki_verify' => ['bool', 'spki'=>'string'], 'imagewebp' => [
'openssl_verify' => ['int', 'data'=>'string', 'signature'=>'string', 'public_key'=>'resource|string', 'algorithm='=>'int|string'], 'old' => ['bool', 'image'=>'resource', 'file='=>'?string', 'quality='=>'int'],
'openssl_x509_check_private_key' => ['bool', 'certificate'=>'string|resource', 'private_key'=>'string|resource|array'], 'new' => ['bool', 'image'=>'GdImage', 'file='=>'?string', 'quality='=>'int'],
'openssl_x509_checkpurpose' => ['bool|int', 'certificate'=>'string|resource', 'purpose'=>'int', 'ca_info='=>'array', 'untrusted_certificates_file='=>'string'], ],
'openssl_x509_export' => ['bool', 'certificate'=>'string|resource', '&w_output'=>'string', 'no_text='=>'bool'], 'imagexbm' => [
'openssl_x509_export_to_file' => ['bool', 'certificate'=>'string|resource', 'output_filename'=>'string', 'no_text='=>'bool'], 'old' => ['bool', 'image'=>'resource', 'filename'=>'?string', 'foreground_color='=>'int'],
'openssl_x509_fingerprint' => ['string|false', 'certificate'=>'string|resource', 'digest_algo='=>'string', 'binary='=>'bool'], 'new' => ['bool', 'image'=>'GdImage', 'filename'=>'?string', 'foreground_color='=>'int'],
'openssl_x509_free' => ['void', 'certificate'=>'resource'], ],
'openssl_x509_parse' => ['array|false', 'certificate'=>'string|resource', 'short_names='=>'bool'], 'imap_mailboxmsginfo' => [
'openssl_x509_read' => ['resource|false', 'certificate'=>'string|resource'], 'old' => ['stdClass|false', 'imap'=>'resource'],
'openssl_x509_verify' => ['int', 'certificate'=>'string|resource', 'public_key'=>'string|resource'], 'new' => ['stdClass', 'imap'=>'resource'],
'parse_str' => ['void', 'string'=>'string', '&w_result'=>'array'], ],
'password_hash' => ['string|false|null', 'password'=>'string', 'algo'=>'?string|?int', 'options='=>'array'], 'inflate_add' => [
'pg_fetch_all' => ['array<int,array>|false', 'result'=>'resource', 'mode='=>'int'], 'old' => ['string|false', 'context'=>'resource', 'data'=>'string', 'flush_mode='=>'int'],
'pg_fetch_all_columns' => ['array<int,?string>|false', 'result'=>'resource', 'field='=>'int'], 'new' => ['string|false', 'context'=>'InflateContext', 'data'=>'string', 'flush_mode='=>'int'],
'png2wbmp' => ['bool', 'pngname'=>'string', 'wbmpname'=>'string', 'dest_height'=>'int', 'dest_width'=>'int', 'threshold'=>'int'], ],
'proc_get_status' => ['array<string,int|string|bool>|false', 'process'=>'resource'], 'inflate_get_read_len' => [
'read_exif_data' => ['array', 'filename'=>'string', 'sections_needed='=>'string', 'sub_arrays='=>'bool', 'read_thumbnail='=>'bool'], 'old' => ['int|false', 'context'=>'resource'],
'sem_acquire' => ['bool', 'semaphore'=>'resource', 'non_blocking='=>'bool'], 'new' => ['int', 'context'=>'InflateContext'],
'sem_get' => ['resource|false', 'key'=>'int', 'max_acquire='=>'int', 'permissions='=>'int', 'auto_release='=>'bool'], ],
'sem_release' => ['bool', 'semaphore'=>'resource'], 'inflate_get_status' => [
'sem_remove' => ['bool', 'semaphore'=>'resource'], 'old' => ['int|false', 'context'=>'resource'],
'shm_attach' => ['resource', 'key'=>'int', 'size='=>'int', 'permissions='=>'int'], 'new' => ['int', 'context'=>'InflateContext'],
'shm_detach' => ['bool', 'shm'=>'resource'], ],
'shm_get_var' => ['mixed', 'shm'=>'resource', 'key'=>'int'], 'inflate_init' => [
'shm_has_var' => ['bool', 'shm'=>'resource', 'key'=>'int'], 'old' => ['resource|false', 'encoding'=>'int', 'options='=>'array'],
'shm_put_var' => ['bool', 'shm'=>'resource', 'key'=>'int', 'value'=>'mixed'], 'new' => ['InflateContext|false', 'encoding'=>'int', 'options='=>'array'],
'shm_remove' => ['bool', 'shm'=>'resource'], ],
'shm_remove_var' => ['bool', 'shm'=>'resource', 'key'=>'int'], 'ldap_count_entries' => [
'shmop_close' => ['void', 'shmop'=>'resource'], 'old' => ['int|false', 'ldap'=>'resource', 'result'=>'resource'],
'shmop_delete' => ['bool', 'shmop'=>'resource'], 'new' => ['int', 'ldap'=>'resource', 'result'=>'resource'],
'shmop_open' => ['resource|false', 'key'=>'int', 'mode'=>'string', 'permissions'=>'int', 'size'=>'int'], ],
'shmop_read' => ['string|false', 'shmop'=>'resource', 'offset'=>'int', 'size'=>'int'], 'ldap_get_attributes' => [
'shmop_size' => ['int', 'shmop'=>'resource'], 'old' => ['array|false', 'ldap'=>'resource', 'entry'=>'resource'],
'shmop_write' => ['int|false', 'shmop'=>'resource', 'data'=>'string', 'offset'=>'int'], 'new' => ['array', 'ldap'=>'resource', 'entry'=>'resource'],
'simplexml_import_dom' => ['SimpleXMLElement|false', 'node'=>'DOMNode', 'class_name='=>'string'], ],
'sleep' => ['int|false', 'seconds'=>'int'], 'mb_convert_case' => [
'socket_accept' => ['resource|false', 'socket'=>'resource'], 'old' => ['string|false', 'string'=>'string', 'mode'=>'int', 'encoding='=>'string'],
'socket_addrinfo_bind' => ['?resource', 'address'=>'resource'], 'new' => ['string', 'string'=>'string', 'mode'=>'int', 'encoding='=>'string'],
'socket_addrinfo_connect' => ['?resource', 'address'=>'resource'], ],
'socket_addrinfo_explain' => ['array', 'address'=>'resource'], 'mb_convert_kana' => [
'socket_addrinfo_lookup' => ['resource[]', 'host'=>'string', 'service='=>'?string', 'hints='=>'array'], 'old' => ['string|false', 'string'=>'string', 'mode='=>'string', 'encoding='=>'string'],
'socket_bind' => ['bool', 'socket'=>'resource', 'address'=>'string', 'port='=>'int'], 'new' => ['string', 'string'=>'string', 'mode='=>'string', 'encoding='=>'string'],
'socket_clear_error' => ['void', 'socket='=>'resource'], ],
'socket_close' => ['void', 'socket'=>'resource'], 'mb_decode_numericentity' => [
'socket_connect' => ['bool', 'socket'=>'resource', 'address'=>'string', 'port='=>'int'], 'old' => ['string|false', 'string'=>'string', 'map'=>'array', 'encoding='=>'string', 'is_hex='=>'bool'],
'socket_create' => ['resource|false', 'domain'=>'int', 'type'=>'int', 'protocol'=>'int'], 'new' => ['string', 'string'=>'string', 'map'=>'array', 'encoding='=>'string'],
'socket_create_listen' => ['resource|false', 'port'=>'int', 'backlog='=>'int'], ],
'socket_create_pair' => ['bool', 'domain'=>'int', 'type'=>'int', 'protocol'=>'int', '&w_pair'=>'resource[]'], 'mb_encode_mimeheader' => [
'socket_export_stream' => ['resource|false', 'socket'=>'resource'], 'old' => ['string|false', 'string'=>'string', 'charset='=>'string', 'transfer_encoding='=>'string', 'newline='=>'string', 'indent='=>'int'],
'socket_get_option' => ['array|false|int', 'socket'=>'resource', 'level'=>'int', 'option'=>'int'], 'new' => ['string', 'string'=>'string', 'charset='=>'string', 'transfer_encoding='=>'string', 'newline='=>'string', 'indent='=>'int'],
'socket_getopt' => ['array|false|int', 'socket'=>'resource', 'level'=>'int', 'option'=>'int'], ],
'socket_getpeername' => ['bool', 'socket'=>'resource', '&w_address'=>'string', '&w_port='=>'int'], 'mb_encode_numericentity' => [
'socket_getsockname' => ['bool', 'socket'=>'resource', '&w_address'=>'string', '&w_port='=>'int'], 'old' => ['string|false', 'string'=>'string', 'map'=>'array', 'encoding='=>'string', 'hex='=>'bool'],
'socket_import_stream' => ['resource|false|null', 'stream'=>'resource'], 'new' => ['string', 'string'=>'string', 'map'=>'array', 'encoding='=>'string', 'hex='=>'bool'],
'socket_last_error' => ['int', 'socket='=>'resource'], ],
'socket_listen' => ['bool', 'socket'=>'resource', 'backlog='=>'int'], 'mb_encoding_aliases' => [
'socket_read' => ['string|false', 'socket'=>'resource', 'length'=>'int', 'mode='=>'int'], 'old' => ['list<string>|false', 'encoding'=>'string'],
'socket_recv' => ['int|false', 'socket'=>'resource', '&w_data'=>'string', 'length'=>'int', 'flags'=>'int'], 'new' => ['list<string>', 'encoding'=>'string'],
'socket_recvfrom' => ['int|false', 'socket'=>'resource', '&w_data'=>'string', 'length'=>'int', 'flags'=>'int', '&w_address'=>'string', '&w_port='=>'int'], ],
'socket_recvmsg' => ['int|false', 'socket'=>'resource', '&w_message'=>'array', 'flags='=>'int'], 'mb_ereg' => [
'socket_select' => ['int|false', '&rw_read'=>'resource[]|null', '&rw_write'=>'resource[]|null', '&rw_except'=>'resource[]|null', 'seconds'=>'int', 'microseconds='=>'int'], 'old' => ['int|false', 'pattern'=>'string', 'string'=>'string', '&w_matches='=>'array'],
'socket_send' => ['int|false', 'socket'=>'resource', 'data'=>'string', 'length'=>'int', 'flags'=>'int'], 'new' => ['bool', 'pattern'=>'string', 'string'=>'string', '&w_matches='=>'array'],
'socket_sendmsg' => ['int|false', 'socket'=>'resource', 'message'=>'array', 'flags='=>'int'], ],
'socket_sendto' => ['int|false', 'socket'=>'resource', 'data'=>'string', 'length'=>'int', 'flags'=>'int', 'address'=>'string', 'port='=>'int'], 'mb_eregi' => [
'socket_set_block' => ['bool', 'socket'=>'resource'], 'old' => ['int|false', 'pattern'=>'string', 'string'=>'string', '&w_matches='=>'array'],
'socket_set_nonblock' => ['bool', 'socket'=>'resource'], 'new' => ['bool', 'pattern'=>'string', 'string'=>'string', '&w_matches='=>'array'],
'socket_set_option' => ['bool', 'socket'=>'resource', 'level'=>'int', 'option'=>'int', 'value'=>'int|string|array'], ],
'socket_set_timeout' => ['bool', 'stream'=>'resource', 'seconds'=>'int', 'microseconds='=>'int'], 'mb_scrub' => [
'socket_setopt' => ['bool', 'socket'=>'resource', 'level'=>'int', 'option'=>'int', 'value'=>'int|string|array'], 'old' => ['string|false', 'string'=>'string', 'encoding='=>'string'],
'socket_shutdown' => ['bool', 'socket'=>'resource', 'mode='=>'int'], 'new' => ['string', 'string'=>'string', 'encoding='=>'string'],
'socket_strerror' => ['string', 'error_code'=>'int'], ],
'socket_write' => ['int|false', 'socket'=>'resource', 'data'=>'string', 'length='=>'int'], 'mb_strcut' => [
'socket_wsaprotocol_info_export' => ['string|false', 'socket'=>'resource', 'process_id'=>'int'], 'old' => ['string|false', 'string'=>'string', 'start'=>'int', 'length='=>'int', 'encoding='=>'string'],
'socket_wsaprotocol_info_import' => ['resource|false', 'info_id'=>'string'], 'new' => ['string', 'string'=>'string', 'start'=>'int', 'length='=>'int', 'encoding='=>'string'],
'socket_wsaprotocol_info_release' => ['bool', 'info_id'=>'string'], ],
'SplFileObject::fgetss' => ['string|false', 'allowable_tags='=>'string'], 'mb_strimwidth' => [
'substr' => ['string|false', 'string'=>'string', 'offset'=>'int', 'length='=>'int'], 'old' => ['string|false', 'string'=>'string', 'start'=>'int', 'width'=>'int', 'trim_marker='=>'string', 'encoding='=>'string'],
'strchr' => ['string|false', 'haystack'=>'string', 'needle'=>'string|int', 'before_needle='=>'bool'], 'new' => ['string', 'string'=>'string', 'start'=>'int', 'width'=>'int', 'trim_marker='=>'string', 'encoding='=>'string'],
'stream_bucket_new' => ['resource|false', 'stream'=>'resource', 'buffer'=>'string'], ],
'stream_set_chunk_size' => ['int|false', 'stream'=>'resource', 'size'=>'int'], 'mb_strlen' => [
'stripos' => ['int|false', 'haystack'=>'string', 'needle'=>'string|int', 'offset='=>'int'], 'old' => ['int|false', 'string'=>'string', 'encoding='=>'string'],
'stristr' => ['string|false', 'haystack'=>'string', 'needle'=>'string|int', 'before_needle='=>'bool'], 'new' => ['int', 'string'=>'string', 'encoding='=>'string'],
'strpos' => ['int|false', 'haystack'=>'string', 'needle'=>'string|int', 'offset='=>'int'], ],
'strrchr' => ['string|false', 'haystack'=>'string', 'needle'=>'string|int'], 'mb_strtolower' => [
'strripos' => ['int|false', 'haystack'=>'string', 'needle'=>'string|int', 'offset='=>'int'], 'old' => ['string|false', 'string'=>'string', 'encoding='=>'string'],
'strrpos' => ['int|false', 'haystack'=>'string', 'needle'=>'string|int', 'offset='=>'int'], 'new' => ['string', 'string'=>'string', 'encoding='=>'string'],
'strstr' => ['string|false', 'haystack'=>'string', 'needle'=>'string|int', 'before_needle='=>'bool'], ],
'substr_compare' => ['int|false', 'haystack'=>'string', 'needle'=>'string', 'offset'=>'int', 'length='=>'int', 'case_insensitive='=>'bool'], 'mb_strtoupper' => [
'timezone_identifiers_list' => ['list<string>|false', 'timezoneGroup='=>'int', 'countryCode='=>'?string'], 'old' => ['string|false', 'string'=>'string', 'encoding='=>'string'],
'timezone_offset_get' => ['int|false', 'object'=>'DateTimeZone', 'datetime'=>'DateTimeInterface'], 'new' => ['string', 'string'=>'string', 'encoding='=>'string'],
'version_compare' => ['int|bool', 'version1'=>'string', 'version2'=>'string', 'operator='=>'\'\x3c\'|\'lt\'|\'\x3c=\'|\'le\'|\'\x3e\'|\'gt\'|\'\x3e=\'|\'ge\'|\'==\'|\'=\'|\'eq\'|\'!=\'|\'\x3c\x3e\'|\'ne\''], ],
'xml_parser_create' => ['resource', 'encoding='=>'string'], 'mb_strwidth' => [
'xml_parser_create_ns' => ['resource', 'encoding='=>'string', 'separator='=>'string'], 'old' => ['int|false', 'string'=>'string', 'encoding='=>'string'],
'xml_parser_free' => ['bool', 'parser'=>'resource'], 'new' => ['int', 'string'=>'string', 'encoding='=>'string'],
'xml_parser_get_option' => ['mixed|false', 'parser'=>'resource', 'option'=>'int'], ],
'xml_parser_set_option' => ['bool', 'parser'=>'resource', 'option'=>'int', 'value'=>'int|string'], 'mb_substr' => [
'xml_set_character_data_handler' => ['bool', 'parser'=>'resource', 'handler'=>'callable'], 'old' => ['string|false', 'string'=>'string', 'start'=>'int', 'length='=>'?int', 'encoding='=>'string'],
'xml_set_default_handler' => ['bool', 'parser'=>'resource', 'handler'=>'callable'], 'new' => ['string', 'string'=>'string', 'start'=>'int', 'length='=>'?int', 'encoding='=>'string'],
'xml_set_element_handler' => ['bool', 'parser'=>'resource', 'start_handler'=>'callable', 'end_handler'=>'callable'], ],
'xml_set_end_namespace_decl_handler' => ['bool', 'parser'=>'resource', 'handler'=>'callable'], 'mb_substr_count' => [
'xml_set_external_entity_ref_handler' => ['bool', 'parser'=>'resource', 'handler'=>'callable'], 'old' => ['int|false', 'haystack'=>'string', 'needle'=>'string', 'encoding='=>'string'],
'xml_set_notation_decl_handler' => ['bool', 'parser'=>'resource', 'handler'=>'callable'], 'new' => ['int', 'haystack'=>'string', 'needle'=>'string', 'encoding='=>'string'],
'xml_set_object' => ['bool', 'parser'=>'resource', 'object'=>'object'], ],
'xml_set_processing_instruction_handler' => ['bool', 'parser'=>'resource', 'handler'=>'callable'], 'msg_get_queue' => [
'xml_set_start_namespace_decl_handler' => ['bool', 'parser'=>'resource', 'handler'=>'callable'], 'old' => ['resource', 'key'=>'int', 'permissions='=>'int'],
'xml_set_unparsed_entity_decl_handler' => ['bool', 'parser'=>'resource', 'handler'=>'callable'], 'new' => ['SysvMessageQueue', 'key'=>'int', 'permissions='=>'int'],
'xml_parse' => ['int', 'parser'=>'resource', 'data'=>'string', 'is_final='=>'bool'], ],
'xml_parse_into_struct' => ['int', 'parser'=>'resource', 'data'=>'string', '&w_values'=>'array', '&w_index='=>'array'], 'msg_remove_queue' => [
'xml_get_current_byte_index' => ['int|false', 'parser'=>'resource'], 'old' => ['bool', 'queue'=>'resource'],
'xml_get_current_column_number' => ['int|false', 'parser'=>'resource'], 'new' => ['bool', 'queue'=>'SysvMessageQueue'],
'xml_get_current_line_number' => ['int|false', 'parser'=>'resource'], ],
'xml_get_error_code' => ['int|false', 'parser'=>'resource'], 'msg_send' => [
'xmlwriter_end_attribute' => ['bool', 'writer'=>'resource'], 'old' => ['bool', 'queue'=>'resource', 'message_type'=>'int', 'message'=>'array|object|bool|float|int|string|null', 'serialize='=>'bool', 'blocking='=>'bool', '&w_error_code='=>'int'],
'xmlwriter_end_cdata' => ['bool', 'writer'=>'resource'], 'new' => ['bool', 'queue'=>'SysvMessageQueue', 'message_type'=>'int', 'message'=>'array|object|bool|float|int|string|null', 'serialize='=>'bool', 'blocking='=>'bool', '&w_error_code='=>'int'],
'xmlwriter_end_comment' => ['bool', 'writer'=>'resource'], ],
'xmlwriter_end_document' => ['bool', 'writer'=>'resource'], 'msg_set_queue' => [
'xmlwriter_end_dtd' => ['bool', 'writer'=>'resource'], 'old' => ['bool', 'queue'=>'resource', 'data'=>'array'],
'xmlwriter_end_dtd_attlist' => ['bool', 'writer'=>'resource'], 'new' => ['bool', 'queue'=>'SysvMessageQueue', 'data'=>'array'],
'xmlwriter_end_dtd_element' => ['bool', 'writer'=>'resource'], ],
'xmlwriter_end_dtd_entity' => ['bool', 'writer'=>'resource'], 'msg_stat_queue' => [
'xmlwriter_end_element' => ['bool', 'writer'=>'resource'], 'old' => ['array', 'queue'=>'resource'],
'xmlwriter_end_pi' => ['bool', 'writer'=>'resource'], 'new' => ['array', 'queue'=>'SysvMessageQueue'],
'xmlwriter_flush' => ['int|string', 'writer'=>'resource', 'empty='=>'bool'], ],
'xmlwriter_full_end_element' => ['bool', 'writer'=>'resource'], 'mysqli_fetch_fields' => [
'xmlwriter_open_memory' => ['resource'], 'old' => ['?array<int,object>', 'result'=>'mysqli_result'],
'xmlwriter_open_uri' => ['resource', 'uri'=>'string'], 'new' => ['array<int,object>', 'result'=>'mysqli_result'],
'xmlwriter_output_memory' => ['string', 'writer'=>'resource', 'flush='=>'bool'], ],
'xmlwriter_set_indent' => ['bool', 'writer'=>'resource', 'enable'=>'bool'], 'mysqli_get_client_stats' => [
'xmlwriter_set_indent_string' => ['bool', 'writer'=>'resource', 'indentation'=>'string'], 'old' => ['array|false'],
'xmlwriter_start_attribute' => ['bool', 'writer'=>'resource', 'name'=>'string'], 'new' => ['array'],
'xmlwriter_start_attribute_ns' => ['bool', 'writer'=>'resource', 'prefix'=>'string', 'name'=>'string', 'namespace'=>'string'], ],
'xmlwriter_start_cdata' => ['bool', 'writer'=>'resource'], 'mysqli_get_connection_stats' => [
'xmlwriter_start_comment' => ['bool', 'writer'=>'resource'], 'old' => ['array|false', 'mysql'=>'mysqli'],
'xmlwriter_start_document' => ['bool', 'writer'=>'resource', 'version='=>'string', 'encoding='=>'string', 'standalone='=>'string'], 'new' => ['array', 'mysql'=>'mysqli'],
'xmlwriter_start_dtd' => ['bool', 'writer'=>'resource', 'qualifiedName'=>'string', 'publicId='=>'string', 'systemId='=>'string'], ],
'xmlwriter_start_dtd_attlist' => ['bool', 'writer'=>'resource', 'name'=>'string'], 'mysqli_stmt_attr_get' => [
'xmlwriter_start_dtd_element' => ['bool', 'writer'=>'resource', 'qualifiedName'=>'string'], 'old' => ['int|false', 'statement'=>'mysqli_stmt', 'attribute'=>'int'],
'xmlwriter_start_dtd_entity' => ['bool', 'writer'=>'resource', 'name'=>'string', 'isParam'=>'bool'], 'new' => ['int', 'statement'=>'mysqli_stmt', 'attribute'=>'int'],
'xmlwriter_start_element' => ['bool', 'writer'=>'resource', 'name'=>'string'], ],
'xmlwriter_start_element_ns' => ['bool', 'writer'=>'resource', 'prefix'=>'string', 'name'=>'string', 'namespace'=>'string'], 'numfmt_create' => [
'xmlwriter_start_pi' => ['bool', 'writer'=>'resource', 'target'=>'string'], 'old' => ['NumberFormatter|false', 'locale'=>'string', 'style'=>'int', 'pattern='=>'string'],
'xmlwriter_text' => ['bool', 'writer'=>'resource', 'content'=>'string'], 'new' => ['NumberFormatter|null', 'locale'=>'string', 'style'=>'int', 'pattern='=>'string'],
'xmlwriter_write_attribute' => ['bool', 'writer'=>'resource', 'name'=>'string', 'value'=>'string'], ],
'xmlwriter_write_attribute_ns' => ['bool', 'writer'=>'resource', 'prefix'=>'string', 'name'=>'string', 'namespace'=>'string', 'value'=>'string'], 'ob_implicit_flush' => [
'xmlwriter_write_cdata' => ['bool', 'writer'=>'resource', 'content'=>'string'], 'old' => ['void', 'enable='=>'int'],
'xmlwriter_write_comment' => ['bool', 'writer'=>'resource', 'content'=>'string'], 'new' => ['void', 'enable='=>'bool'],
'xmlwriter_write_dtd' => ['bool', 'writer'=>'resource', 'name'=>'string', 'publicId='=>'string', 'systemId='=>'string', 'content='=>'string'], ],
'xmlwriter_write_dtd_attlist' => ['bool', 'writer'=>'resource', 'name'=>'string', 'content'=>'string'], 'oci_collection_append' => [
'xmlwriter_write_dtd_element' => ['bool', 'writer'=>'resource', 'name'=>'string', 'content'=>'string'], 'old' => ['bool', 'collection'=>'resource', 'value'=>'string'],
'xmlwriter_write_dtd_entity' => ['bool', 'writer'=>'resource', 'name'=>'string', 'content'=>'string', 'isParam='=>'bool', 'publicId='=>'string', 'systemId='=>'string', 'notationData='=>'string'], 'new' => ['bool', 'collection'=>'OCICollection', 'value'=>'string'],
'xmlwriter_write_element' => ['bool', 'writer'=>'resource', 'name'=>'string', 'content='=>'string'], ],
'xmlwriter_write_element_ns' => ['bool', 'writer'=>'resource', 'prefix'=>'string', 'name'=>'string', 'namespace'=>'string', 'content='=>'string'], 'oci_collection_assign' => [
'xmlwriter_write_pi' => ['bool', 'writer'=>'resource', 'target'=>'string', 'content'=>'string'], 'old' => ['bool', 'to'=>'resource', 'from'=>'object'],
'xmlwriter_write_raw' => ['bool', 'writer'=>'resource', 'content'=>'string'], 'new' => ['bool', 'to'=>'OCICollection', 'from'=>'OCICollection'],
], ],
'oci_collection_element_assign' => [
'old' => ['bool', 'collection'=>'resource', 'index'=>'int', 'value'=>'string'],
'new' => ['bool', 'collection'=>'OCICollection', 'index'=>'int', 'value'=>'string'],
],
'oci_collection_element_get' => [
'old' => ['string', 'collection'=>'resource', 'index'=>'int'],
'new' => ['string', 'collection'=>'OCICollection', 'index'=>'int'],
],
'oci_collection_max' => [
'old' => ['int', 'collection'=>'resource'],
'new' => ['int', 'collection'=>'OCICollection'],
],
'oci_collection_size' => [
'old' => ['int', 'collection'=>'resource'],
'new' => ['int', 'collection'=>'OCICollection'],
],
'oci_collection_trim' => [
'old' => ['bool', 'collection'=>'resource', 'num'=>'int'],
'new' => ['bool', 'collection'=>'OCICollection', 'num'=>'int'],
],
'oci_fetch_all' => [
'old' => ['int|false', 'statement'=>'resource', '&w_output'=>'array', 'offset='=>'int', 'limit='=>'int', 'flags='=>'int'],
'new' => ['int', 'statement'=>'resource', '&w_output'=>'array', 'offset='=>'int', 'limit='=>'int', 'flags='=>'int'],
],
'oci_free_collection' => [
'old' => ['bool', 'collection'=>'resource'],
'new' => ['bool', 'collection'=>'OCICollection'],
],
'oci_free_descriptor' => [
'old' => ['bool', 'lob'=>'resource'],
'new' => ['bool', 'lob'=>'OCILob'],
],
'oci_new_descriptor' => [
'old' => ['OCILob|false', 'connection'=>'resource', 'type='=>'int'],
'new' => ['?OCILob', 'connection'=>'resource', 'type='=>'int'],
],
'openssl_csr_export' => [
'old' => ['bool', 'csr'=>'string|resource', '&w_output'=>'string', 'no_text='=>'bool'],
'new' => ['bool', 'csr'=>'string|OpenSSLCertificateSigningRequest', '&w_output'=>'OpenSSLAsymmetricKey', 'no_text='=>'bool'],
],
'openssl_csr_export_to_file' => [
'old' => ['bool', 'csr'=>'string|resource', 'output_filename'=>'string', 'no_text='=>'bool'],
'new' => ['bool', 'csr'=>'string|OpenSSLCertificateSigningRequest', 'output_filename'=>'string', 'no_text='=>'bool'],
],
'openssl_csr_get_public_key' => [
'old' => ['resource|false', 'csr'=>'string|resource', 'short_names='=>'bool'],
'new' => ['OpenSSLAsymmetricKey|false', 'csr'=>'string|OpenSSLCertificateSigningRequest', 'short_names='=>'bool'],
],
'openssl_csr_get_subject' => [
'old' => ['array|false', 'csr'=>'string|resource', 'short_names='=>'bool'],
'new' => ['array|false', 'csr'=>'string|OpenSSLCertificateSigningRequest', 'short_names='=>'bool'],
],
'openssl_csr_new' => [
'old' => ['resource|false', 'distinguished_names'=>'array', '&w_private_key'=>'resource', 'options='=>'array', 'extra_attributes='=>'array'],
'new' => ['OpenSSLCertificateSigningRequest|false', 'distinguished_names'=>'array', '&w_private_key'=>'OpenSSLAsymmetricKey', 'options='=>'array', 'extra_attributes='=>'array'],
],
'openssl_csr_sign' => [
'old' => ['resource|false', 'csr'=>'string|resource', 'ca_certificate'=>'string|resource|null', 'private_key'=>'string|resource|array', 'days'=>'int', 'options='=>'array', 'serial='=>'int'],
'new' => ['OpenSSLCertificate|false', 'csr'=>'string|OpenSSLCertificateSigningRequest', 'ca_certificate'=>'string|OpenSSLCertificate|null', 'private_key'=>'string|OpenSSLAsymmetricKey|OpenSSLCertificate|array', 'days'=>'int', 'options='=>'array', 'serial='=>'int'],
],
'openssl_dh_compute_key' => [
'old' => ['string|false', 'public_key'=>'string', 'private_key'=>'resource'],
'new' => ['string|false', 'public_key'=>'string', 'private_key'=>'OpenSSLAsymmetricKey'],
],
'openssl_free_key' => [
'old' => ['void', 'key'=>'resource'],
'new' => ['void', 'key'=>'OpenSSLAsymmetricKey'],
],
'openssl_get_privatekey' => [
'old' => ['resource|false', 'private_key'=>'string', 'passphrase='=>'string'],
'new' => ['OpenSSLAsymmetricKey|false', 'private_key'=>'string', 'passphrase='=>'string'],
],
'openssl_get_publickey' => [
'old' => ['resource|false', 'public_key'=>'resource|string'],
'new' => ['OpenSSLAsymmetricKey|false', 'public_key'=>'OpenSSLAsymmetricKey|OpenSSLCertificate|array|string'],
],
'openssl_open' => [
'old' => ['bool', 'data'=>'string', '&w_output'=>'string', 'encrypted_key'=>'string', 'private_key'=>'string|array|resource', 'cipher_algo'=>'string', 'iv='=>'string'],
'new' => ['bool', 'data'=>'string', '&w_output'=>'string', 'encrypted_key'=>'string', 'private_key'=>'OpenSSLAsymmetricKey|OpenSSLCertificate|array|string', 'cipher_algo'=>'string', 'iv='=>'string'],
],
'openssl_pkcs12_export' => [
'old' => ['bool', 'certificate'=>'string|resource', '&w_output'=>'string', 'private_key'=>'string|array|resource', 'passphrase'=>'string', 'options='=>'array'],
'new' => ['bool', 'certificate'=>'string|OpenSSLCertificate', '&w_output'=>'string', 'private_key'=>'OpenSSLAsymmetricKey|OpenSSLCertificate|array|string', 'passphrase'=>'string', 'options='=>'array'],
],
'openssl_pkcs12_export_to_file' => [
'old' => ['bool', 'certificate'=>'string|resource', 'output_filename'=>'string', 'private_key'=>'string|array|resource', 'passphrase'=>'string', 'options='=>'array'],
'new' => ['bool', 'certificate'=>'string|OpenSSLCertificate', 'output_filename'=>'string', 'private_key'=>'OpenSSLAsymmetricKey|OpenSSLCertificate|array|string', 'passphrase'=>'string', 'options='=>'array'],
],
'openssl_pkcs7_decrypt' => [
'old' => ['bool', 'input_filename'=>'string', 'output_filename'=>'string', 'certificate'=>'string|resource', 'private_key='=>'string|resource|array'],
'new' => ['bool', 'input_filename'=>'string', 'output_filename'=>'string', 'certificate'=>'OpenSSLCertificate|string', 'private_key='=>'OpenSSLAsymmetricKey|OpenSSLCertificate|array|null|string'],
],
'openssl_pkcs7_encrypt' => [
'old' => ['bool', 'input_filename'=>'string', 'output_filename'=>'string', 'certificate'=>'string|resource|array', 'headers'=>'array', 'flags='=>'int', 'cipher_algo='=>'int'],
'new' => ['bool', 'input_filename'=>'string', 'output_filename'=>'string', 'certificate'=>'OpenSSLCertificate|array|string', 'headers'=>'array', 'flags='=>'int', 'cipher_algo='=>'int'],
],
'openssl_pkcs7_sign' => [
'old' => ['bool', 'input_filename'=>'string', 'output_filename'=>'string', 'certificate'=>'string|resource', 'private_key'=>'string|resource|array', 'headers'=>'array', 'flags='=>'int', 'untrusted_certificates_filename='=>'string'],
'new' => ['bool', 'input_filename'=>'string', 'output_filename'=>'string', 'certificate'=>'OpenSSLCertificate|string', 'private_key'=>'OpenSSLAsymmetricKey|OpenSSLCertificate|array|string', 'headers'=>'array', 'flags='=>'int', 'untrusted_certificates_filename='=>'string'],
],
'openssl_pkey_derive' => [
'old' => ['string|false', 'public_key'=>'mixed', 'private_key'=>'mixed', 'key_length='=>'?int'],
'new' => ['string|false', 'public_key'=>'OpenSSLAsymmetricKey|OpenSSLCertificate|array|string', 'private_key'=>'OpenSSLAsymmetricKey|OpenSSLCertificate|array|string', 'key_length='=>'int'],
],
'openssl_pkey_export' => [
'old' => ['bool', 'key'=>'resource', '&w_output'=>'string', 'passphrase='=>'?string', 'options='=>'array'],
'new' => ['bool', 'key'=>'OpenSSLAsymmetricKey|OpenSSLCertificate|array|string', '&w_output'=>'string', 'passphrase='=>'?string', 'options='=>'array'],
],
'openssl_pkey_export_to_file' => [
'old' => ['bool', 'key'=>'resource|string|array', 'output_filename'=>'string', 'passphrase='=>'?string', 'options='=>'array'],
'new' => ['bool', 'key'=>'OpenSSLAsymmetricKey|OpenSSLCertificate|array|string', 'output_filename'=>'string', 'passphrase='=>'?string', 'options='=>'array'],
],
'openssl_pkey_free' => [
'old' => ['void', 'key'=>'resource'],
'new' => ['void', 'key'=>'OpenSSLAsymmetricKey'],
],
'openssl_pkey_get_details' => [
'old' => ['array|false', 'key'=>'resource'],
'new' => ['array|false', 'key'=>'OpenSSLAsymmetricKey'],
],
'openssl_pkey_get_private' => [
'old' => ['resource|false', 'private_key'=>'string', 'passphrase='=>'string'],
'new' => ['OpenSSLAsymmetricKey|false', 'private_key'=>'string', 'passphrase='=>'string'],
],
'openssl_pkey_get_public' => [
'old' => ['resource|false', 'public_key'=>'resource|string'],
'new' => ['OpenSSLAsymmetricKey|false', 'public_key'=>'OpenSSLAsymmetricKey|OpenSSLCertificate|array|string|string'],
],
'openssl_pkey_new' => [
'old' => ['resource|false', 'options='=>'array'],
'new' => ['OpenSSLAsymmetricKey|false', 'options='=>'array'],
],
'openssl_private_decrypt' => [
'old' => ['bool', 'data'=>'string', '&w_decrypted_data'=>'string', 'private_key'=>'string|resource|array', 'padding='=>'int'],
'new' => ['bool', 'data'=>'string', '&w_decrypted_data'=>'string', 'private_key'=>'OpenSSLAsymmetricKey|OpenSSLCertificate|array|string', 'padding='=>'int'],
],
'openssl_private_encrypt' => [
'old' => ['bool', 'data'=>'string', '&w_encrypted_data'=>'string', 'private_key'=>'string|resource|array', 'padding='=>'int'],
'new' => ['bool', 'data'=>'string', '&w_encrypted_data'=>'string', 'private_key'=>'OpenSSLAsymmetricKey|OpenSSLCertificate|array|string', 'padding='=>'int'],
],
'openssl_public_decrypt' => [
'old' => ['bool', 'data'=>'string', '&w_decrypted_data'=>'string', 'public_key'=>'string|resource', 'padding='=>'int'],
'new' => ['bool', 'data'=>'string', '&w_decrypted_data'=>'string', 'public_key'=>'OpenSSLAsymmetricKey|OpenSSLCertificate|array|string', 'padding='=>'int'],
],
'openssl_public_encrypt' => [
'old' => ['bool', 'data'=>'string', '&w_encrypted_data'=>'string', 'public_key'=>'string|resource', 'padding='=>'int'],
'new' => ['bool', 'data'=>'string', '&w_encrypted_data'=>'string', 'public_key'=>'OpenSSLAsymmetricKey|OpenSSLCertificate|array|string', 'padding='=>'int'],
],
'openssl_random_pseudo_bytes' => [
'old' => ['string|false', 'length'=>'int', '&w_strong_result='=>'bool'],
'new' => ['string', 'length'=>'int', '&w_strong_result='=>'bool'],
],
'openssl_sign' => [
'old' => ['bool', 'data'=>'string', '&w_signature'=>'string', 'private_key'=>'resource|string', 'algorithm='=>'int|string'],
'new' => ['bool', 'data'=>'string', '&w_signature'=>'string', 'private_key'=>'OpenSSLAsymmetricKey|OpenSSLCertificate|array|string', 'algorithm='=>'int|string'],
],
'openssl_spki_export' => [
'old' => ['?string', 'spki'=>'string'],
'new' => ['false|string', 'spki'=>'string'],
],
'openssl_spki_export_challenge' => [
'old' => ['?string', 'spki'=>'string'],
'new' => ['false|string', 'spki'=>'string'],
],
'openssl_spki_new' => [
'old' => ['?string', 'private_key'=>'resource', 'challenge'=>'string', 'digest_algo='=>'int'],
'new' => ['false|string', 'private_key'=>'OpenSSLAsymmetricKey', 'challenge'=>'string', 'digest_algo='=>'int'],
],
'openssl_verify' => [
'old' => ['int', 'data'=>'string', 'signature'=>'string', 'public_key'=>'resource|string', 'algorithm='=>'int|string'],
'new' => ['int', 'data'=>'string', 'signature'=>'string', 'public_key'=>'OpenSSLAsymmetricKey|OpenSSLCertificate|array|string', 'algorithm='=>'int|string'],
],
'openssl_x509_check_private_key' => [
'old' => ['bool', 'certificate'=>'string|resource', 'private_key'=>'string|resource|array'],
'new' => ['bool', 'certificate'=>'OpenSSLCertificate|string', 'private_key'=>'OpenSSLAsymmetricKey|OpenSSLCertificate|array|string'],
],
'openssl_x509_checkpurpose' => [
'old' => ['bool|int', 'certificate'=>'string|resource', 'purpose'=>'int', 'ca_info='=>'array', 'untrusted_certificates_file='=>'string'],
'new' => ['bool|int', 'certificate'=>'string|OpenSSLCertificate', 'purpose'=>'int', 'ca_info='=>'array', 'untrusted_certificates_file='=>'string'],
],
'openssl_x509_export' => [
'old' => ['bool', 'certificate'=>'string|resource', '&w_output'=>'string', 'no_text='=>'bool'],
'new' => ['bool', 'certificate'=>'string|OpenSSLCertificate', '&w_output'=>'string', 'no_text='=>'bool'],
],
'openssl_x509_export_to_file' => [
'old' => ['bool', 'certificate'=>'string|resource', 'output_filename'=>'string', 'no_text='=>'bool'],
'new' => ['bool', 'certificate'=>'string|OpenSSLCertificate', 'output_filename'=>'string', 'no_text='=>'bool'],
],
'openssl_x509_fingerprint' => [
'old' => ['string|false', 'certificate'=>'string|resource', 'digest_algo='=>'string', 'binary='=>'bool'],
'new' => ['string|false', 'certificate'=>'string|OpenSSLCertificate', 'digest_algo='=>'string', 'binary='=>'bool'],
],
'openssl_x509_free' => [
'old' => ['void', 'certificate'=>'resource'],
'new' => ['void', 'certificate'=>'OpenSSLCertificate'],
],
'openssl_x509_parse' => [
'old' => ['array|false', 'certificate'=>'string|resource', 'short_names='=>'bool'],
'new' => ['array|false', 'certificate'=>'string|OpenSSLCertificate', 'short_names='=>'bool'],
],
'openssl_x509_read' => [
'old' => ['resource|false', 'certificate'=>'string|resource'],
'new' => ['OpenSSLCertificate|false', 'certificate'=>'string|OpenSSLCertificate'],
],
'openssl_x509_verify' => [
'old' => ['int', 'certificate'=>'string|resource', 'public_key'=>'string|resource'],
'new' => ['int', 'certificate'=>'OpenSSLCertificate|string', 'public_key'=>'OpenSSLAsymmetricKey|OpenSSLCertificate|array|string'],
],
'password_hash' => [
'old' => ['string|false|null', 'password'=>'string', 'algo'=>'?string|?int', 'options='=>'array'],
'new' => ['string', 'password'=>'string', 'algo'=>'?string|?int', 'options='=>'array'],
],
'pg_fetch_all' => [
'old' => ['array<int,array>|false', 'result'=>'resource', 'mode='=>'int'],
'new' => ['array<int,array>', 'result'=>'resource', 'mode='=>'int'],
],
'pg_fetch_all_columns' => [
'old' => ['array<int,?string>|false', 'result'=>'resource', 'field='=>'int'],
'new' => ['array<int,?string>', 'result'=>'resource', 'field='=>'int'],
],
'proc_get_status' => [
'old' => ['array<string,int|string|bool>|false', 'process'=>'resource'],
'new' => ['array<string,int|string|bool>', 'process'=>'resource'],
],
'sem_acquire' => [
'old' => ['bool', 'semaphore'=>'resource', 'non_blocking='=>'bool'],
'new' => ['bool', 'semaphore'=>'SysvSemaphore', 'non_blocking='=>'bool'],
],
'sem_get' => [
'old' => ['resource|false', 'key'=>'int', 'max_acquire='=>'int', 'permissions='=>'int', 'auto_release='=>'bool'],
'new' => ['SysvSemaphore|false', 'key'=>'int', 'max_acquire='=>'int', 'permissions='=>'int', 'auto_release='=>'bool'],
],
'sem_release' => [
'old' => ['bool', 'semaphore'=>'resource'],
'new' => ['bool', 'semaphore'=>'SysvSemaphore'],
],
'sem_remove' => [
'old' => ['bool', 'semaphore'=>'resource'],
'new' => ['bool', 'semaphore'=>'SysvSemaphore'],
],
'shm_attach' => [
'old' => ['resource', 'key'=>'int', 'size='=>'int', 'permissions='=>'int'],
'new' => ['SysvSharedMemory', 'key'=>'int', 'size='=>'int', 'permissions='=>'int'],
],
'shm_detach' => [
'old' => ['bool', 'shm'=>'resource'],
'new' => ['bool', 'shm'=>'SysvSharedMemory'],
],
'shm_get_var' => [
'old' => ['mixed', 'shm'=>'resource', 'key'=>'int'],
'new' => ['mixed', 'shm'=>'SysvSharedMemory', 'key'=>'int'],
],
'shm_has_var' => [
'old' => ['bool', 'shm'=>'resource', 'key'=>'int'],
'new' => ['bool', 'shm'=>'SysvSharedMemory', 'key'=>'int'],
],
'shm_put_var' => [
'old' => ['bool', 'shm'=>'resource', 'key'=>'int', 'value'=>'mixed'],
'new' => ['bool', 'shm'=>'SysvSharedMemory', 'key'=>'int', 'value'=>'mixed'],
],
'shm_remove' => [
'old' => ['bool', 'shm'=>'resource'],
'new' => ['bool', 'shm'=>'SysvSharedMemory'],
],
'shm_remove_var' => [
'old' => ['bool', 'shm'=>'resource', 'key'=>'int'],
'new' => ['bool', 'shm'=>'SysvSharedMemory', 'key'=>'int'],
],
'shmop_close' => [
'old' => ['void', 'shmop'=>'resource'],
'new' => ['void', 'shmop'=>'Shmop'],
],
'shmop_delete' => [
'old' => ['bool', 'shmop'=>'resource'],
'new' => ['bool', 'shmop'=>'Shmop'],
],
'shmop_open' => [
'old' => ['resource|false', 'key'=>'int', 'mode'=>'string', 'permissions'=>'int', 'size'=>'int'],
'new' => ['Shmop', 'key'=>'int', 'mode'=>'string', 'permissions'=>'int', 'size'=>'int'],
],
'shmop_read' => [
'old' => ['string|false', 'shmop'=>'resource', 'offset'=>'int', 'size'=>'int'],
'new' => ['string', 'shmop'=>'Shmop', 'offset'=>'int', 'size'=>'int'],
],
'shmop_size' => [
'old' => ['int', 'shmop'=>'resource'],
'new' => ['int', 'shmop'=>'Shmop'],
],
'shmop_write' => [
'old' => ['int|false', 'shmop'=>'resource', 'data'=>'string', 'offset'=>'int'],
'new' => ['int', 'shmop'=>'Shmop', 'data'=>'string', 'offset'=>'int'],
],
'simplexml_import_dom' => [
'old' => ['SimpleXMLElement|false', 'node'=>'DOMNode', 'class_name='=>'string'],
'new' => ['SimpleXMLElement', 'node'=>'DOMNode', 'class_name='=>'string'],
],
'sleep' => [
'old' => ['int|false', 'seconds'=>'int'],
'new' => ['int', 'seconds'=>'int'],
],
'socket_accept' => [
'old' => ['resource|false', 'socket'=>'resource'],
'new' => ['Socket|false', 'socket'=>'Socket'],
],
'socket_addrinfo_bind' => [
'old' => ['?resource', 'address'=>'resource'],
'new' => ['Socket|false', 'address'=>'AddressInfo'],
],
'socket_addrinfo_connect' => [
'old' => ['?resource', 'address'=>'resource'],
'new' => ['Socket|false', 'address'=>'AddressInfo'],
],
'socket_addrinfo_explain' => [
'old' => ['array', 'address'=>'resource'],
'new' => ['array', 'address'=>'AddressInfo'],
],
'socket_addrinfo_lookup' => [
'old' => ['resource[]', 'host'=>'string', 'service='=>'?string', 'hints='=>'array'],
'new' => ['AddressInfo[]', 'host'=>'string', 'service='=>'?string', 'hints='=>'array'],
],
'socket_bind' => [
'old' => ['bool', 'socket'=>'resource', 'address'=>'string', 'port='=>'int'],
'new' => ['bool', 'socket'=>'Socket', 'address'=>'string', 'port='=>'int'],
],
'socket_clear_error' => [
'old' => ['void', 'socket='=>'resource'],
'new' => ['void', 'socket='=>'Socket'],
],
'socket_close' => [
'old' => ['void', 'socket'=>'resource'],
'new' => ['void', 'socket'=>'Socket'],
],
'socket_connect' => [
'old' => ['bool', 'socket'=>'resource', 'address'=>'string', 'port='=>'int'],
'new' => ['bool', 'socket'=>'Socket', 'address'=>'string', 'port='=>'int'],
],
'socket_create' => [
'old' => ['resource|false', 'domain'=>'int', 'type'=>'int', 'protocol'=>'int'],
'new' => ['Socket|false', 'domain'=>'int', 'type'=>'int', 'protocol'=>'int'],
],
'socket_create_listen' => [
'old' => ['resource|false', 'port'=>'int', 'backlog='=>'int'],
'new' => ['Socket|false', 'port'=>'int', 'backlog='=>'int'],
],
'socket_create_pair' => [
'old' => ['bool', 'domain'=>'int', 'type'=>'int', 'protocol'=>'int', '&w_pair'=>'resource[]'],
'new' => ['bool', 'domain'=>'int', 'type'=>'int', 'protocol'=>'int', '&w_pair'=>'Socket[]'],
],
'socket_export_stream' => [
'old' => ['resource|false', 'socket'=>'resource'],
'new' => ['resource|false', 'socket'=>'Socket'],
],
'socket_get_option' => [
'old' => ['array|false|int', 'socket'=>'resource', 'level'=>'int', 'option'=>'int'],
'new' => ['array|false|int', 'socket'=>'Socket', 'level'=>'int', 'option'=>'int'],
],
'socket_get_status' => [
'old' => ['array<string,mixed>', 'stream'=>'resource'],
'new' => ['array<string,mixed>', 'stream'=>'Socket'],
],
'socket_getopt' => [
'old' => ['array|false|int', 'socket'=>'resource', 'level'=>'int', 'option'=>'int'],
'new' => ['array|false|int', 'socket'=>'Socket', 'level'=>'int', 'option'=>'int'],
],
'socket_getpeername' => [
'old' => ['bool', 'socket'=>'resource', '&w_address'=>'string', '&w_port='=>'int'],
'new' => ['bool', 'socket'=>'Socket', '&w_address'=>'string', '&w_port='=>'int'],
],
'socket_getsockname' => [
'old' => ['bool', 'socket'=>'resource', '&w_address'=>'string', '&w_port='=>'int'],
'new' => ['bool', 'socket'=>'Socket', '&w_address'=>'string', '&w_port='=>'int'],
],
'socket_import_stream' => [
'old' => ['resource|false|null', 'stream'=>'resource'],
'new' => ['Socket|false', 'stream'=>'resource'],
],
'socket_last_error' => [
'old' => ['int', 'socket='=>'resource'],
'new' => ['int', 'socket='=>'Socket'],
],
'socket_listen' => [
'old' => ['bool', 'socket'=>'resource', 'backlog='=>'int'],
'new' => ['bool', 'socket'=>'Socket', 'backlog='=>'int'],
],
'socket_read' => [
'old' => ['string|false', 'socket'=>'resource', 'length'=>'int', 'mode='=>'int'],
'new' => ['string|false', 'socket'=>'Socket', 'length'=>'int', 'mode='=>'int'],
],
'socket_recv' => [
'old' => ['int|false', 'socket'=>'resource', '&w_data'=>'string', 'length'=>'int', 'flags'=>'int'],
'new' => ['int|false', 'socket'=>'Socket', '&w_data'=>'string', 'length'=>'int', 'flags'=>'int'],
],
'socket_recvfrom' => [
'old' => ['int|false', 'socket'=>'resource', '&w_data'=>'string', 'length'=>'int', 'flags'=>'int', '&w_address'=>'string', '&w_port='=>'int'],
'new' => ['int|false', 'socket'=>'Socket', '&w_data'=>'string', 'length'=>'int', 'flags'=>'int', '&w_address'=>'string', '&w_port='=>'int'],
],
'socket_recvmsg' => [
'old' => ['int|false', 'socket'=>'resource', '&w_message'=>'array', 'flags='=>'int'],
'new' => ['int|false', 'socket'=>'Socket', '&w_message'=>'array', 'flags='=>'int'],
],
'socket_select' => [
'old' => ['int|false', '&rw_read'=>'resource[]|null', '&rw_write'=>'resource[]|null', '&rw_except'=>'resource[]|null', 'seconds'=>'int', 'microseconds='=>'int'],
'new' => ['int|false', '&rw_read'=>'Socket[]|null', '&rw_write'=>'Socket[]|null', '&rw_except'=>'Socket[]|null', 'seconds'=>'int', 'microseconds='=>'int'],
],
'socket_send' => [
'old' => ['int|false', 'socket'=>'resource', 'data'=>'string', 'length'=>'int', 'flags'=>'int'],
'new' => ['int|false', 'socket'=>'Socket', 'data'=>'string', 'length'=>'int', 'flags'=>'int'],
],
'socket_sendmsg' => [
'old' => ['int|false', 'socket'=>'resource', 'message'=>'array', 'flags='=>'int'],
'new' => ['int|false', 'socket'=>'Socket', 'message'=>'array', 'flags='=>'int'],
],
'socket_sendto' => [
'old' => ['int|false', 'socket'=>'resource', 'data'=>'string', 'length'=>'int', 'flags'=>'int', 'address'=>'string', 'port='=>'int'],
'new' => ['int|false', 'socket'=>'Socket', 'data'=>'string', 'length'=>'int', 'flags'=>'int', 'address'=>'string', 'port='=>'int'],
],
'socket_set_block' => [
'old' => ['bool', 'socket'=>'resource'],
'new' => ['bool', 'socket'=>'Socket'],
],
'socket_set_blocking' => [
'old' => ['bool', 'stream'=>'resource', 'enable'=>'bool'],
'new' => ['bool', 'stream'=>'Socket', 'enable'=>'bool'],
],
'socket_set_nonblock' => [
'old' => ['bool', 'socket'=>'resource'],
'new' => ['bool', 'socket'=>'Socket'],
],
'socket_set_option' => [
'old' => ['bool', 'socket'=>'resource', 'level'=>'int', 'option'=>'int', 'value'=>'int|string|array'],
'new' => ['bool', 'socket'=>'Socket', 'level'=>'int', 'option'=>'int', 'value'=>'int|string|array'],
],
'socket_setopt' => [
'old' => ['bool', 'socket'=>'resource', 'level'=>'int', 'option'=>'int', 'value'=>'int|string|array'],
'new' => ['bool', 'socket'=>'Socket', 'level'=>'int', 'option'=>'int', 'value'=>'int|string|array'],
],
'socket_shutdown' => [
'old' => ['bool', 'socket'=>'resource', 'mode='=>'int'],
'new' => ['bool', 'socket'=>'Socket', 'mode='=>'int'],
],
'socket_write' => [
'old' => ['int|false', 'socket'=>'resource', 'data'=>'string', 'length='=>'int'],
'new' => ['int|false', 'socket'=>'Socket', 'data'=>'string', 'length='=>'int'],
],
'socket_wsaprotocol_info_export' => [
'old' => ['string|false', 'socket'=>'resource', 'process_id'=>'int'],
'new' => ['string|false', 'socket'=>'Socket', 'process_id'=>'int'],
],
'socket_wsaprotocol_info_import' => [
'old' => ['resource|false', 'info_id'=>'string'],
'new' => ['Socket|false', 'info_id'=>'string'],
],
'strchr' => [
'old' => ['string|false', 'haystack'=>'string', 'needle'=>'string|int', 'before_needle='=>'bool'],
'new' => ['string|false', 'haystack'=>'string', 'needle'=>'string', 'before_needle='=>'bool'],
],
'stream_bucket_new' => [
'old' => ['resource|false', 'stream'=>'resource', 'buffer'=>'string'],
'new' => ['object', 'stream'=>'resource', 'buffer'=>'string'],
],
'stream_set_chunk_size' => [
'old' => ['int|false', 'stream'=>'resource', 'size'=>'int'],
'new' => ['int', 'stream'=>'resource', 'size'=>'int'],
],
'stripos' => [
'old' => ['int|false', 'haystack'=>'string', 'needle'=>'string|int', 'offset='=>'int'],
'new' => ['int|false', 'haystack'=>'string', 'needle'=>'string', 'offset='=>'int'],
],
'stristr' => [
'old' => ['string|false', 'haystack'=>'string', 'needle'=>'string|int', 'before_needle='=>'bool'],
'new' => ['string|false', 'haystack'=>'string', 'needle'=>'string', 'before_needle='=>'bool'],
],
'strpos' => [
'old' => ['int|false', 'haystack'=>'string', 'needle'=>'string|int', 'offset='=>'int'],
'new' => ['int|false', 'haystack'=>'string', 'needle'=>'string', 'offset='=>'int'],
],
'strrchr' => [
'old' => ['string|false', 'haystack'=>'string', 'needle'=>'string|int'],
'new' => ['string|false', 'haystack'=>'string', 'needle'=>'string'],
],
'strripos' => [
'old' => ['int|false', 'haystack'=>'string', 'needle'=>'string|int', 'offset='=>'int'],
'new' => ['int|false', 'haystack'=>'string', 'needle'=>'string', 'offset='=>'int'],
],
'strrpos' => [
'old' => ['int|false', 'haystack'=>'string', 'needle'=>'string|int', 'offset='=>'int'],
'new' => ['int|false', 'haystack'=>'string', 'needle'=>'string', 'offset='=>'int'],
],
'strstr' => [
'old' => ['string|false', 'haystack'=>'string', 'needle'=>'string|int', 'before_needle='=>'bool'],
'new' => ['string|false', 'haystack'=>'string', 'needle'=>'string', 'before_needle='=>'bool'],
],
'substr' => [
'old' => ['string|false', 'string'=>'string', 'offset'=>'int', 'length='=>'int'],
'new' => ['string', 'string'=>'string', 'offset'=>'int', 'length='=>'int'],
],
'substr_compare' => [
'old' => ['int|false', 'haystack'=>'string', 'needle'=>'string', 'offset'=>'int', 'length='=>'int', 'case_insensitive='=>'bool'],
'new' => ['int', 'haystack'=>'string', 'needle'=>'string', 'offset'=>'int', 'length='=>'int', 'case_insensitive='=>'bool'],
],
'timezone_identifiers_list' => [
'old' => ['list<string>|false', 'timezoneGroup='=>'int', 'countryCode='=>'?string'],
'new' => ['list<string>', 'timezoneGroup='=>'int', 'countryCode='=>'?string'],
],
'timezone_offset_get' => [
'old' => ['int|false', 'object'=>'DateTimeZone', 'datetime'=>'DateTimeInterface'],
'new' => ['int', 'object'=>'DateTimeZone', 'datetime'=>'DateTimeInterface'],
],
'version_compare' => [
'old' => ['int|bool', 'version1'=>'string', 'version2'=>'string', 'operator='=>'\'\x3c\'|\'lt\'|\'\x3c=\'|\'le\'|\'\x3e\'|\'gt\'|\'\x3e=\'|\'ge\'|\'==\'|\'=\'|\'eq\'|\'!=\'|\'\x3c\x3e\'|\'ne\''],
'new' => ['int|bool', 'version1'=>'string', 'version2'=>'string', 'operator='=>'?(\'\x3c\'|\'lt\'|\'\x3c=\'|\'le\'|\'\x3e\'|\'gt\'|\'\x3e=\'|\'ge\'|\'==\'|\'=\'|\'eq\'|\'!=\'|\'\x3c\x3e\'|\'ne\')'],
],
'xml_get_current_byte_index' => [
'old' => ['int|false', 'parser'=>'resource'],
'new' => ['int', 'parser'=>'XMLParser'],
],
'xml_get_current_column_number' => [
'old' => ['int|false', 'parser'=>'resource'],
'new' => ['int', 'parser'=>'XMLParser'],
],
'xml_get_current_line_number' => [
'old' => ['int|false', 'parser'=>'resource'],
'new' => ['int', 'parser'=>'XMLParser'],
],
'xml_get_error_code' => [
'old' => ['int|false', 'parser'=>'resource'],
'new' => ['int', 'parser'=>'XMLParser'],
],
'xml_parse' => [
'old' => ['int', 'parser'=>'resource', 'data'=>'string', 'is_final='=>'bool'],
'new' => ['int', 'parser'=>'XMLParser', 'data'=>'string', 'is_final='=>'bool'],
],
'xml_parse_into_struct' => [
'old' => ['int', 'parser'=>'resource', 'data'=>'string', '&w_values'=>'array', '&w_index='=>'array'],
'new' => ['int', 'parser'=>'XMLParser', 'data'=>'string', '&w_values'=>'array', '&w_index='=>'array'],
],
'xml_parser_create' => [
'old' => ['resource', 'encoding='=>'string'],
'new' => ['XMLParser', 'encoding='=>'string'],
],
'xml_parser_create_ns' => [
'old' => ['resource', 'encoding='=>'string', 'separator='=>'string'],
'new' => ['XMLParser', 'encoding='=>'string', 'separator='=>'string'],
],
'xml_parser_free' => [
'old' => ['bool', 'parser'=>'resource'],
'new' => ['bool', 'parser'=>'XMLParser'],
],
'xml_parser_get_option' => [
'old' => ['mixed|false', 'parser'=>'resource', 'option'=>'int'],
'new' => ['int|string', 'parser'=>'XMLParser', 'option'=>'int'],
],
'xml_parser_set_option' => [
'old' => ['bool', 'parser'=>'resource', 'option'=>'int', 'value'=>'int|string'],
'new' => ['bool', 'parser'=>'XMLParser', 'option'=>'int', 'value'=>'int|string'],
],
'xml_set_character_data_handler' => [
'old' => ['bool', 'parser'=>'resource', 'handler'=>'callable'],
'new' => ['bool', 'parser'=>'XMLParser', 'handler'=>'callable'],
],
'xml_set_default_handler' => [
'old' => ['bool', 'parser'=>'resource', 'handler'=>'callable'],
'new' => ['bool', 'parser'=>'XMLParser', 'handler'=>'callable'],
],
'xml_set_element_handler' => [
'old' => ['bool', 'parser'=>'resource', 'start_handler'=>'callable', 'end_handler'=>'callable'],
'new' => ['bool', 'parser'=>'XMLParser', 'start_handler'=>'callable', 'end_handler'=>'callable'],
],
'xml_set_end_namespace_decl_handler' => [
'old' => ['bool', 'parser'=>'resource', 'handler'=>'callable'],
'new' => ['bool', 'parser'=>'XMLParser', 'handler'=>'callable'],
],
'xml_set_external_entity_ref_handler' => [
'old' => ['bool', 'parser'=>'resource', 'handler'=>'callable'],
'new' => ['bool', 'parser'=>'XMLParser', 'handler'=>'callable'],
],
'xml_set_notation_decl_handler' => [
'old' => ['bool', 'parser'=>'resource', 'handler'=>'callable'],
'new' => ['bool', 'parser'=>'XMLParser', 'handler'=>'callable'],
],
'xml_set_object' => [
'old' => ['bool', 'parser'=>'resource', 'object'=>'object'],
'new' => ['bool', 'parser'=>'XMLParser', 'object'=>'object'],
],
'xml_set_processing_instruction_handler' => [
'old' => ['bool', 'parser'=>'resource', 'handler'=>'callable'],
'new' => ['bool', 'parser'=>'XMLParser', 'handler'=>'callable'],
],
'xml_set_start_namespace_decl_handler' => [
'old' => ['bool', 'parser'=>'resource', 'handler'=>'callable'],
'new' => ['bool', 'parser'=>'XMLParser', 'handler'=>'callable'],
],
'xml_set_unparsed_entity_decl_handler' => [
'old' => ['bool', 'parser'=>'resource', 'handler'=>'callable'],
'new' => ['bool', 'parser'=>'XMLParser', 'handler'=>'callable'],
],
'XMLWriter::flush' => [
'old' => ['string|int|false', 'empty='=>'bool'],
'new' => ['string|int', 'empty='=>'bool'],
],
'XMLWriter::startAttributeNs' => [
'old' => ['bool', 'prefix'=>'string', 'name'=>'string', 'namespace'=>'?string'],
'new' => ['bool', 'prefix'=>'?string', 'name'=>'string', 'namespace'=>'?string'],
],
'XMLWriter::writeAttributeNs' => [
'old' => ['bool', 'prefix'=>'string', 'name'=>'string', 'namespace'=>'?string', 'value'=>'string'],
'new' => ['bool', 'prefix'=>'?string', 'name'=>'string', 'namespace'=>'?string', 'value'=>'string'],
],
'XMLWriter::writeDtdEntity' => [
'old' => ['bool', 'name'=>'string', 'content'=>'string', 'isParam'=>'bool', 'publicId'=>'string', 'systemId'=>'string', 'notationData'=>'string'],
'new' => ['bool', 'name'=>'string', 'content'=>'string', 'isParam='=>'bool', 'publicId='=>'?string', 'systemId='=>'?string', 'notationData='=>'?string'],
],
'xmlwriter_end_attribute' => [
'old' => ['bool', 'writer'=>'resource'],
'new' => ['bool', 'writer'=>'XMLWriter'],
],
'xmlwriter_end_cdata' => [
'old' => ['bool', 'writer'=>'resource'],
'new' => ['bool', 'writer'=>'XMLWriter'],
],
'xmlwriter_end_comment' => [
'old' => ['bool', 'writer'=>'resource'],
'new' => ['bool', 'writer'=>'XMLWriter'],
],
'xmlwriter_end_document' => [
'old' => ['bool', 'writer'=>'resource'],
'new' => ['bool', 'writer'=>'XMLWriter'],
],
'xmlwriter_end_dtd' => [
'old' => ['bool', 'writer'=>'resource'],
'new' => ['bool', 'writer'=>'XMLWriter'],
],
'xmlwriter_end_dtd_attlist' => [
'old' => ['bool', 'writer'=>'resource'],
'new' => ['bool', 'writer'=>'XMLWriter'],
],
'xmlwriter_end_dtd_element' => [
'old' => ['bool', 'writer'=>'resource'],
'new' => ['bool', 'writer'=>'XMLWriter'],
],
'xmlwriter_end_dtd_entity' => [
'old' => ['bool', 'writer'=>'resource'],
'new' => ['bool', 'writer'=>'XMLWriter'],
],
'xmlwriter_end_element' => [
'old' => ['bool', 'writer'=>'resource'],
'new' => ['bool', 'writer'=>'XMLWriter'],
],
'xmlwriter_end_pi' => [
'old' => ['bool', 'writer'=>'resource'],
'new' => ['bool', 'writer'=>'XMLWriter'],
],
'xmlwriter_flush' => [
'old' => ['int|string', 'writer'=>'resource', 'empty='=>'bool'],
'new' => ['int|string', 'writer'=>'XMLWriter', 'empty='=>'bool'],
],
'xmlwriter_full_end_element' => [
'old' => ['bool', 'writer'=>'resource'],
'new' => ['bool', 'writer'=>'XMLWriter'],
],
'xmlwriter_open_memory' => [
'old' => ['resource'],
'new' => ['XMLWriter'],
],
'xmlwriter_open_uri' => [
'old' => ['resource', 'uri'=>'string'],
'new' => ['XMLWriter', 'uri'=>'string'],
],
'xmlwriter_output_memory' => [
'old' => ['string', 'writer'=>'resource', 'flush='=>'bool'],
'new' => ['string', 'writer'=>'XMLWriter', 'flush='=>'bool'],
],
'xmlwriter_set_indent' => [
'old' => ['bool', 'writer'=>'resource', 'enable'=>'bool'],
'new' => ['bool', 'writer'=>'XMLWriter', 'enable'=>'bool'],
],
'xmlwriter_set_indent_string' => [
'old' => ['bool', 'writer'=>'resource', 'indentation'=>'string'],
'new' => ['bool', 'writer'=>'XMLWriter', 'indentation'=>'string'],
],
'xmlwriter_start_attribute' => [
'old' => ['bool', 'writer'=>'resource', 'name'=>'string'],
'new' => ['bool', 'writer'=>'XMLWriter', 'name'=>'string'],
],
'xmlwriter_start_attribute_ns' => [
'old' => ['bool', 'writer'=>'resource', 'prefix'=>'string', 'name'=>'string', 'namespace'=>'string'],
'new' => ['bool', 'writer'=>'XMLWriter', 'prefix'=>'string', 'name'=>'string', 'namespace'=>'string'],
],
'xmlwriter_start_cdata' => [
'old' => ['bool', 'writer'=>'resource'],
'new' => ['bool', 'writer'=>'XMLWriter'],
],
'xmlwriter_start_comment' => [
'old' => ['bool', 'writer'=>'resource'],
'new' => ['bool', 'writer'=>'XMLWriter'],
],
'xmlwriter_start_document' => [
'old' => ['bool', 'writer'=>'resource', 'version='=>'string', 'encoding='=>'string', 'standalone='=>'string'],
'new' => ['bool', 'writer'=>'XMLWriter', 'version='=>'string', 'encoding='=>'string', 'standalone='=>'string'],
],
'xmlwriter_start_dtd' => [
'old' => ['bool', 'writer'=>'resource', 'qualifiedName'=>'string', 'publicId='=>'string', 'systemId='=>'string'],
'new' => ['bool', 'writer'=>'XMLWriter', 'qualifiedName'=>'string', 'publicId='=>'string', 'systemId='=>'string'],
],
'xmlwriter_start_dtd_attlist' => [
'old' => ['bool', 'writer'=>'resource', 'name'=>'string'],
'new' => ['bool', 'writer'=>'XMLWriter', 'name'=>'string'],
],
'xmlwriter_start_dtd_element' => [
'old' => ['bool', 'writer'=>'resource', 'qualifiedName'=>'string'],
'new' => ['bool', 'writer'=>'XMLWriter', 'qualifiedName'=>'string'],
],
'xmlwriter_start_dtd_entity' => [
'old' => ['bool', 'writer'=>'resource', 'name'=>'string', 'isParam'=>'bool'],
'new' => ['bool', 'writer'=>'XMLWriter', 'name'=>'string', 'isParam'=>'bool'],
],
'xmlwriter_start_element' => [
'old' => ['bool', 'writer'=>'resource', 'name'=>'string'],
'new' => ['bool', 'writer'=>'XMLWriter', 'name'=>'string'],
],
'xmlwriter_start_element_ns' => [
'old' => ['bool', 'writer'=>'resource', 'prefix'=>'string', 'name'=>'string', 'namespace'=>'string'],
'new' => ['bool', 'writer'=>'XMLWriter', 'prefix'=>'string', 'name'=>'string', 'namespace'=>'string'],
],
'xmlwriter_start_pi' => [
'old' => ['bool', 'writer'=>'resource', 'target'=>'string'],
'new' => ['bool', 'writer'=>'XMLWriter', 'target'=>'string'],
],
'xmlwriter_text' => [
'old' => ['bool', 'writer'=>'resource', 'content'=>'string'],
'new' => ['bool', 'writer'=>'XMLWriter', 'content'=>'string'],
],
'xmlwriter_write_attribute' => [
'old' => ['bool', 'writer'=>'resource', 'name'=>'string', 'value'=>'string'],
'new' => ['bool', 'writer'=>'XMLWriter', 'name'=>'string', 'value'=>'string'],
],
'xmlwriter_write_attribute_ns' => [
'old' => ['bool', 'writer'=>'resource', 'prefix'=>'string', 'name'=>'string', 'namespace'=>'string', 'value'=>'string'],
'new' => ['bool', 'writer'=>'XMLWriter', 'prefix'=>'string', 'name'=>'string', 'namespace'=>'string', 'value'=>'string'],
],
'xmlwriter_write_cdata' => [
'old' => ['bool', 'writer'=>'resource', 'content'=>'string'],
'new' => ['bool', 'writer'=>'XMLWriter', 'content'=>'string'],
],
'xmlwriter_write_comment' => [
'old' => ['bool', 'writer'=>'resource', 'content'=>'string'],
'new' => ['bool', 'writer'=>'XMLWriter', 'content'=>'string'],
],
'xmlwriter_write_dtd' => [
'old' => ['bool', 'writer'=>'resource', 'name'=>'string', 'publicId='=>'string', 'systemId='=>'string', 'content='=>'string'],
'new' => ['bool', 'writer'=>'XMLWriter', 'name'=>'string', 'publicId='=>'string', 'systemId='=>'string', 'content='=>'string'],
],
'xmlwriter_write_dtd_attlist' => [
'old' => ['bool', 'writer'=>'resource', 'name'=>'string', 'content'=>'string'],
'new' => ['bool', 'writer'=>'XMLWriter', 'name'=>'string', 'content'=>'string'],
],
'xmlwriter_write_dtd_element' => [
'old' => ['bool', 'writer'=>'resource', 'name'=>'string', 'content'=>'string'],
'new' => ['bool', 'writer'=>'XMLWriter', 'name'=>'string', 'content'=>'string'],
],
'xmlwriter_write_dtd_entity' => [
'old' => ['bool', 'writer'=>'resource', 'name'=>'string', 'content'=>'string', 'isParam='=>'bool', 'publicId='=>'string', 'systemId='=>'string', 'notationData='=>'string'],
'new' => ['bool', 'writer'=>'XMLWriter', 'name'=>'string', 'content'=>'string', 'isParam='=>'bool', 'publicId='=>'string', 'systemId='=>'string', 'notationData='=>'string'],
],
'xmlwriter_write_element' => [
'old' => ['bool', 'writer'=>'resource', 'name'=>'string', 'content='=>'string'],
'new' => ['bool', 'writer'=>'XMLWriter', 'name'=>'string', 'content='=>'string'],
],
'xmlwriter_write_element_ns' => [
'old' => ['bool', 'writer'=>'resource', 'prefix'=>'string', 'name'=>'string', 'namespace'=>'string', 'content='=>'string'],
'new' => ['bool', 'writer'=>'XMLWriter', 'prefix'=>'string', 'name'=>'string', 'namespace'=>'string', 'content='=>'string'],
],
'xmlwriter_write_pi' => [
'old' => ['bool', 'writer'=>'resource', 'target'=>'string', 'content'=>'string'],
'new' => ['bool', 'writer'=>'XMLWriter', 'target'=>'string', 'content'=>'string'],
],
'xmlwriter_write_raw' => [
'old' => ['bool', 'writer'=>'resource', 'content'=>'string'],
'new' => ['bool', 'writer'=>'XMLWriter', 'content'=>'string'],
],
],
'removed' => [
'create_function' => ['string', 'args'=>'string', 'code'=>'string'],
'each' => ['array{0:int|string,key:int|string,1:mixed,value:mixed}', '&r_arr'=>'array'],
'gmp_random' => ['GMP', 'limiter='=>'int'],
'gzgetss' => ['string|false', 'zp'=>'resource', 'length'=>'int', 'allowable_tags='=>'string'],
'image2wbmp' => ['bool', 'im'=>'resource', 'filename='=>'?string', 'threshold='=>'int'],
'jpeg2wbmp' => ['bool', 'jpegname'=>'string', 'wbmpname'=>'string', 'dest_height'=>'int', 'dest_width'=>'int', 'threshold'=>'int'],
'ldap_sort' => ['bool', 'link_identifier'=>'resource', 'result_identifier'=>'resource', 'sortfilter'=>'string'],
'msg_receive' => ['bool', 'queue'=>'resource', 'desired_message_type'=>'int', '&w_received_message_type'=>'int', 'max_message_size'=>'int', '&w_message'=>'mixed', 'unserialize='=>'bool', 'flags='=>'int', '&w_error_code='=>'int'],
'png2wbmp' => ['bool', 'pngname'=>'string', 'wbmpname'=>'string', 'dest_height'=>'int', 'dest_width'=>'int', 'threshold'=>'int'],
'read_exif_data' => ['array', 'filename'=>'string', 'sections_needed='=>'string', 'sub_arrays='=>'bool', 'read_thumbnail='=>'bool'],
'ReflectionType::isBuiltin' => ['bool'],
'SplFileObject::fgetss' => ['string|false', 'allowable_tags='=>'string'],
],
]; ];
@@ -16,10 +16,12 @@
* @phan-file-suppress PhanPluginMixedKeyNoKey (read by Phan when analyzing this file) * @phan-file-suppress PhanPluginMixedKeyNoKey (read by Phan when analyzing this file)
*/ */
return [ return [
'new' => [ 'added' => [
'array_is_list' => ['bool', 'array'=>'array'], 'array_is_list' => ['bool', 'array'=>'array'],
'fsync' => ['bool', 'stream'=>'resource'], 'fsync' => ['bool', 'stream'=>'resource'],
], ],
'old' => [ 'changed' => [
], ],
'removed' => [
],
]; ];
+10 -1
View File
@@ -167,7 +167,7 @@ final class GlobalScope extends Scope
} }
/** /**
* @return Scope * @return never
* Get the parent scope of this scope * Get the parent scope of this scope
*/ */
public function getParentScope(): Scope public function getParentScope(): Scope
@@ -175,11 +175,17 @@ final class GlobalScope extends Scope
throw new AssertionError("Global scope has no parent scope"); throw new AssertionError("Global scope has no parent scope");
} }
/**
* @return never
*/
public function getClassFQSEN(): FullyQualifiedClassName public function getClassFQSEN(): FullyQualifiedClassName
{ {
throw new AssertionError("Cannot get class FQSEN on scope"); throw new AssertionError("Cannot get class FQSEN on scope");
} }
/**
* @return never
*/
public function getPropertyFQSEN(): FullyQualifiedPropertyName public function getPropertyFQSEN(): FullyQualifiedPropertyName
{ {
throw new AssertionError("Cannot get class FQSEN on scope"); throw new AssertionError("Cannot get class FQSEN on scope");
@@ -194,6 +200,9 @@ final class GlobalScope extends Scope
return null; return null;
} }
/**
* @return never
*/
public function getFunctionLikeFQSEN() public function getFunctionLikeFQSEN()
{ {
throw new AssertionError("Cannot get method/function/closure FQSEN on scope"); throw new AssertionError("Cannot get method/function/closure FQSEN on scope");
+8 -6
View File
@@ -111,17 +111,17 @@ class Type implements Stringable
* A legal type identifier (e.g. 'int' or 'DateTime') * A legal type identifier (e.g. 'int' or 'DateTime')
*/ */
public const simple_type_regex = public const simple_type_regex =
'(\??)(?:callable-(?:string|object|array)|associative-array|class-string|lowercase-string|phan-intersection-type|no-return|never-returns?|non-(?:zero-int|null-mixed|empty-(?:associative-array|array|list|string|lowercase-string|mixed))|\\\\?[a-zA-Z_\x7f-\xff][a-zA-Z0-9_\x7f-\xff]*(?:\\\\[a-zA-Z_\x7f-\xff][a-zA-Z0-9_\x7f-\xff]*)*)'; '(\??)(?:callable-(?:string|object|array)|associative-array|class-string|lowercase-string|phan-intersection-type|no-return|never-returns?|non-(?:zero-int|null-mixed|empty-(?:associative-array|array|list|string|lowercase-string|numeric-string|mixed))|\\\\?[a-zA-Z_\x7f-\xff][a-zA-Z0-9_\x7f-\xff]*(?:\\\\[a-zA-Z_\x7f-\xff][a-zA-Z0-9_\x7f-\xff]*)*)';
public const simple_noncapturing_type_regex = public const simple_noncapturing_type_regex =
'\\\\?(?:callable-(?:string|object|array)|associative-array|class-string|lowercase-string|phan-intersection-type|no-return|never-returns?|non-(?:zero-int|null-mixed|empty-(?:associative-array|array|list|string|lowercase-string|mixed))|[a-zA-Z_\x7f-\xff][a-zA-Z0-9_\x7f-\xff]*(?:\\\\[a-zA-Z_\x7f-\xff][a-zA-Z0-9_\x7f-\xff]*)*)'; '\\\\?(?:callable-(?:string|object|array)|associative-array|class-string|lowercase-string|phan-intersection-type|no-return|never-returns?|non-(?:zero-int|null-mixed|empty-(?:associative-array|array|list|string|lowercase-string|numeric-string|mixed))|[a-zA-Z_\x7f-\xff][a-zA-Z0-9_\x7f-\xff]*(?:\\\\[a-zA-Z_\x7f-\xff][a-zA-Z0-9_\x7f-\xff]*)*)';
/** /**
* @var string * @var string
* A legal type identifier (e.g. 'int' or 'DateTime') * A legal type identifier (e.g. 'int' or 'DateTime')
*/ */
public const simple_type_regex_or_this = public const simple_type_regex_or_this =
'(\??)(callable-(?:string|object|array)|associative-array|class-string|lowercase-string|phan-intersection-type|no-return|never-returns?|non-(?:zero-int|null-mixed|empty-(?:associative-array|array|list|string|lowercase-string|mixed))|\\\\?[a-zA-Z_\x7f-\xff][a-zA-Z0-9_\x7f-\xff]*(?:\\\\[a-zA-Z_\x7f-\xff][a-zA-Z0-9_\x7f-\xff]*)*|\$this)'; '(\??)(callable-(?:string|object|array)|associative-array|class-string|lowercase-string|numeric-string|phan-intersection-type|no-return|never-returns?|non-(?:zero-int|null-mixed|empty-(?:associative-array|array|list|string|lowercase-string|numeric-string|mixed))|\\\\?[a-zA-Z_\x7f-\xff][a-zA-Z0-9_\x7f-\xff]*(?:\\\\[a-zA-Z_\x7f-\xff][a-zA-Z0-9_\x7f-\xff]*)*|\$this)';
public const shape_key_regex = public const shape_key_regex =
'(?:[-.\/^;$%*+_a-zA-Z0-9\x7f-\xff]|\\\\(?:[nrt\\\\]|x[0-9a-fA-F]{2}))+\??'; '(?:[-.\/^;$%*+_a-zA-Z0-9\x7f-\xff]|\\\\(?:[nrt\\\\]|x[0-9a-fA-F]{2}))+\??';
@@ -255,6 +255,7 @@ class Type implements Stringable
'non-empty-lowercase-string' => true, 'non-empty-lowercase-string' => true,
'non-zero-int' => true, 'non-zero-int' => true,
'null' => true, 'null' => true,
'numeric-string' => true,
'object' => true, 'object' => true,
'phan-intersection-type' => true, 'phan-intersection-type' => true,
'resource' => true, 'resource' => true,
@@ -383,6 +384,7 @@ class Type implements Stringable
/** /**
* @throws Error this should not be called accidentally * @throws Error this should not be called accidentally
* @suppress PhanPluginRemoveDebugCall deliberate output before uncatchable Error * @suppress PhanPluginRemoveDebugCall deliberate output before uncatchable Error
* @return never
*/ */
public function __wakeup() public function __wakeup()
{ {
@@ -522,6 +524,7 @@ class Type implements Stringable
); );
break; break;
case 'lowercase-string': case 'lowercase-string':
case 'numeric-string': // TODO: Actually support numeric-string
$value = StringType::instance($is_nullable); $value = StringType::instance($is_nullable);
break; break;
case 'class-string': case 'class-string':
@@ -878,6 +881,7 @@ class Type implements Stringable
return ScalarRawType::instance($is_nullable); return ScalarRawType::instance($is_nullable);
case 'string': case 'string':
case 'lowercase-string': case 'lowercase-string':
case 'numeric-string':
return StringType::instance($is_nullable); return StringType::instance($is_nullable);
case 'true': case 'true':
return TrueType::instance($is_nullable); return TrueType::instance($is_nullable);
@@ -1173,9 +1177,7 @@ class Type implements Stringable
$key_type = GenericArrayType::KEY_MIXED; $key_type = GenericArrayType::KEY_MIXED;
} }
// TODO: Infer non-empty-array<int,Type> from conditions such as count($types) == 1
if (count($types) === 1) { if (count($types) === 1) {
// @phan-suppress-next-line PhanPossiblyFalseTypeArgument
return $make(\reset($types), $key_type); return $make(\reset($types), $key_type);
} elseif (count($types) > 1) { } elseif (count($types) > 1) {
return new GenericMultiArrayType( return new GenericMultiArrayType(
@@ -1281,7 +1283,7 @@ class Type implements Stringable
?CodeBase $code_base, ?CodeBase $code_base,
?Context $context ?Context $context
): Type { ): Type {
$result = IntersectionType::createFromTypes($template_parameter_type_list, $code_base, $context); $result = IntersectionType::createFromTypes($template_parameter_type_list, $code_base, $context, true);
return $is_nullable ? $result->withIsNullable(true) : $result; return $is_nullable ? $result->withIsNullable(true) : $result;
} }
@@ -153,6 +153,6 @@ final class CallableStringType extends StringType implements CallableInterface
*/ */
protected function isSubtypeOfNonNullableType(Type $type, CodeBase $code_base): bool protected function isSubtypeOfNonNullableType(Type $type, CodeBase $code_base): bool
{ {
return $type instanceof CallableType || \get_class($type) === StringType::class || $type instanceof MixedType; return $type instanceof CallableType || \in_array(\get_class($type), [StringType::class, NonEmptyStringType::class], true) || $type instanceof MixedType;
} }
} }
@@ -132,4 +132,16 @@ final class ClassStringType extends StringType
Type::FROM_TYPE Type::FROM_TYPE
); );
} }
/** @override */
public function isPossiblyFalsey(): bool
{
return $this->is_nullable;
}
/** @override */
public function isAlwaysTruthy(): bool
{
return !$this->is_nullable;
}
} }
@@ -20,6 +20,7 @@ use Phan\Language\Scope\ClosedScope;
use Phan\Language\Type; use Phan\Language\Type;
use Phan\Language\UnionType; use Phan\Language\UnionType;
use Phan\Library\StringUtil; use Phan\Library\StringUtil;
use Phan\PluginV3;
/** /**
* Phan's base class for representations of `callable(MyClass):MyOtherClass` and `Closure(MyClass):MyOtherClass` * Phan's base class for representations of `callable(MyClass):MyOtherClass` and `Closure(MyClass):MyOtherClass`
@@ -131,9 +132,12 @@ abstract class FunctionLikeDeclarationType extends Type implements FunctionInter
}); });
} }
/**
* @return never
*/
public function __clone() public function __clone()
{ {
throw new \AssertionError('Should not clone ClosureTypeDeclaration'); throw new \AssertionError('Should not clone ' . static::class);
} }
/** /**
@@ -389,6 +393,7 @@ abstract class FunctionLikeDeclarationType extends Type implements FunctionInter
/** /**
* @unused-param $fqsen * @unused-param $fqsen
* @return never
* @override * @override
*/ */
public function setFQSEN(FQSEN $fqsen): void public function setFQSEN(FQSEN $fqsen): void
@@ -417,6 +422,7 @@ abstract class FunctionLikeDeclarationType extends Type implements FunctionInter
/** /**
* @override * @override
* @return never
* @param list<Node|int|string|float> $args * @param list<Node|int|string|float> $args
*/ */
public function analyzeFunctionCall(CodeBase $code_base, Context $context, array $args, Node $node = null): void public function analyzeFunctionCall(CodeBase $code_base, Context $context, array $args, Node $node = null): void
@@ -428,6 +434,7 @@ abstract class FunctionLikeDeclarationType extends Type implements FunctionInter
* @unused-param $context * @unused-param $context
* @unused-param $code_base * @unused-param $code_base
* @param Parameter[] $parameter_list @unused-param * @param Parameter[] $parameter_list @unused-param
* @return never
* @override * @override
*/ */
public function analyzeWithNewParams(Context $context, CodeBase $code_base, array $parameter_list): Context public function analyzeWithNewParams(Context $context, CodeBase $code_base, array $parameter_list): Context
@@ -438,19 +445,26 @@ abstract class FunctionLikeDeclarationType extends Type implements FunctionInter
/** /**
* @override * @override
* @unused-param $parameter * @unused-param $parameter
* @return never
*/ */
public function appendParameter(Parameter $parameter): void public function appendParameter(Parameter $parameter): void
{ {
throw new \AssertionError('unexpected call to ' . __METHOD__); throw new \AssertionError('unexpected call to ' . __METHOD__);
} }
/** @override */ /**
* @override
* @return never
*/
public function clearParameterList(): void public function clearParameterList(): void
{ {
throw new \AssertionError('unexpected call to ' . __METHOD__); throw new \AssertionError('unexpected call to ' . __METHOD__);
} }
/** @override */ /**
* @override
* @return never
*/
public function cloneParameterList(): void public function cloneParameterList(): void
{ {
throw new \AssertionError('unexpected call to ' . __METHOD__); throw new \AssertionError('unexpected call to ' . __METHOD__);
@@ -485,6 +499,7 @@ abstract class FunctionLikeDeclarationType extends Type implements FunctionInter
/** /**
* @override * @override
* @param list<Node|int|string|float> $args * @param list<Node|int|string|float> $args
* @return never
*/ */
public function getDependentReturnType(CodeBase $code_base, Context $context, array $args): UnionType public function getDependentReturnType(CodeBase $code_base, Context $context, array $args): UnionType
{ {
@@ -535,7 +550,10 @@ abstract class FunctionLikeDeclarationType extends Type implements FunctionInter
return true; return true;
} }
/** @override */ /**
* @override
* @return never
*/
public function getInternalScope(): ClosedScope public function getInternalScope(): ClosedScope
{ {
throw new \AssertionError('unexpected call to ' . __METHOD__); throw new \AssertionError('unexpected call to ' . __METHOD__);
@@ -638,6 +656,7 @@ abstract class FunctionLikeDeclarationType extends Type implements FunctionInter
/** /**
* @param list<Parameter> $parameter_list * @param list<Parameter> $parameter_list
* @return never
*/ */
public function setParameterList(array $parameter_list): void public function setParameterList(array $parameter_list): void
{ {
@@ -646,6 +665,7 @@ abstract class FunctionLikeDeclarationType extends Type implements FunctionInter
/** /**
* @internal - moves real parameter defaults to the inferred phpdoc parameters * @internal - moves real parameter defaults to the inferred phpdoc parameters
* @return never
*/ */
public function inheritRealParameterDefaults(): void public function inheritRealParameterDefaults(): void
{ {
@@ -697,6 +717,9 @@ abstract class FunctionLikeDeclarationType extends Type implements FunctionInter
return false; return false;
} }
/**
* @return never
*/
public function recordOutputReferenceParamName(string $parameter_name): void public function recordOutputReferenceParamName(string $parameter_name): void
{ {
throw new \AssertionError('unexpected call to ' . __METHOD__); throw new \AssertionError('unexpected call to ' . __METHOD__);
@@ -709,22 +732,32 @@ abstract class FunctionLikeDeclarationType extends Type implements FunctionInter
/** /**
* @unused * @unused
* @return never
*/ */
public function setComment(Comment $comment): void public function setComment(Comment $comment): void
{ {
throw new \AssertionError('unexpected call to ' . __METHOD__); throw new \AssertionError('unexpected call to ' . __METHOD__);
} }
/**
* @return never
*/
public function setFunctionCallAnalyzer(Closure $analyzer): void public function setFunctionCallAnalyzer(Closure $analyzer): void
{ {
throw new \AssertionError('unexpected call to ' . __METHOD__); throw new \AssertionError('unexpected call to ' . __METHOD__);
} }
public function addFunctionCallAnalyzer(Closure $analyzer): void /**
* @return never
*/
public function addFunctionCallAnalyzer(Closure $closure, PluginV3 $plugin = null): void
{ {
throw new \AssertionError('unexpected call to ' . __METHOD__); throw new \AssertionError('unexpected call to ' . __METHOD__);
} }
/**
* @return never
*/
public function setDependentReturnTypeClosure(Closure $analyzer): void public function setDependentReturnTypeClosure(Closure $analyzer): void
{ {
throw new \AssertionError('unexpected call to ' . __METHOD__); throw new \AssertionError('unexpected call to ' . __METHOD__);
@@ -733,6 +766,7 @@ abstract class FunctionLikeDeclarationType extends Type implements FunctionInter
/** /**
* @override * @override
* @unused-param $has_return * @unused-param $has_return
* @return never
*/ */
public function setHasReturn(bool $has_return): void public function setHasReturn(bool $has_return): void
{ {
@@ -742,6 +776,7 @@ abstract class FunctionLikeDeclarationType extends Type implements FunctionInter
/** /**
* @override * @override
* @unused-param $has_yield * @unused-param $has_yield
* @return never
*/ */
public function setHasYield(bool $has_yield): void public function setHasYield(bool $has_yield): void
{ {
@@ -756,6 +791,7 @@ abstract class FunctionLikeDeclarationType extends Type implements FunctionInter
/** /**
* @override * @override
* @unused-param $has_static_variable * @unused-param $has_static_variable
* @return never
*/ */
public function setHasStaticVariable(bool $has_static_variable): void public function setHasStaticVariable(bool $has_static_variable): void
{ {
@@ -767,6 +803,9 @@ abstract class FunctionLikeDeclarationType extends Type implements FunctionInter
return false; return false;
} }
/**
* @return never
*/
public function setInternalScope(ClosedScope $scope): void public function setInternalScope(ClosedScope $scope): void
{ {
throw new \AssertionError('unexpected call to ' . __METHOD__); throw new \AssertionError('unexpected call to ' . __METHOD__);
@@ -775,6 +814,7 @@ abstract class FunctionLikeDeclarationType extends Type implements FunctionInter
/** /**
* @unused-param $is_return_type_undefined * @unused-param $is_return_type_undefined
* @override * @override
* @return never
*/ */
public function setIsReturnTypeUndefined(bool $is_return_type_undefined): void public function setIsReturnTypeUndefined(bool $is_return_type_undefined): void
{ {
@@ -784,6 +824,7 @@ abstract class FunctionLikeDeclarationType extends Type implements FunctionInter
/** /**
* @unused-param $number * @unused-param $number
* @override * @override
* @return never
*/ */
public function setNumberOfOptionalParameters(int $number): void public function setNumberOfOptionalParameters(int $number): void
{ {
@@ -793,12 +834,16 @@ abstract class FunctionLikeDeclarationType extends Type implements FunctionInter
/** /**
* @unused-param $number * @unused-param $number
* @override * @override
* @return never
*/ */
public function setNumberOfRequiredParameters(int $number): void public function setNumberOfRequiredParameters(int $number): void
{ {
throw new \AssertionError('unexpected call to ' . __METHOD__); throw new \AssertionError('unexpected call to ' . __METHOD__);
} }
/**
* @return never
*/
public function setPHPDocParameterTypeMap(array $parameter_map): void public function setPHPDocParameterTypeMap(array $parameter_map): void
{ {
throw new \AssertionError('unexpected call to ' . __METHOD__); throw new \AssertionError('unexpected call to ' . __METHOD__);
@@ -806,6 +851,7 @@ abstract class FunctionLikeDeclarationType extends Type implements FunctionInter
/** /**
* @param ?UnionType $union_type the raw phpdoc union type * @param ?UnionType $union_type the raw phpdoc union type
* @return never
*/ */
public function setPHPDocReturnType(?UnionType $union_type): void public function setPHPDocReturnType(?UnionType $union_type): void
{ {
@@ -888,12 +934,16 @@ abstract class FunctionLikeDeclarationType extends Type implements FunctionInter
/** /**
* @param list<string> $suppress_issue_list * @param list<string> $suppress_issue_list
* @return never
*/ */
public function setSuppressIssueSet(array $suppress_issue_list): void public function setSuppressIssueSet(array $suppress_issue_list): void
{ {
throw new \AssertionError('should not call ' . __METHOD__); throw new \AssertionError('should not call ' . __METHOD__);
} }
/**
* @return never
*/
public function setUnionType(UnionType $type): void public function setUnionType(UnionType $type): void
{ {
throw new \AssertionError('should not call ' . __METHOD__); throw new \AssertionError('should not call ' . __METHOD__);
@@ -1029,7 +1079,7 @@ abstract class FunctionLikeDeclarationType extends Type implements FunctionInter
*/ */
private function getReturnTemplateTypeExtractorClosure(CodeBase $code_base, TemplateType $template_type): ?Closure private function getReturnTemplateTypeExtractorClosure(CodeBase $code_base, TemplateType $template_type): ?Closure
{ {
$return_closure = $this->getUnionType()->getTemplateTypeExtractorClosure($code_base, $template_type); $return_closure = $this->return_type->getTemplateTypeExtractorClosure($code_base, $template_type);
if (!$return_closure) { if (!$return_closure) {
return null; return null;
} }
@@ -1102,6 +1152,9 @@ abstract class FunctionLikeDeclarationType extends Type implements FunctionInter
return !$other->isDefiniteNonCallableType($code_base); return !$other->isDefiniteNonCallableType($code_base);
} }
/**
* @return never
*/
public function setAttributeList(array $attribute_list): void public function setAttributeList(array $attribute_list): void
{ {
throw new \AssertionError('should not call ' . __METHOD__); throw new \AssertionError('should not call ' . __METHOD__);
@@ -763,7 +763,7 @@ class GenericArrayType extends ArrayType implements GenericArrayInterface
return $this->asPHPDocUnionType(); return $this->asPHPDocUnionType();
} }
// TODO: Override in array shape subclass // TODO: Override in array shape subclass
return $new_element_type->asGenericArrayTypes($this->getKeyType()); return $new_element_type->asGenericArrayTypes($this->key_type);
} }
/** /**
@@ -82,10 +82,11 @@ final class IntersectionType extends Type
* @param non-empty-list<Type|UnionType> $types * @param non-empty-list<Type|UnionType> $types
* @param ?CodeBase $code_base * @param ?CodeBase $code_base
* @param ?Context $context @unused-param * @param ?Context $context @unused-param
* @param bool $suppress_union_type_warnings
*/ */
public static function createFromTypes(array $types, ?CodeBase $code_base, ?Context $context): Type public static function createFromTypes(array $types, ?CodeBase $code_base, ?Context $context, bool $suppress_union_type_warnings = false): Type
{ {
$new_types = self::flattenTypes($types); $new_types = self::flattenTypes($types, $code_base, $context, $suppress_union_type_warnings);
if (!$new_types) { if (!$new_types) {
throw new AssertionError('Saw empty list of type_parts in intersection type'); throw new AssertionError('Saw empty list of type_parts in intersection type');
} }
@@ -131,14 +132,37 @@ final class IntersectionType extends Type
* @param non-empty-list<Type|UnionType> $types * @param non-empty-list<Type|UnionType> $types
* @return non-empty-list<Type> * @return non-empty-list<Type>
*/ */
private static function flattenTypes(array $types): array private static function flattenTypes(array $types, ?CodeBase $code_base, ?Context $context, bool $suppress_union_type_warnings): array
{ {
$new_types = []; $new_types = [];
foreach ($types as $type) { foreach ($types as $type) {
if ($type instanceof UnionType) { if ($type instanceof UnionType) {
$type_set = $type->getTypeSet(); $type_set = $type->getTypeSet();
if (count($type_set) !== 1) { if (count($type_set) !== 1) {
throw new AssertionError("Expected union type_parts to contain a single type"); if ($suppress_union_type_warnings) {
if ($code_base && $context) {
Issue::maybeEmit(
$code_base,
$context,
Issue::CommentUnsupportedUnionType,
$context->getLineNumberStart(),
$type
);
}
$type = $type->withFlattenedArrayShapeOrLiteralTypeInstances();
$type_set = $type->getTypeSet();
if (count($type_set) !== 1) {
if ($type->isArray()) {
$type_set = [ArrayType::instance($type->containsNullable())];
} elseif ($type->isObject()) {
$type_set = [ObjectType::instance($type->containsNullable())];
} else {
$type_set = [MixedType::instance(false)];
}
}
} else {
throw new AssertionError("Expected union type_parts to contain a single type");
}
} }
$type = reset($type_set); $type = reset($type_set);
if (!$type instanceof Type) { if (!$type instanceof Type) {
@@ -152,10 +176,13 @@ final class IntersectionType extends Type
} }
} }
} }
if (!$new_types) { $has_exclusively_truthy = false;
throw new AssertionError("Did not expect empty list of types for intersection type"); $has_array = false;
} $has_object = false;
foreach ($new_types as $i => $type) { foreach ($new_types as $i => $type) {
if (!$has_exclusively_truthy) {
$has_exclusively_truthy = $type->isAlwaysTruthy();
}
// Convert callable&object to callable-object, etc. // Convert callable&object to callable-object, etc.
if ($type instanceof CallableType) { if ($type instanceof CallableType) {
foreach ($new_types as $j => $other) { foreach ($new_types as $j => $other) {
@@ -174,8 +201,54 @@ final class IntersectionType extends Type
} }
} }
} }
if ($type instanceof ObjectType) {
$has_object = true;
} elseif ($type instanceof ArrayType) {
$has_array = true;
}
// TODO: Convert iterable<k,v> to Traversable<k,v> if another value is an object
}
if ($has_object) {
foreach ($new_types as $j => $other) {
if ($other->isObject()) {
// do nothing
} elseif (!$other->isPossiblyObject()) {
// Emit PhanImpossibleIntersectionType elsewhere
continue;
} else {
$other = $other->asObjectType();
if ($other) {
$new_types[$j] = $other;
}
}
}
} elseif ($has_array) {
foreach ($new_types as $j => $other) {
if ($other instanceof ArrayType) {
continue;
}
if (!$other instanceof IterableType && !$other instanceof MixedType) {
// Emit PhanImpossibleIntersectionType elsewhere
continue;
}
$other = $other->asArrayType();
if ($other) {
$new_types[$j] = $other;
}
}
}
if ($has_exclusively_truthy) {
foreach ($new_types as $j => $other) {
if ($other->isAlwaysTruthy()) {
continue;
}
if (!$other->isPossiblyTruthy()) {
// Emit PhanImpossibleIntersectionType elsewhere
continue;
}
$new_types[$j] = $other->asNonFalseyType();
}
} }
// @phan-suppress-next-line PhanPartialTypeMismatchReturn
return \array_values($new_types); return \array_values($new_types);
} }
@@ -32,6 +32,7 @@ final class LiteralFloatType extends FloatType implements LiteralTypeInterface
* @unused-param $is_nullable * @unused-param $is_nullable
* @internal - do not call * @internal - do not call
* @deprecated * @deprecated
* @return never
*/ */
public static function instance(bool $is_nullable) public static function instance(bool $is_nullable)
{ {
@@ -142,7 +143,7 @@ final class LiteralFloatType extends FloatType implements LiteralTypeInterface
switch ($type::NAME) { switch ($type::NAME) {
case 'float': case 'float':
if ($type instanceof LiteralFloatType) { if ($type instanceof LiteralFloatType) {
return $type->getValue() === $this->getValue(); return $type->value === $this->value;
} }
return true; return true;
case 'string': case 'string':
@@ -189,7 +190,7 @@ final class LiteralFloatType extends FloatType implements LiteralTypeInterface
switch ($type::NAME) { switch ($type::NAME) {
case 'float': case 'float':
if ($type instanceof LiteralFloatType) { if ($type instanceof LiteralFloatType) {
return $type->getValue() === $this->getValue(); return $type->value === $this->value;
} }
return true; return true;
default: default:
@@ -210,7 +211,7 @@ final class LiteralFloatType extends FloatType implements LiteralTypeInterface
if ($type instanceof ScalarType) { if ($type instanceof ScalarType) {
if ($type::NAME === 'float') { if ($type::NAME === 'float') {
if ($type instanceof LiteralFloatType) { if ($type instanceof LiteralFloatType) {
return $type->getValue() === $this->getValue(); return $type->value === $this->value;
} }
return true; return true;
} }

Some files were not shown because too many files have changed in this diff Show More