Bug #77287 [Com]: Fatal error: Uncaught TypeError

From: 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

« previous php.bugs (#218475) next »