Doc->Bug #72285 [Opn]: SessionHandlerInterface Function Signatures

From: Date: Mon, 30 May 2016 09:31:42 +0000
Subject: Doc->Bug #72285 [Opn]: SessionHandlerInterface Function Signatures
References: 1  Groups: php.bugs 
Request: Send a blank email to php-bugs+get-201336@lists.php.net to get a copy of this message
Edit report at https://bugs.php.net/bug.php?id=72285&edit=1 ID: 72285 Updated by: yohgaki@php.net Reported by: hpdl at oscommerce dot com Summary: SessionHandlerInterface Function Signatures Status: Open -Type: Documentation Problem +Type: Bug Package: Session related Operating System: WIN10 PHP Version: 7.0.7 -Assigned To: +Assigned To: yohgaki Block user comment: N Private report: N New Comment: Object API in session is the main source of session module problems... Previous Comments: ------------------------------------------------------------------------ [2016-05-30 05:29:02] krakjoe@php.net This is not a problem particular to this interface; Many such documentation pages are not in sync with the code. The problem is we can't change the code without breaking BC, so I think this is a documentation problem. I think we should make effort to inform people that prototypes in documentation don't always match code, and that it's code (reflection) that you need to look at if you are extending internal classes. ------------------------------------------------------------------------ [2016-05-30 00:24:33] hpdl at oscommerce dot com Description: ------------ The documentation for the following functions include parameter type declarations: SessionHandler::open(string $save_path, string $session_name) SessionHandler::read(string $session_id) SessionHandler::write(string $session_id, string $session_data) SessionHandler::destroy(string $session_id) SessionHandler::gc(int $maxlifetime) http://php.net/manual/en/class.sessionhandler.php however using the same type declarations in the session handler class returns a PHP fatal error. Also tested with PHP 7.1.0-dev rc3495d5 with the same result. Test script: --------------- <?php class SessionTest implements \SessionHandlerInterface { public function __construct() { session_set_save_handler($this, true); } public function open(string $save_path, string $name): bool { return true; } public function close(): bool { return true; } public function read(string $session_id): string { return ''; } public function write(string $session_id, string $session_data): bool { return true; } public function destroy(string $session_id): bool { return true; } public function gc(int $maxlifetime): bool { return true; } } $SessionTest = new SessionTest(); Expected result: ---------------- No error should be expected. Actual result: -------------- Fatal error: Declaration of SessionTest::open(string $save_path, string $name): bool must be compatible with SessionHandlerInterface::open($save_path, $session_name) in C:\SessionTest.php on line 2 Fatal error: Declaration of SessionTest::read(string $session_id): string must be compatible with SessionHandlerInterface::read($key) in C:\SessionTest.php on line 2 Fatal error: Declaration of SessionTest::write(string $session_id, string $session_data): bool must be compatible with SessionHandlerInterface::write($key, $val) in C:\SessionTest.php on line 2 Fatal error: Declaration of SessionTest::destroy(string $session_id): bool must be compatible with SessionHandlerInterface::destroy($key) in C:\SessionTest.php on line 2 Fatal error: Declaration of SessionTest::gc(int $maxlifetime): bool must be compatible with SessionHandlerInterface::gc($maxlifetime) in C:\SessionTest.php on line 2 ------------------------------------------------------------------------ -- Edit this bug report at https://bugs.php.net/bug.php?id=72285&edit=1

« previous php.bugs (#201336) next »