Repository navigation
Expand file tree
/
Copy pathfunction-call-statement-result-discarded.php
More file actions
110 lines (81 loc) · 2.49 KB
/
Copy pathfunction-call-statement-result-discarded.php
File metadata and controls
110 lines (81 loc) · 2.49 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
<?php // lint >= 8.1
namespace FunctionCallStatementResultDiscarded;
#[\NoDiscard]
function withSideEffects(int $i): array {
echo __FUNCTION__ . "\n";
return [1];
}
withSideEffects(5);
foreach (withSideEffects(5) as $num) {
var_dump($num);
}
#[\nOdISCArD]
function differentCase(): array {
echo __FUNCTION__ . "\n";
return [1];
}
differentCase();
$callable = 'FunctionCallStatementResultDiscarded\\withSideEffects';
$callableResult = $callable();
$callable();
$firstClassCallable = withSideEffects(...);
$firstClasCallableResult = $firstClassCallable(5);
$firstClassCallable(5);
$closureWithNoDiscard = #[\NoDiscard] function () { return 1; };
$a = $closureWithNoDiscard();
$closureWithNoDiscard();
$arrowWithNoDiscard = #[\NoDiscard] fn () => 1;
$b = $arrowWithNoDiscard();
$arrowWithNoDiscard();
withSideEffects(...);
function canDiscard(int $i): int
{
return 1;
}
canDiscard(5);
$canDiscardCb = 'FunctionCallStatementResultDiscarded\\canDiscard';
$canDiscardCb();
function (): void {
if (random_int(1, 1)) {
$fn = 'call_user_func';
} else {
$fn = 'nope';
}
$fn('FunctionCallStatementResultDiscarded\\withSideEffects', 5);
};
call_user_func('FunctionCallStatementResultDiscarded\\withSideEffects', 5);
call_user_func_array('FunctionCallStatementResultDiscarded\\withSideEffects', [5]);
forward_static_call('FunctionCallStatementResultDiscarded\\withSideEffects', 5);
forward_static_call_array('FunctionCallStatementResultDiscarded\\withSideEffects', [5]);
call_user_func(callback: 'FunctionCallStatementResultDiscarded\\withSideEffects', i: 5);
call_user_func('call_user_func', 'FunctionCallStatementResultDiscarded\\withSideEffects', 5);
call_user_func($firstClassCallable, 5);
call_user_func('FunctionCallStatementResultDiscarded\\canDiscard', 5);
$result = call_user_func('FunctionCallStatementResultDiscarded\\withSideEffects', 5);
class Foo
{
#[\NoDiscard]
public function doFoo(): int
{
return 1;
}
#[\NoDiscard]
public static function doBar(): int
{
return 1;
}
public function canDiscard(): int
{
return 1;
}
}
call_user_func([new Foo(), 'doFoo']);
call_user_func([Foo::class, 'doBar']);
call_user_func('FunctionCallStatementResultDiscarded\\Foo::doBar');
call_user_func([new Foo(), 'canDiscard']);
function (bool $b): void {
$fn = $b ? 'call_user_func' : 'nope';
$fn('FunctionCallStatementResultDiscarded\\withSideEffects', 5);
$fn = $b ? 'call_user_func' : 'FunctionCallStatementResultDiscarded\\canDiscard';
$fn('FunctionCallStatementResultDiscarded\\canDiscard', 5);
};