1--TEST-- 2PDO Common: extending PDO 3--EXTENSIONS-- 4pdo 5--SKIPIF-- 6<?php 7$dir = getenv('REDIR_TEST_DIR'); 8if (false == $dir) die('skip no driver'); 9require_once $dir . 'pdo_test.inc'; 10PDOTest::skip(); 11?> 12--FILE-- 13<?php 14if (getenv('REDIR_TEST_DIR') === false) putenv('REDIR_TEST_DIR='.__DIR__ . '/../../pdo/tests/'); 15require_once getenv('REDIR_TEST_DIR') . 'pdo_test.inc'; 16 17#[AllowDynamicProperties] 18class PDOStatementX extends PDOStatement 19{ 20 public $test1 = 1; 21 22 protected function __construct() 23 { 24 $this->test2 = 2; 25 $this->test2 = 22; 26 echo __METHOD__ . "()\n"; 27 } 28 29 function __destruct() 30 { 31 echo __METHOD__ . "()\n"; 32 } 33} 34 35#[AllowDynamicProperties] 36class PDODatabaseX extends PDO 37{ 38 public $test1 = 1; 39 40 function __destruct() 41 { 42 echo __METHOD__ . "()\n"; 43 } 44 45 function testMethod() 46 { 47 $this->test2 = 2; 48 var_dump($this->test1); 49 var_dump($this->test2); 50 $this->test2 = 22; 51 } 52 53 function query($sql, ...$rest): PDOStatement|false 54 { 55 echo __METHOD__ . "()\n"; 56 $stmt = parent::prepare($sql, array(PDO::ATTR_STATEMENT_CLASS=>array('PDOStatementx'))); 57 $stmt->execute(); 58 return $stmt; 59 } 60} 61 62$db = PDOTest::factory('PDODatabaseX'); 63$db->testMethod(); 64var_dump($db); 65 66$db->query('CREATE TABLE test023(id INT NOT NULL PRIMARY KEY, val VARCHAR(10))'); 67$db->query("INSERT INTO test023 VALUES(0, 'A')"); 68$db->query("INSERT INTO test023 VALUES(1, 'B')"); 69 70 71$stmt = $db->query('SELECT val, id FROM test023'); 72var_dump($stmt); 73var_dump($stmt->fetchAll(PDO::FETCH_COLUMN|PDO::FETCH_UNIQUE)); 74 75$stmt = NULL; 76$db = NULL; 77 78 79?> 80--CLEAN-- 81<?php 82require_once getenv('REDIR_TEST_DIR') . 'pdo_test.inc'; 83$db = PDOTest::factory(); 84PDOTest::dropTableIfExists($db, "test023"); 85?> 86--EXPECTF-- 87int(1) 88int(2) 89object(PDODatabaseX)#%d (2) { 90 ["test1"]=> 91 int(1) 92 ["test2"]=> 93 int(22) 94} 95PDODatabaseX::query() 96PDOStatementX::__construct() 97PDOStatementX::__destruct() 98PDODatabaseX::query() 99PDOStatementX::__construct() 100PDOStatementX::__destruct() 101PDODatabaseX::query() 102PDOStatementX::__construct() 103PDOStatementX::__destruct() 104PDODatabaseX::query() 105PDOStatementX::__construct() 106object(PDOStatementX)#%d (3) { 107 ["queryString"]=> 108 string(27) "SELECT val, id FROM test023" 109 ["test1"]=> 110 int(1) 111 ["test2"]=> 112 int(22) 113} 114array(2) { 115 ["A"]=> 116 string(1) "0" 117 ["B"]=> 118 string(1) "1" 119} 120PDOStatementX::__destruct() 121PDODatabaseX::__destruct() 122