Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit 609f4a0

Browse files
committed
ensure compatibility with PHP 8 stack traces
1 parent 13982b5 commit 609f4a0

File tree

2 files changed

+46
-7
lines changed

2 files changed

+46
-7
lines changed

src/Symfony/Component/Cache/Adapter/PhpArrayAdapter.php

Lines changed: 33 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -275,9 +275,40 @@ public static function throwOnRequiredClass($class)
275275
'function' => 'spl_autoload_call',
276276
'args' => [$class],
277277
];
278-
$i = 1 + array_search($autoloadFrame, $trace, true);
279278

280-
if (isset($trace[$i]['function']) && !isset($trace[$i]['class'])) {
279+
if (false === $i = array_search($autoloadFrame, $trace, true)) {
280+
if (\PHP_VERSION_ID >= 80000) {
281+
foreach ($trace as $frame) {
282+
if ([$class] !== $frame['args']) {
283+
continue;
284+
}
285+
286+
if (isset($frame['function']) && !isset($frame['class'])) {
287+
switch ($frame['function']) {
288+
case 'get_class_methods':
289+
case 'get_class_vars':
290+
case 'get_parent_class':
291+
case 'is_a':
292+
case 'is_subclass_of':
293+
case 'class_exists':
294+
case 'class_implements':
295+
case 'class_parents':
296+
case 'trait_exists':
297+
case 'defined':
298+
case 'interface_exists':
299+
case 'method_exists':
300+
case 'property_exists':
301+
case 'is_callable':
302+
return;
303+
}
304+
}
305+
}
306+
}
307+
308+
throw $e;
309+
}
310+
311+
if (isset($trace[++$i]['function']) && !isset($trace[$i]['class'])) {
281312
switch ($trace[$i]['function']) {
282313
case 'get_class_methods':
283314
case 'get_class_vars':

src/Symfony/Component/Config/Resource/ClassExistenceResource.php

Lines changed: 13 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -190,12 +190,20 @@ public static function throwOnRequiredClass($class, \Exception $previous = null)
190190
'args' => [$class],
191191
];
192192

193-
if (false === $i = array_search($autoloadFrame, $trace, true)) {
193+
if (\PHP_VERSION_ID >= 80000 && isset($trace[1])) {
194+
$callerFrame = $trace[1];
195+
$i = 2;
196+
} elseif (isset($trace[1]) && isset($trace[2]) && $autoloadFrame === $trace[1]) {
197+
$callerFrame = $trace[2];
198+
$i = 3;
199+
} elseif (false !== $i = array_search($autoloadFrame, $trace, true)) {
200+
$callerFrame = $trace[++$i];
201+
} else {
194202
throw $e;
195203
}
196204

197-
if (isset($trace[++$i]['function']) && !isset($trace[$i]['class'])) {
198-
switch ($trace[$i]['function']) {
205+
if (isset($callerFrame['function']) && !isset($callerFrame['class'])) {
206+
switch ($callerFrame['function']) {
199207
case 'get_class_methods':
200208
case 'get_class_vars':
201209
case 'get_parent_class':
@@ -214,8 +222,8 @@ public static function throwOnRequiredClass($class, \Exception $previous = null)
214222
}
215223

216224
$props = [
217-
'file' => isset($trace[$i]['file']) ? $trace[$i]['file'] : null,
218-
'line' => isset($trace[$i]['line']) ? $trace[$i]['line'] : null,
225+
'file' => isset($callerFrame['file']) ? $callerFrame['file'] : null,
226+
'line' => isset($callerFrame['line']) ? $callerFrame['line'] : null,
219227
'trace' => \array_slice($trace, 1 + $i),
220228
];
221229

0 commit comments

Comments
 (0)