From 23fbd86fac6a9f57bcd7b55cbb97705d0e4d462d Mon Sep 17 00:00:00 2001 From: Marc Bennewitz Date: Mon, 31 Aug 2026 18:42:58 +0200 Subject: [PATCH 1/2] PDO: Migrate maxlen of pdo_column_data from size_t to zend_long (#19144) * PDO: Migrate maxlen of pdo_column_data from size_t to zend_long * PDO_ODBC: use displaysize for maxlen and colsize for datalen --- ext/pdo/pdo_stmt.c | 2 +- ext/pdo/php_pdo_driver.h | 2 +- ext/pdo_odbc/odbc_stmt.c | 3 ++- ext/pdo_sqlite/sqlite_statement.c | 2 +- 4 files changed, 5 insertions(+), 4 deletions(-) diff --git a/ext/pdo/pdo_stmt.c b/ext/pdo/pdo_stmt.c index 5731a7e63d38..a414dcb62dd0 100644 --- a/ext/pdo/pdo_stmt.c +++ b/ext/pdo/pdo_stmt.c @@ -1589,7 +1589,7 @@ PHP_METHOD(PDOStatement, getColumnMeta) /* add stock items */ col = &stmt->columns[colno]; add_assoc_str(return_value, "name", zend_string_copy(col->name)); - add_assoc_long(return_value, "len", col->maxlen); /* FIXME: unsigned ? */ + add_assoc_long(return_value, "len", col->maxlen); add_assoc_long(return_value, "precision", col->precision); } /* }}} */ diff --git a/ext/pdo/php_pdo_driver.h b/ext/pdo/php_pdo_driver.h index 479a1b5436c9..62e1f177ebb5 100644 --- a/ext/pdo/php_pdo_driver.h +++ b/ext/pdo/php_pdo_driver.h @@ -529,7 +529,7 @@ static inline pdo_dbh_t *php_pdo_dbh_fetch_inner(zend_object *obj) { /* describes a column */ struct pdo_column_data { zend_string *name; - size_t maxlen; + zend_long maxlen; zend_ulong precision; }; diff --git a/ext/pdo_odbc/odbc_stmt.c b/ext/pdo_odbc/odbc_stmt.c index 7250860eaf43..1c93a319ccaa 100644 --- a/ext/pdo_odbc/odbc_stmt.c +++ b/ext/pdo_odbc/odbc_stmt.c @@ -671,7 +671,8 @@ static int odbc_stmt_describe(pdo_stmt_t *stmt, int colno) } colsize = displaysize; - col->maxlen = S->cols[colno].datalen = colsize; + S->cols[colno].datalen = colsize; + col->maxlen = displaysize; col->name = zend_string_init(S->cols[colno].colname, colnamelen, 0); S->cols[colno].is_unicode = pdo_odbc_sqltype_is_unicode(S, S->cols[colno].coltype); diff --git a/ext/pdo_sqlite/sqlite_statement.c b/ext/pdo_sqlite/sqlite_statement.c index 25c9e6917e43..891580cbb822 100644 --- a/ext/pdo_sqlite/sqlite_statement.c +++ b/ext/pdo_sqlite/sqlite_statement.c @@ -249,7 +249,7 @@ static int pdo_sqlite_stmt_describe(pdo_stmt_t *stmt, int colno) str = sqlite3_column_name(S->stmt, colno); stmt->columns[colno].name = zend_string_init(str, strlen(str), 0); - stmt->columns[colno].maxlen = SIZE_MAX; + stmt->columns[colno].maxlen = -1; stmt->columns[colno].precision = 0; return 1; From 4923c6079e5b09d3e48e8499ff62348fd56e3a9d Mon Sep 17 00:00:00 2001 From: Daniel Scherzer Date: Mon, 31 Aug 2026 14:03:55 -0700 Subject: [PATCH 2/2] [RFC] Deprecate `is_a()` and `is_subclass_of()` with string when not allowed (#23236) For `is_a()` and `is_subclass_of()`, emit deprecation warnings when calling with a string as the first argument but with `$allow_string` being false. The two functions share implementation code and so are updated together. https://wiki.php.net/rfc/deprecations_php_8_6 --- Zend/tests/is_a_string.phpt | 16 ++ Zend/tests/is_subclass_of_string.phpt | 18 ++ Zend/zend_builtin_functions.c | 12 ++ ext/standard/tests/class_object/is_a.phpt | 162 +++++++++++++++++- .../class_object/is_a_variation_001.phpt | 8 + 5 files changed, 215 insertions(+), 1 deletion(-) create mode 100644 Zend/tests/is_a_string.phpt create mode 100644 Zend/tests/is_subclass_of_string.phpt diff --git a/Zend/tests/is_a_string.phpt b/Zend/tests/is_a_string.phpt new file mode 100644 index 000000000000..3334cfb1596d --- /dev/null +++ b/Zend/tests/is_a_string.phpt @@ -0,0 +1,16 @@ +--TEST-- +is_a() with $allow_string false and a string +--FILE-- + +--EXPECTF-- +bool(true) + +Deprecated: Calling is_a() with a string when $allow_string is false in %s on line %d +bool(false) diff --git a/Zend/tests/is_subclass_of_string.phpt b/Zend/tests/is_subclass_of_string.phpt new file mode 100644 index 000000000000..5ef3407b1dca --- /dev/null +++ b/Zend/tests/is_subclass_of_string.phpt @@ -0,0 +1,18 @@ +--TEST-- +is_subclass_of() with $allow_string false and a string +--FILE-- + +--EXPECTF-- +bool(true) + +Deprecated: Calling is_subclass_of() with a string when $allow_string is false in %s on line %d +bool(false) diff --git a/Zend/zend_builtin_functions.c b/Zend/zend_builtin_functions.c index 9aa930422381..e02e0afe2bfc 100644 --- a/Zend/zend_builtin_functions.c +++ b/Zend/zend_builtin_functions.c @@ -714,6 +714,18 @@ static void is_a_impl(INTERNAL_FUNCTION_PARAMETERS, bool only_subclass) /* {{{ * if (!instance_ce) { RETURN_FALSE; } + } else if (Z_TYPE_P(obj) == IS_STRING) { + // is_a() uses only_subclass as false, is_subclass_of() uses it as true + zend_error( + E_DEPRECATED, + only_subclass + ? "Calling is_subclass_of() with a string when $allow_string is false" + : "Calling is_a() with a string when $allow_string is false" + ); + if (UNEXPECTED(EG(exception))) { + RETURN_THROWS(); + } + RETURN_FALSE; } else if (Z_TYPE_P(obj) == IS_OBJECT) { instance_ce = Z_OBJCE_P(obj); } else { diff --git a/ext/standard/tests/class_object/is_a.phpt b/ext/standard/tests/class_object/is_a.phpt index efb03b343492..ee6f30455a60 100644 --- a/ext/standard/tests/class_object/is_a.phpt +++ b/ext/standard/tests/class_object/is_a.phpt @@ -81,109 +81,173 @@ $t->test(); ?> ---EXPECT-- +--EXPECTF-- >>> With Defined class is_a( OBJECT:base, base) = yes + +Deprecated: Calling is_a() with a string when $allow_string is false in %s on line %d is_a( STRING:base, base) = no is_a( STRING:base, base, true) = yes is_subclass_of( OBJECT:base, base) = no is_subclass_of( STRING:base, base) = no + +Deprecated: Calling is_subclass_of() with a string when $allow_string is false in %s on line %d is_subclass_of( STRING:base, base,false) = no >>> With Undefined is_a( STRING:undefB, base,true) = no + +Deprecated: Calling is_a() with a string when $allow_string is false in %s on line %d is_a( STRING:undefB, base) = no + +Deprecated: Calling is_subclass_of() with a string when $allow_string is false in %s on line %d is_subclass_of( STRING:undefB, base,false) = no is_subclass_of( STRING:undefB, base) = no >>> With Defined class is_a( OBJECT:base, derived_a) = no + +Deprecated: Calling is_a() with a string when $allow_string is false in %s on line %d is_a( STRING:base, derived_a) = no is_a( STRING:base, derived_a, true) = no is_subclass_of( OBJECT:base, derived_a) = no is_subclass_of( STRING:base, derived_a) = no + +Deprecated: Calling is_subclass_of() with a string when $allow_string is false in %s on line %d is_subclass_of( STRING:base, derived_a,false) = no >>> With Undefined is_a( STRING:undefB, derived_a,true) = no + +Deprecated: Calling is_a() with a string when $allow_string is false in %s on line %d is_a( STRING:undefB, derived_a) = no + +Deprecated: Calling is_subclass_of() with a string when $allow_string is false in %s on line %d is_subclass_of( STRING:undefB, derived_a,false) = no is_subclass_of( STRING:undefB, derived_a) = no >>> With Defined class is_a( OBJECT:base, if_a) = no + +Deprecated: Calling is_a() with a string when $allow_string is false in %s on line %d is_a( STRING:base, if_a) = no is_a( STRING:base, if_a, true) = no is_subclass_of( OBJECT:base, if_a) = no is_subclass_of( STRING:base, if_a) = no + +Deprecated: Calling is_subclass_of() with a string when $allow_string is false in %s on line %d is_subclass_of( STRING:base, if_a,false) = no >>> With Undefined is_a( STRING:undefB, if_a,true) = no + +Deprecated: Calling is_a() with a string when $allow_string is false in %s on line %d is_a( STRING:undefB, if_a) = no + +Deprecated: Calling is_subclass_of() with a string when $allow_string is false in %s on line %d is_subclass_of( STRING:undefB, if_a,false) = no is_subclass_of( STRING:undefB, if_a) = no >>> With Defined class is_a( OBJECT:base, undefA) = no + +Deprecated: Calling is_a() with a string when $allow_string is false in %s on line %d is_a( STRING:base, undefA) = no is_a( STRING:base, undefA, true) = no is_subclass_of( OBJECT:base, undefA) = no is_subclass_of( STRING:base, undefA) = no + +Deprecated: Calling is_subclass_of() with a string when $allow_string is false in %s on line %d is_subclass_of( STRING:base, undefA,false) = no >>> With Undefined is_a( STRING:undefB, undefA,true) = no + +Deprecated: Calling is_a() with a string when $allow_string is false in %s on line %d is_a( STRING:undefB, undefA) = no + +Deprecated: Calling is_subclass_of() with a string when $allow_string is false in %s on line %d is_subclass_of( STRING:undefB, undefA,false) = no is_subclass_of( STRING:undefB, undefA) = no >>> With Defined class is_a( OBJECT:derived_a, base) = yes + +Deprecated: Calling is_a() with a string when $allow_string is false in %s on line %d is_a( STRING:derived_a, base) = no is_a( STRING:derived_a, base, true) = yes is_subclass_of( OBJECT:derived_a, base) = yes is_subclass_of( STRING:derived_a, base) = yes + +Deprecated: Calling is_subclass_of() with a string when $allow_string is false in %s on line %d is_subclass_of( STRING:derived_a, base,false) = no >>> With Undefined is_a( STRING:undefB, base,true) = no + +Deprecated: Calling is_a() with a string when $allow_string is false in %s on line %d is_a( STRING:undefB, base) = no + +Deprecated: Calling is_subclass_of() with a string when $allow_string is false in %s on line %d is_subclass_of( STRING:undefB, base,false) = no is_subclass_of( STRING:undefB, base) = no >>> With Defined class is_a( OBJECT:derived_a, derived_a) = yes + +Deprecated: Calling is_a() with a string when $allow_string is false in %s on line %d is_a( STRING:derived_a, derived_a) = no is_a( STRING:derived_a, derived_a, true) = yes is_subclass_of( OBJECT:derived_a, derived_a) = no is_subclass_of( STRING:derived_a, derived_a) = no + +Deprecated: Calling is_subclass_of() with a string when $allow_string is false in %s on line %d is_subclass_of( STRING:derived_a, derived_a,false) = no >>> With Undefined is_a( STRING:undefB, derived_a,true) = no + +Deprecated: Calling is_a() with a string when $allow_string is false in %s on line %d is_a( STRING:undefB, derived_a) = no + +Deprecated: Calling is_subclass_of() with a string when $allow_string is false in %s on line %d is_subclass_of( STRING:undefB, derived_a,false) = no is_subclass_of( STRING:undefB, derived_a) = no >>> With Defined class is_a( OBJECT:derived_a, if_a) = yes + +Deprecated: Calling is_a() with a string when $allow_string is false in %s on line %d is_a( STRING:derived_a, if_a) = no is_a( STRING:derived_a, if_a, true) = yes is_subclass_of( OBJECT:derived_a, if_a) = yes is_subclass_of( STRING:derived_a, if_a) = yes + +Deprecated: Calling is_subclass_of() with a string when $allow_string is false in %s on line %d is_subclass_of( STRING:derived_a, if_a,false) = no >>> With Undefined is_a( STRING:undefB, if_a,true) = no + +Deprecated: Calling is_a() with a string when $allow_string is false in %s on line %d is_a( STRING:undefB, if_a) = no + +Deprecated: Calling is_subclass_of() with a string when $allow_string is false in %s on line %d is_subclass_of( STRING:undefB, if_a,false) = no is_subclass_of( STRING:undefB, if_a) = no >>> With Defined class is_a( OBJECT:derived_a, undefA) = no + +Deprecated: Calling is_a() with a string when $allow_string is false in %s on line %d is_a( STRING:derived_a, undefA) = no is_a( STRING:derived_a, undefA, true) = no is_subclass_of( OBJECT:derived_a, undefA) = no is_subclass_of( STRING:derived_a, undefA) = no + +Deprecated: Calling is_subclass_of() with a string when $allow_string is false in %s on line %d is_subclass_of( STRING:derived_a, undefA,false) = no >>> With Undefined is_a( STRING:undefB, undefA,true) = no + +Deprecated: Calling is_a() with a string when $allow_string is false in %s on line %d is_a( STRING:undefB, undefA) = no + +Deprecated: Calling is_subclass_of() with a string when $allow_string is false in %s on line %d is_subclass_of( STRING:undefB, undefA,false) = no is_subclass_of( STRING:undefB, undefA) = no @@ -192,60 +256,92 @@ NOW WITH AUTOLOAD >>> With Defined class is_a( OBJECT:base, base) = yes + +Deprecated: Calling is_a() with a string when $allow_string is false in %s on line %d is_a( STRING:base, base) = no is_a( STRING:base, base, true) = yes is_subclass_of( OBJECT:base, base) = no is_subclass_of( STRING:base, base) = no + +Deprecated: Calling is_subclass_of() with a string when $allow_string is false in %s on line %d is_subclass_of( STRING:base, base,false) = no >>> With Undefined >>>> In autoload: string(6) "undefB" is_a( STRING:undefB, base,true) = no + +Deprecated: Calling is_a() with a string when $allow_string is false in %s on line %d is_a( STRING:undefB, base) = no + +Deprecated: Calling is_subclass_of() with a string when $allow_string is false in %s on line %d is_subclass_of( STRING:undefB, base,false) = no >>>> In autoload: string(6) "undefB" is_subclass_of( STRING:undefB, base) = no >>> With Defined class is_a( OBJECT:base, derived_a) = no + +Deprecated: Calling is_a() with a string when $allow_string is false in %s on line %d is_a( STRING:base, derived_a) = no is_a( STRING:base, derived_a, true) = no is_subclass_of( OBJECT:base, derived_a) = no is_subclass_of( STRING:base, derived_a) = no + +Deprecated: Calling is_subclass_of() with a string when $allow_string is false in %s on line %d is_subclass_of( STRING:base, derived_a,false) = no >>> With Undefined >>>> In autoload: string(6) "undefB" is_a( STRING:undefB, derived_a,true) = no + +Deprecated: Calling is_a() with a string when $allow_string is false in %s on line %d is_a( STRING:undefB, derived_a) = no + +Deprecated: Calling is_subclass_of() with a string when $allow_string is false in %s on line %d is_subclass_of( STRING:undefB, derived_a,false) = no >>>> In autoload: string(6) "undefB" is_subclass_of( STRING:undefB, derived_a) = no >>> With Defined class is_a( OBJECT:base, if_a) = no + +Deprecated: Calling is_a() with a string when $allow_string is false in %s on line %d is_a( STRING:base, if_a) = no is_a( STRING:base, if_a, true) = no is_subclass_of( OBJECT:base, if_a) = no is_subclass_of( STRING:base, if_a) = no + +Deprecated: Calling is_subclass_of() with a string when $allow_string is false in %s on line %d is_subclass_of( STRING:base, if_a,false) = no >>> With Undefined >>>> In autoload: string(6) "undefB" is_a( STRING:undefB, if_a,true) = no + +Deprecated: Calling is_a() with a string when $allow_string is false in %s on line %d is_a( STRING:undefB, if_a) = no + +Deprecated: Calling is_subclass_of() with a string when $allow_string is false in %s on line %d is_subclass_of( STRING:undefB, if_a,false) = no >>>> In autoload: string(6) "undefB" is_subclass_of( STRING:undefB, if_a) = no >>> With Defined class is_a( OBJECT:base, undefA) = no + +Deprecated: Calling is_a() with a string when $allow_string is false in %s on line %d is_a( STRING:base, undefA) = no is_a( STRING:base, undefA, true) = no is_subclass_of( OBJECT:base, undefA) = no is_subclass_of( STRING:base, undefA) = no + +Deprecated: Calling is_subclass_of() with a string when $allow_string is false in %s on line %d is_subclass_of( STRING:base, undefA,false) = no >>> With Undefined >>>> In autoload: string(6) "undefB" is_a( STRING:undefB, undefA,true) = no + +Deprecated: Calling is_a() with a string when $allow_string is false in %s on line %d is_a( STRING:undefB, undefA) = no + +Deprecated: Calling is_subclass_of() with a string when $allow_string is false in %s on line %d is_subclass_of( STRING:undefB, undefA,false) = no >>>> In autoload: string(6) "undefB" is_subclass_of( STRING:undefB, undefA) = no @@ -253,60 +349,92 @@ is_subclass_of( STRING:undefB, undefA) = no >>> With Defined class is_a( OBJECT:derived_a, base) = yes + +Deprecated: Calling is_a() with a string when $allow_string is false in %s on line %d is_a( STRING:derived_a, base) = no is_a( STRING:derived_a, base, true) = yes is_subclass_of( OBJECT:derived_a, base) = yes is_subclass_of( STRING:derived_a, base) = yes + +Deprecated: Calling is_subclass_of() with a string when $allow_string is false in %s on line %d is_subclass_of( STRING:derived_a, base,false) = no >>> With Undefined >>>> In autoload: string(6) "undefB" is_a( STRING:undefB, base,true) = no + +Deprecated: Calling is_a() with a string when $allow_string is false in %s on line %d is_a( STRING:undefB, base) = no + +Deprecated: Calling is_subclass_of() with a string when $allow_string is false in %s on line %d is_subclass_of( STRING:undefB, base,false) = no >>>> In autoload: string(6) "undefB" is_subclass_of( STRING:undefB, base) = no >>> With Defined class is_a( OBJECT:derived_a, derived_a) = yes + +Deprecated: Calling is_a() with a string when $allow_string is false in %s on line %d is_a( STRING:derived_a, derived_a) = no is_a( STRING:derived_a, derived_a, true) = yes is_subclass_of( OBJECT:derived_a, derived_a) = no is_subclass_of( STRING:derived_a, derived_a) = no + +Deprecated: Calling is_subclass_of() with a string when $allow_string is false in %s on line %d is_subclass_of( STRING:derived_a, derived_a,false) = no >>> With Undefined >>>> In autoload: string(6) "undefB" is_a( STRING:undefB, derived_a,true) = no + +Deprecated: Calling is_a() with a string when $allow_string is false in %s on line %d is_a( STRING:undefB, derived_a) = no + +Deprecated: Calling is_subclass_of() with a string when $allow_string is false in %s on line %d is_subclass_of( STRING:undefB, derived_a,false) = no >>>> In autoload: string(6) "undefB" is_subclass_of( STRING:undefB, derived_a) = no >>> With Defined class is_a( OBJECT:derived_a, if_a) = yes + +Deprecated: Calling is_a() with a string when $allow_string is false in %s on line %d is_a( STRING:derived_a, if_a) = no is_a( STRING:derived_a, if_a, true) = yes is_subclass_of( OBJECT:derived_a, if_a) = yes is_subclass_of( STRING:derived_a, if_a) = yes + +Deprecated: Calling is_subclass_of() with a string when $allow_string is false in %s on line %d is_subclass_of( STRING:derived_a, if_a,false) = no >>> With Undefined >>>> In autoload: string(6) "undefB" is_a( STRING:undefB, if_a,true) = no + +Deprecated: Calling is_a() with a string when $allow_string is false in %s on line %d is_a( STRING:undefB, if_a) = no + +Deprecated: Calling is_subclass_of() with a string when $allow_string is false in %s on line %d is_subclass_of( STRING:undefB, if_a,false) = no >>>> In autoload: string(6) "undefB" is_subclass_of( STRING:undefB, if_a) = no >>> With Defined class is_a( OBJECT:derived_a, undefA) = no + +Deprecated: Calling is_a() with a string when $allow_string is false in %s on line %d is_a( STRING:derived_a, undefA) = no is_a( STRING:derived_a, undefA, true) = no is_subclass_of( OBJECT:derived_a, undefA) = no is_subclass_of( STRING:derived_a, undefA) = no + +Deprecated: Calling is_subclass_of() with a string when $allow_string is false in %s on line %d is_subclass_of( STRING:derived_a, undefA,false) = no >>> With Undefined >>>> In autoload: string(6) "undefB" is_a( STRING:undefB, undefA,true) = no + +Deprecated: Calling is_a() with a string when $allow_string is false in %s on line %d is_a( STRING:undefB, undefA) = no + +Deprecated: Calling is_subclass_of() with a string when $allow_string is false in %s on line %d is_subclass_of( STRING:undefB, undefA,false) = no >>>> In autoload: string(6) "undefB" is_subclass_of( STRING:undefB, undefA) = no @@ -314,60 +442,92 @@ is_subclass_of( STRING:undefB, undefA) = no >>> With Defined class is_a( OBJECT:derived_b, base) = yes + +Deprecated: Calling is_a() with a string when $allow_string is false in %s on line %d is_a( STRING:derived_b, base) = no is_a( STRING:derived_b, base, true) = yes is_subclass_of( OBJECT:derived_b, base) = yes is_subclass_of( STRING:derived_b, base) = yes + +Deprecated: Calling is_subclass_of() with a string when $allow_string is false in %s on line %d is_subclass_of( STRING:derived_b, base,false) = no >>> With Undefined >>>> In autoload: string(6) "undefB" is_a( STRING:undefB, base,true) = no + +Deprecated: Calling is_a() with a string when $allow_string is false in %s on line %d is_a( STRING:undefB, base) = no + +Deprecated: Calling is_subclass_of() with a string when $allow_string is false in %s on line %d is_subclass_of( STRING:undefB, base,false) = no >>>> In autoload: string(6) "undefB" is_subclass_of( STRING:undefB, base) = no >>> With Defined class is_a( OBJECT:derived_b, derived_a) = no + +Deprecated: Calling is_a() with a string when $allow_string is false in %s on line %d is_a( STRING:derived_b, derived_a) = no is_a( STRING:derived_b, derived_a, true) = no is_subclass_of( OBJECT:derived_b, derived_a) = no is_subclass_of( STRING:derived_b, derived_a) = no + +Deprecated: Calling is_subclass_of() with a string when $allow_string is false in %s on line %d is_subclass_of( STRING:derived_b, derived_a,false) = no >>> With Undefined >>>> In autoload: string(6) "undefB" is_a( STRING:undefB, derived_a,true) = no + +Deprecated: Calling is_a() with a string when $allow_string is false in %s on line %d is_a( STRING:undefB, derived_a) = no + +Deprecated: Calling is_subclass_of() with a string when $allow_string is false in %s on line %d is_subclass_of( STRING:undefB, derived_a,false) = no >>>> In autoload: string(6) "undefB" is_subclass_of( STRING:undefB, derived_a) = no >>> With Defined class is_a( OBJECT:derived_b, if_a) = yes + +Deprecated: Calling is_a() with a string when $allow_string is false in %s on line %d is_a( STRING:derived_b, if_a) = no is_a( STRING:derived_b, if_a, true) = yes is_subclass_of( OBJECT:derived_b, if_a) = yes is_subclass_of( STRING:derived_b, if_a) = yes + +Deprecated: Calling is_subclass_of() with a string when $allow_string is false in %s on line %d is_subclass_of( STRING:derived_b, if_a,false) = no >>> With Undefined >>>> In autoload: string(6) "undefB" is_a( STRING:undefB, if_a,true) = no + +Deprecated: Calling is_a() with a string when $allow_string is false in %s on line %d is_a( STRING:undefB, if_a) = no + +Deprecated: Calling is_subclass_of() with a string when $allow_string is false in %s on line %d is_subclass_of( STRING:undefB, if_a,false) = no >>>> In autoload: string(6) "undefB" is_subclass_of( STRING:undefB, if_a) = no >>> With Defined class is_a( OBJECT:derived_b, undefA) = no + +Deprecated: Calling is_a() with a string when $allow_string is false in %s on line %d is_a( STRING:derived_b, undefA) = no is_a( STRING:derived_b, undefA, true) = no is_subclass_of( OBJECT:derived_b, undefA) = no is_subclass_of( STRING:derived_b, undefA) = no + +Deprecated: Calling is_subclass_of() with a string when $allow_string is false in %s on line %d is_subclass_of( STRING:derived_b, undefA,false) = no >>> With Undefined >>>> In autoload: string(6) "undefB" is_a( STRING:undefB, undefA,true) = no + +Deprecated: Calling is_a() with a string when $allow_string is false in %s on line %d is_a( STRING:undefB, undefA) = no + +Deprecated: Calling is_subclass_of() with a string when $allow_string is false in %s on line %d is_subclass_of( STRING:undefB, undefA,false) = no >>>> In autoload: string(6) "undefB" is_subclass_of( STRING:undefB, undefA) = no diff --git a/ext/standard/tests/class_object/is_a_variation_001.phpt b/ext/standard/tests/class_object/is_a_variation_001.phpt index 4f77b9735a7e..374007da7b1d 100644 --- a/ext/standard/tests/class_object/is_a_variation_001.phpt +++ b/ext/standard/tests/class_object/is_a_variation_001.phpt @@ -137,15 +137,23 @@ Arg value bool(false) Arg value + +Deprecated: Calling is_a() with a string when $allow_string is false in %s on line %d bool(false) Arg value + +Deprecated: Calling is_a() with a string when $allow_string is false in %s on line %d bool(false) Arg value string + +Deprecated: Calling is_a() with a string when $allow_string is false in %s on line %d bool(false) Arg value String + +Deprecated: Calling is_a() with a string when $allow_string is false in %s on line %d bool(false) Arg value