]> granicus.if.org Git - php/commitdiff
Use variadic signature for PDOStatement::fetchAll()
authorNikita Popov <nikita.ppv@gmail.com>
Fri, 14 Aug 2020 13:07:55 +0000 (15:07 +0200)
committerNikita Popov <nikita.ppv@gmail.com>
Fri, 14 Aug 2020 13:19:18 +0000 (15:19 +0200)
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.

ext/pdo/pdo_stmt.stub.php
ext/pdo/pdo_stmt_arginfo.h
ext/pdo_mysql/tests/pdo_mysql_attr_statement_class.phpt

index c44753387c7bb9de40c1c04613dc54ab4a10db7e..d81097c164e82d65ea7666eef332c38f10525174 100644 (file)
@@ -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) {}
index f0241a3001b50dca94400c67a193a78f68b5f02e..a819f6a91eae7487cdd04f14572a19e1909dc70b 100644 (file)
@@ -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)
index e8bdd164346b43e3f545cb9903add12b1811abb2..66df0cda459a124a0bb50194b14734b7c094fb65 100644 (file)
@@ -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 :)";
         }
     }