Req #72285 [Asn]: SessionHandlerInterface Function Signatures
Edit report at https://bugs.php.net/bug.php?id=72285&edit=1
ID: 72285
Updated by: bwoebi@php.net
Reported by: hpdl at oscommerce dot com
Summary: SessionHandlerInterface Function Signatures
Status: Assigned
Type: Feature/Change Request
Package: Session related
Operating System: *
PHP Version: 7.0.7
Assigned To: yohgaki
Block user comment: N
Private report: N
New Comment:
Perhaps we just could specify types on internal (non-final) classes and interfaces function
parameters.
Then we can argument with covariance if someone leaves the scalar types out (=> no BC break) and
it still works when people use the scalar types.
Previous Comments:
------------------------------------------------------------------------
[2016-05-30 09:34:09] yohgaki@php.net
Change Request would be the suitable bug type.
------------------------------------------------------------------------
[2016-05-30 09:31:42] yohgaki@php.net
Object API in session is the main source of session module problems...
------------------------------------------------------------------------
[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
Thread (6 messages)