SideEffectsDetector
in package
FinalYes
Table of Contents
Constants
- INPUT_OUTPUT_FUNCTIONS : mixed = ['fopen', 'file_get_contents', 'file_put_conten...
- OUTPUT_TOKENS : mixed = [T_PRINT, T_ECHO, T_INLINE_HTML]
- PROCESS_EXIT_TOKENS : mixed = [T_EXIT]
- SCOPE_POLLUTING_FUNCTIONS : mixed = ['putenv', 'setlocale', 'class_exists', 'ini_set']
- STANDARD_OUTPUT_FUNCTIONS : mixed = ['printf', 'vprintf']
Properties
- $functionMetadata : array<string, array{'hasSideEffects': bool}>
- $scopePollutingTokens : array<string|int, int>
Methods
- __construct() : mixed
- getSideEffects() : array<string|int, SideEffect::*>
- consumeWhitespaces() : void
- getFunctionCall() : string|null
- getFunctionCallSideEffect() : SideEffect::*|null
- getMethodCall() : string|null
- getPropertyAccess() : string|null
- isAnonymousFunction() : bool
- isNonLocalVariable() : bool
Constants
INPUT_OUTPUT_FUNCTIONS
private
mixed
INPUT_OUTPUT_FUNCTIONS
= ['fopen', 'file_get_contents', 'file_put_contents', 'fwrite', 'fputs', 'fread', 'unlink']
OUTPUT_TOKENS
private
mixed
OUTPUT_TOKENS
= [T_PRINT, T_ECHO, T_INLINE_HTML]
PROCESS_EXIT_TOKENS
private
mixed
PROCESS_EXIT_TOKENS
= [T_EXIT]
SCOPE_POLLUTING_FUNCTIONS
private
mixed
SCOPE_POLLUTING_FUNCTIONS
= ['putenv', 'setlocale', 'class_exists', 'ini_set']
STANDARD_OUTPUT_FUNCTIONS
private
mixed
STANDARD_OUTPUT_FUNCTIONS
= ['printf', 'vprintf']
Properties
$functionMetadata
private
array<string, array{'hasSideEffects': bool}>
$functionMetadata
$scopePollutingTokens
private
array<string|int, int>
$scopePollutingTokens
= [T_CLASS, T_FUNCTION, T_NEW, T_EVAL, T_GLOBAL, T_GOTO, T_HALT_COMPILER, T_INCLUDE, T_INCLUDE_ONCE, T_REQUIRE, T_REQUIRE_ONCE, T_THROW, T_UNSET, T_UNSET_CAST]
Methods
__construct()
public
__construct() : mixed
getSideEffects()
public
getSideEffects(string $code) : array<string|int, SideEffect::*>
APIYes
Parameters
- $code : string
Return values
array<string|int, SideEffect::*>consumeWhitespaces()
private
consumeWhitespaces(array<int, array{0: int, 1: string, 2: int}|string|int> $tokens, int &$index) : void
Parameters
- $tokens : array<int, array{0: int, 1: string, 2: int}|string|int>
- $index : int
getFunctionCall()
private
getFunctionCall(array<int, array{0: int, 1: string, 2: int}|string|int> $tokens, int $index) : string|null
Parameters
- $tokens : array<int, array{0: int, 1: string, 2: int}|string|int>
- $index : int
Return values
string|nullgetFunctionCallSideEffect()
private
getFunctionCallSideEffect(string $functionName) : SideEffect::*|null
Parameters
- $functionName : string
Return values
SideEffect::*|nullgetMethodCall()
private
getMethodCall(array<int, array{0: int, 1: string, 2: int}|string|int> $tokens, int $index) : string|null
Parameters
- $tokens : array<int, array{0: int, 1: string, 2: int}|string|int>
- $index : int
Return values
string|nullgetPropertyAccess()
private
getPropertyAccess(array<int, array{0: int, 1: string, 2: int}|string|int> $tokens, int $index) : string|null
Parameters
- $tokens : array<int, array{0: int, 1: string, 2: int}|string|int>
- $index : int
Return values
string|nullisAnonymousFunction()
private
isAnonymousFunction(array<int, array{0: int, 1: string, 2: int}|string|int> $tokens, int $index) : bool
Parameters
- $tokens : array<int, array{0: int, 1: string, 2: int}|string|int>
- $index : int
Return values
boolisNonLocalVariable()
private
isNonLocalVariable(array<int, array{0: int, 1: string, 2: int}|string|int> $tokens, int $index) : bool
Parameters
- $tokens : array<int, array{0: int, 1: string, 2: int}|string|int>
- $index : int