Bug #77287 [Com]: Fatal error: Uncaught TypeError
| From: | andrew at fw dot net dot nz | Date: | Mon, 17 Dec 2018 00:40:12 +0000 |
| Subject: | Bug #77287 [Com]: Fatal error: Uncaught TypeError | ||
| References: | 1 | Groups: | php.bugs |
| Request: | Send a blank email to php-bugs+get-218475@lists.php.net to get a copy of this message | ||
Edit report at https://bugs.php.net/bug.php?id=77287&edit=1
ID: 77287
Comment by: andrew at fw dot net dot nz
Reported by: someone dot is dot alive at gmail dot com
Summary: Fatal error: Uncaught TypeError
Status: Open
Type: Bug
Package: opcache
Operating System: Windows
PHP Version: 7.3.0
Block user comment: N
Private report: N
New Comment:
I encountered the same error after upgrading php-fpm from 7.2 to 7.3 on Ubuntu 18.04. An argument
with a default parameter threw a type error "unknown given" when the callee did not
provide the argument at all.
I ran opcache_reset() which resolved it.
A google search found another mention of the same error in 7.3 here:
https://github.com/nextcloud/server/issues/11868
Previous Comments:
------------------------------------------------------------------------
[2018-12-12 10:59:04] nikic@php.net
Can't repro on Ubuntu, possibly Windows only.
The resolved default value for the 2nd arg will be stored in the RT cache, so maybe there is an
invalidation problem.
------------------------------------------------------------------------
[2018-12-12 10:26:01] someone dot is dot alive at gmail dot com
I think i found a problem - when opcache is enabled i get the error. Usually happens when i edit
file (e.g. (un)comment TestConst::STEP_2)
This is the shortest code to reproduce:
- no exception at all (e.g. for first 10 requests or it may throw error on first attempt)
- Argument 2 passed to PHPDemo\Utils::testInput() must be of the type int, unknown given
- Argument 2 passed to PHPDemo\Utils::testInput() must be of the type int, object given
- Argument 2 passed to PHPDemo\Utils::testInput() must be of the type int, bool given
<?php
namespace PHPDemo;
class TestConst {
const STEP_1 = 1;
const STEP_2 = 2;
}
class Utils {
public static function testInput(string $name, int $step = TestConst::STEP_1) { }
}
Utils::testInput('abc 1');
------
I deleted all cached files, restarted server
OPCache log (opcache.log_verbosity_level=4)
Wed Dec 12 11:15:22 2018 (33644): Debug Restart Scheduled! Reason: user
Wed Dec 12 11:15:22 2018 (33644): Debug Restarting!
Wed Dec 12 11:17:53 2018 (33644): Message Cached script 'D:\www\demo.php'
Wed Dec 12 11:15:45 2018 (33644): Message Added key 'D:/www/demo.php'
Wed Dec 12 11:18:44 2018 (33644): Message Cached script 'D:\www\demo.php'
Wed Dec 12 11:18:44 2018 (33644): Message Added key 'D:/www/demo.php'
------------------------------------------------------------------------
[2018-12-12 09:11:07] peehaa@php.net
Can you limit it to the actual problem code?
There are a lot of random (and seemingly unrelated) things going on in the code. If all that code is
actually needed to reproduce please say so. If need please provide the minimal code to reproduce the
problem.
------------------------------------------------------------------------
[2018-12-12 08:58:46] someone dot is dot alive at gmail dot com
Test script (below) is copied from zip file.
<?php
namespace PHPDemo;
class TestConst {
const STEP_1 = 1;
const STEP_2 = 2;
public static $persistent = true;
private static $instance = null;
private $currentStep = self::STEP_1;
private function __construct() { }
public function wasPreviousStepCompleted(int $currentStep) : bool {
return $this->currentStep >= $currentStep;
}
public static function &instance() {
if (session_id() == '') {
session_start();
}
if (is_null(self::$instance)) {
self::$instance = new TestConst();
}
if (self::$persistent) {
$_SESSION['TestConst'] = self::$instance;
} else {
unset($_SESSION['TestConst']);
}
return self::$instance;
}
public static function destroyInstance() {
self::$instance = null;
}
public function __wakeup() {
self::$instance =& $this;
}
}
class Utils {
public static function testInput(string $name, int $step = TestConst::STEP_1) {
var_dump(func_get_args());
if (empty($name)) {
return;
}
echo 'Hello world! ' . $name . ' > ' . $step . '<br
/>';
$test = TestConst::instance();
if ($test->wasPreviousStepCompleted($step)) {
echo 'yes';
} else {
echo 'no';
}
echo '<br />';
}
}
TestConst::instance();
Utils::testInput('abc 1');
Utils::testInput('abc 2', TestConst::STEP_2);
Utils::testInput('abc 3');
------------------------------------------------------------------------
[2018-12-12 08:48:29] peehaa@php.net
Thank you for this bug report. To properly diagnose the problem, we
need a short but complete example script to be able to reproduce
this bug ourselves.
A proper reproducing script starts with <?php,
is max. 10-20 lines long and does not require any external
resources such as databases, etc. If the script requires a
database to demonstrate the issue, please make sure it creates
all necessary tables, stored procedures etc.
Please avoid embedding huge scripts into the report.
------------------------------------------------------------------------
The remainder of the comments for this report are too long. To view
the rest of the comments, please view the bug report online at
https://bugs.php.net/bug.php?id=77287
--
Edit this bug report at https://bugs.php.net/bug.php?id=77287&edit=1