From: Nikita Popov Date: Fri, 14 Aug 2020 13:07:55 +0000 (+0200) Subject: Use variadic signature for PDOStatement::fetchAll() X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=cfaa270da5b511e2821aa0a5e036ef5879a56bed;p=php Use variadic signature for PDOStatement::fetchAll() The current signature is incorrect, because the $ctor_args parameter is not required to be an array (it can at least also be null, and isn't enforced by an exception anyway). I'm going for the variadic signature here, because we already use the same variadic signature in PDO::query() and PDOStatement::setFetchMode(), all of them accepting essentially the same arguments. --- diff --git a/ext/pdo/pdo_stmt.stub.php b/ext/pdo/pdo_stmt.stub.php index c44753387c..d81097c164 100644 --- a/ext/pdo/pdo_stmt.stub.php +++ b/ext/pdo/pdo_stmt.stub.php @@ -34,11 +34,8 @@ class PDOStatement implements IteratorAggregate /** @return mixed */ public function fetch(int $fetch_style = PDO::FETCH_BOTH, int $cursor_orientation = PDO::FETCH_ORI_NEXT, int $cursor_offset = 0) {} - /** - * @param mixed $fetch_argument - * @return array|false - */ - public function fetchAll(int $fetch_style = PDO::FETCH_BOTH, $fetch_argument = UNKNOWN, array $ctor_args = []) {} + /** @return array|false */ + public function fetchAll(int $fetch_style = PDO::FETCH_BOTH, mixed ...$fetch_args) {} /** @return mixed */ public function fetchColumn(int $column_number = 0) {} diff --git a/ext/pdo/pdo_stmt_arginfo.h b/ext/pdo/pdo_stmt_arginfo.h index f0241a3001..a819f6a91e 100644 --- a/ext/pdo/pdo_stmt_arginfo.h +++ b/ext/pdo/pdo_stmt_arginfo.h @@ -1,5 +1,5 @@ /* This is a generated file, edit the .stub.php file instead. - * Stub hash: d64c75660cfc44b582e7dcc20c4ce22e8e0848e1 */ + * Stub hash: 45c43e025d9194f2dd7b2ab13d86a4e5f316fa48 */ ZEND_BEGIN_ARG_INFO_EX(arginfo_class_PDOStatement_bindColumn, 0, 0, 2) ZEND_ARG_TYPE_MASK(0, column, MAY_BE_STRING|MAY_BE_LONG, NULL) @@ -46,8 +46,7 @@ ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_INFO_EX(arginfo_class_PDOStatement_fetchAll, 0, 0, 0) ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, fetch_style, IS_LONG, 0, "PDO::FETCH_BOTH") - ZEND_ARG_INFO(0, fetch_argument) - ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, ctor_args, IS_ARRAY, 0, "[]") + ZEND_ARG_VARIADIC_TYPE_INFO(0, fetch_args, IS_MIXED, 0) ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_INFO_EX(arginfo_class_PDOStatement_fetchColumn, 0, 0, 0) diff --git a/ext/pdo_mysql/tests/pdo_mysql_attr_statement_class.phpt b/ext/pdo_mysql/tests/pdo_mysql_attr_statement_class.phpt index e8bdd16434..66df0cda45 100644 --- a/ext/pdo_mysql/tests/pdo_mysql_attr_statement_class.phpt +++ b/ext/pdo_mysql/tests/pdo_mysql_attr_statement_class.phpt @@ -79,7 +79,7 @@ $db = MySQLPDOTest::factory(); $stmt = $db->query('SELECT id, label FROM test ORDER BY id ASC LIMIT 2'); class mystatement5 extends mystatement4 { - public function fetchAll($fetch_style = 1, $column_index = 1, $ctor_args = array()) { + public function fetchAll($fetch_style = 1, ...$fetch_args) { return "no data :)"; } }