summaryrefslogtreecommitdiff
path: root/ext
diff options
context:
space:
mode:
Diffstat (limited to 'ext')
-rw-r--r--ext/reflection/php_reflection.c3
-rw-r--r--ext/reflection/php_reflection.stub.php33
-rw-r--r--ext/reflection/php_reflection_arginfo.h309
-rw-r--r--ext/reflection/tests/ReflectionClass_toString_001.phpt5
-rw-r--r--ext/simplexml/simplexml.c2
-rw-r--r--ext/simplexml/simplexml.stub.php5
-rw-r--r--ext/simplexml/simplexml_arginfo.h3
-rw-r--r--ext/soap/soap.stub.php3
-rw-r--r--ext/soap/soap_arginfo.h19
-rw-r--r--ext/spl/spl_directory.c10
-rw-r--r--ext/spl/spl_iterators.c6
-rw-r--r--ext/spl/spl_iterators.h1
-rw-r--r--ext/standard/tests/strings/strlen.phptbin6096 -> 6102 bytes
-rw-r--r--ext/standard/tests/strings/strpos.phptbin8035 -> 8041 bytes
-rw-r--r--ext/standard/tests/strings/strstr.phptbin9512 -> 9518 bytes
-rw-r--r--ext/standard/tests/strings/ucfirst.phptbin4684 -> 4690 bytes
16 files changed, 199 insertions, 200 deletions
diff --git a/ext/reflection/php_reflection.c b/ext/reflection/php_reflection.c
index 793cf5de2f..05a016b97c 100644
--- a/ext/reflection/php_reflection.c
+++ b/ext/reflection/php_reflection.c
@@ -6214,7 +6214,6 @@ static const zend_function_entry reflection_functions[] = {
};
static const zend_function_entry reflector_functions[] = {
- ZEND_ABSTRACT_ME(reflector, __toString, arginfo_class_Reflector___toString)
PHP_FE_END
};
@@ -6522,6 +6521,7 @@ PHP_MINIT_FUNCTION(reflection) /* {{{ */
INIT_CLASS_ENTRY(_reflection_entry, "Reflector", reflector_functions);
reflector_ptr = zend_register_internal_interface(&_reflection_entry);
+ zend_class_implements(reflector_ptr, 1, zend_ce_stringable);
INIT_CLASS_ENTRY(_reflection_entry, "ReflectionFunctionAbstract", reflection_function_abstract_functions);
reflection_init_class_handlers(&_reflection_entry);
@@ -6550,6 +6550,7 @@ PHP_MINIT_FUNCTION(reflection) /* {{{ */
reflection_init_class_handlers(&_reflection_entry);
reflection_type_ptr = zend_register_internal_class(&_reflection_entry);
reflection_type_ptr->ce_flags |= ZEND_ACC_EXPLICIT_ABSTRACT_CLASS;
+ zend_class_implements(reflection_type_ptr, 1, zend_ce_stringable);
INIT_CLASS_ENTRY(_reflection_entry, "ReflectionNamedType", reflection_named_type_functions);
reflection_init_class_handlers(&_reflection_entry);
diff --git a/ext/reflection/php_reflection.stub.php b/ext/reflection/php_reflection.stub.php
index dc6b701473..05e1b0490d 100644
--- a/ext/reflection/php_reflection.stub.php
+++ b/ext/reflection/php_reflection.stub.php
@@ -10,10 +10,8 @@ class Reflection
public static function getModifierNames(int $modifiers) {}
}
-interface Reflector
+interface Reflector extends Stringable
{
- /** @return string */
- public function __toString();
}
abstract class ReflectionFunctionAbstract implements Reflector
@@ -101,8 +99,7 @@ class ReflectionFunction extends ReflectionFunctionAbstract
/** @param string|Closure $name */
public function __construct($name) {}
- /** @return string */
- public function __toString() {}
+ public function __toString(): string {}
/** @return bool */
public function isDisabled() {}
@@ -143,8 +140,7 @@ class ReflectionMethod extends ReflectionFunctionAbstract
/** @param object|string $class_or_method */
public function __construct($class_or_method, string $name = UNKNOWN) {}
- /** @return string */
- public function __toString() {}
+ public function __toString(): string {}
/** @return bool */
public function isPublic() {}
@@ -197,8 +193,7 @@ class ReflectionClass implements Reflector
/** @param object|string $argument */
public function __construct($argument) {}
- /** @return string */
- public function __toString() {}
+ public function __toString(): string {}
/** @return string|false */
public function getName() {}
@@ -367,8 +362,7 @@ class ReflectionProperty implements Reflector
/** @param string|object $class */
public function __construct($class, string $name) {}
- /** @return string */
- public function __toString() {}
+ public function __toString(): string {}
/** @return string|false */
public function getName() {}
@@ -427,8 +421,7 @@ class ReflectionClassConstant implements Reflector
/** @return string|object */
public function __construct($class, string $name) {}
- /** @return string */
- public function __toString() {}
+ public function __toString(): string {}
/** @return string|false */
public function getName() {}
@@ -464,8 +457,7 @@ class ReflectionParameter implements Reflector
*/
public function __construct($function, $parameter) {}
- /** @return string */
- public function __toString() {}
+ public function __toString(): string {}
/** @return string|false */
public function getName() {}
@@ -521,15 +513,14 @@ class ReflectionParameter implements Reflector
public function isVariadic() {}
}
-abstract class ReflectionType
+abstract class ReflectionType implements Stringable
{
final private function __clone() {}
/** @return bool */
public function allowsNull() {}
- /** @return string */
- public function __toString() {}
+ public function __toString(): string {}
}
class ReflectionNamedType extends ReflectionType
@@ -552,8 +543,7 @@ class ReflectionExtension implements Reflector
public function __construct(string $name) {}
- /** @return string */
- public function __toString() {}
+ public function __toString(): string {}
/** @return string|false */
public function getName() {}
@@ -595,8 +585,7 @@ class ReflectionZendExtension implements Reflector
public function __construct(string $name) {}
- /** @return string */
- public function __toString() {}
+ public function __toString(): string {}
/** @return string */
public function getName() {}
diff --git a/ext/reflection/php_reflection_arginfo.h b/ext/reflection/php_reflection_arginfo.h
index 5f5079f59e..45ead8eaac 100644
--- a/ext/reflection/php_reflection_arginfo.h
+++ b/ext/reflection/php_reflection_arginfo.h
@@ -4,68 +4,67 @@ ZEND_BEGIN_ARG_INFO_EX(arginfo_class_Reflection_getModifierNames, 0, 0, 1)
ZEND_ARG_TYPE_INFO(0, modifiers, IS_LONG, 0)
ZEND_END_ARG_INFO()
-ZEND_BEGIN_ARG_INFO_EX(arginfo_class_Reflector___toString, 0, 0, 0)
+ZEND_BEGIN_ARG_INFO_EX(arginfo_class_ReflectionFunctionAbstract___clone, 0, 0, 0)
ZEND_END_ARG_INFO()
-#define arginfo_class_ReflectionFunctionAbstract___clone arginfo_class_Reflector___toString
+#define arginfo_class_ReflectionFunctionAbstract_inNamespace arginfo_class_ReflectionFunctionAbstract___clone
-#define arginfo_class_ReflectionFunctionAbstract_inNamespace arginfo_class_Reflector___toString
+#define arginfo_class_ReflectionFunctionAbstract_isClosure arginfo_class_ReflectionFunctionAbstract___clone
-#define arginfo_class_ReflectionFunctionAbstract_isClosure arginfo_class_Reflector___toString
+#define arginfo_class_ReflectionFunctionAbstract_isDeprecated arginfo_class_ReflectionFunctionAbstract___clone
-#define arginfo_class_ReflectionFunctionAbstract_isDeprecated arginfo_class_Reflector___toString
+#define arginfo_class_ReflectionFunctionAbstract_isInternal arginfo_class_ReflectionFunctionAbstract___clone
-#define arginfo_class_ReflectionFunctionAbstract_isInternal arginfo_class_Reflector___toString
+#define arginfo_class_ReflectionFunctionAbstract_isUserDefined arginfo_class_ReflectionFunctionAbstract___clone
-#define arginfo_class_ReflectionFunctionAbstract_isUserDefined arginfo_class_Reflector___toString
+#define arginfo_class_ReflectionFunctionAbstract_isGenerator arginfo_class_ReflectionFunctionAbstract___clone
-#define arginfo_class_ReflectionFunctionAbstract_isGenerator arginfo_class_Reflector___toString
+#define arginfo_class_ReflectionFunctionAbstract_isVariadic arginfo_class_ReflectionFunctionAbstract___clone
-#define arginfo_class_ReflectionFunctionAbstract_isVariadic arginfo_class_Reflector___toString
+#define arginfo_class_ReflectionFunctionAbstract_getClosureThis arginfo_class_ReflectionFunctionAbstract___clone
-#define arginfo_class_ReflectionFunctionAbstract_getClosureThis arginfo_class_Reflector___toString
+#define arginfo_class_ReflectionFunctionAbstract_getClosureScopeClass arginfo_class_ReflectionFunctionAbstract___clone
-#define arginfo_class_ReflectionFunctionAbstract_getClosureScopeClass arginfo_class_Reflector___toString
+#define arginfo_class_ReflectionFunctionAbstract_getDocComment arginfo_class_ReflectionFunctionAbstract___clone
-#define arginfo_class_ReflectionFunctionAbstract_getDocComment arginfo_class_Reflector___toString
+#define arginfo_class_ReflectionFunctionAbstract_getEndLine arginfo_class_ReflectionFunctionAbstract___clone
-#define arginfo_class_ReflectionFunctionAbstract_getEndLine arginfo_class_Reflector___toString
+#define arginfo_class_ReflectionFunctionAbstract_getExtension arginfo_class_ReflectionFunctionAbstract___clone
-#define arginfo_class_ReflectionFunctionAbstract_getExtension arginfo_class_Reflector___toString
+#define arginfo_class_ReflectionFunctionAbstract_getExtensionName arginfo_class_ReflectionFunctionAbstract___clone
-#define arginfo_class_ReflectionFunctionAbstract_getExtensionName arginfo_class_Reflector___toString
+#define arginfo_class_ReflectionFunctionAbstract_getFileName arginfo_class_ReflectionFunctionAbstract___clone
-#define arginfo_class_ReflectionFunctionAbstract_getFileName arginfo_class_Reflector___toString
+#define arginfo_class_ReflectionFunctionAbstract_getName arginfo_class_ReflectionFunctionAbstract___clone
-#define arginfo_class_ReflectionFunctionAbstract_getName arginfo_class_Reflector___toString
+#define arginfo_class_ReflectionFunctionAbstract_getNamespaceName arginfo_class_ReflectionFunctionAbstract___clone
-#define arginfo_class_ReflectionFunctionAbstract_getNamespaceName arginfo_class_Reflector___toString
+#define arginfo_class_ReflectionFunctionAbstract_getNumberOfParameters arginfo_class_ReflectionFunctionAbstract___clone
-#define arginfo_class_ReflectionFunctionAbstract_getNumberOfParameters arginfo_class_Reflector___toString
+#define arginfo_class_ReflectionFunctionAbstract_getNumberOfRequiredParameters arginfo_class_ReflectionFunctionAbstract___clone
-#define arginfo_class_ReflectionFunctionAbstract_getNumberOfRequiredParameters arginfo_class_Reflector___toString
+#define arginfo_class_ReflectionFunctionAbstract_getParameters arginfo_class_ReflectionFunctionAbstract___clone
-#define arginfo_class_ReflectionFunctionAbstract_getParameters arginfo_class_Reflector___toString
+#define arginfo_class_ReflectionFunctionAbstract_getShortName arginfo_class_ReflectionFunctionAbstract___clone
-#define arginfo_class_ReflectionFunctionAbstract_getShortName arginfo_class_Reflector___toString
+#define arginfo_class_ReflectionFunctionAbstract_getStartLine arginfo_class_ReflectionFunctionAbstract___clone
-#define arginfo_class_ReflectionFunctionAbstract_getStartLine arginfo_class_Reflector___toString
+#define arginfo_class_ReflectionFunctionAbstract_getStaticVariables arginfo_class_ReflectionFunctionAbstract___clone
-#define arginfo_class_ReflectionFunctionAbstract_getStaticVariables arginfo_class_Reflector___toString
+#define arginfo_class_ReflectionFunctionAbstract_returnsReference arginfo_class_ReflectionFunctionAbstract___clone
-#define arginfo_class_ReflectionFunctionAbstract_returnsReference arginfo_class_Reflector___toString
+#define arginfo_class_ReflectionFunctionAbstract_hasReturnType arginfo_class_ReflectionFunctionAbstract___clone
-#define arginfo_class_ReflectionFunctionAbstract_hasReturnType arginfo_class_Reflector___toString
-
-#define arginfo_class_ReflectionFunctionAbstract_getReturnType arginfo_class_Reflector___toString
+#define arginfo_class_ReflectionFunctionAbstract_getReturnType arginfo_class_ReflectionFunctionAbstract___clone
ZEND_BEGIN_ARG_INFO_EX(arginfo_class_ReflectionFunction___construct, 0, 0, 1)
ZEND_ARG_INFO(0, name)
ZEND_END_ARG_INFO()
-#define arginfo_class_ReflectionFunction___toString arginfo_class_Reflector___toString
+ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_class_ReflectionFunction___toString, 0, 0, IS_STRING, 0)
+ZEND_END_ARG_INFO()
-#define arginfo_class_ReflectionFunction_isDisabled arginfo_class_Reflector___toString
+#define arginfo_class_ReflectionFunction_isDisabled arginfo_class_ReflectionFunctionAbstract___clone
ZEND_BEGIN_ARG_INFO_EX(arginfo_class_ReflectionFunction_invoke, 0, 0, 0)
ZEND_ARG_VARIADIC_INFO(0, args)
@@ -75,54 +74,54 @@ ZEND_BEGIN_ARG_INFO_EX(arginfo_class_ReflectionFunction_invokeArgs, 0, 0, 1)
ZEND_ARG_TYPE_INFO(0, args, IS_ARRAY, 0)
ZEND_END_ARG_INFO()
-#define arginfo_class_ReflectionFunction_getClosure arginfo_class_Reflector___toString
+#define arginfo_class_ReflectionFunction_getClosure arginfo_class_ReflectionFunctionAbstract___clone
ZEND_BEGIN_ARG_INFO_EX(arginfo_class_ReflectionGenerator___construct, 0, 0, 1)
ZEND_ARG_OBJ_INFO(0, generator, Generator, 0)
ZEND_END_ARG_INFO()
-#define arginfo_class_ReflectionGenerator_getExecutingLine arginfo_class_Reflector___toString
+#define arginfo_class_ReflectionGenerator_getExecutingLine arginfo_class_ReflectionFunctionAbstract___clone
-#define arginfo_class_ReflectionGenerator_getExecutingFile arginfo_class_Reflector___toString
+#define arginfo_class_ReflectionGenerator_getExecutingFile arginfo_class_ReflectionFunctionAbstract___clone
ZEND_BEGIN_ARG_INFO_EX(arginfo_class_ReflectionGenerator_getTrace, 0, 0, 0)
ZEND_ARG_TYPE_INFO(0, options, IS_LONG, 0)
ZEND_END_ARG_INFO()
-#define arginfo_class_ReflectionGenerator_getFunction arginfo_class_Reflector___toString
+#define arginfo_class_ReflectionGenerator_getFunction arginfo_class_ReflectionFunctionAbstract___clone
-#define arginfo_class_ReflectionGenerator_getThis arginfo_class_Reflector___toString
+#define arginfo_class_ReflectionGenerator_getThis arginfo_class_ReflectionFunctionAbstract___clone
-#define arginfo_class_ReflectionGenerator_getExecutingGenerator arginfo_class_Reflector___toString
+#define arginfo_class_ReflectionGenerator_getExecutingGenerator arginfo_class_ReflectionFunctionAbstract___clone
ZEND_BEGIN_ARG_INFO_EX(arginfo_class_ReflectionMethod___construct, 0, 0, 1)
ZEND_ARG_INFO(0, class_or_method)
ZEND_ARG_TYPE_INFO(0, name, IS_STRING, 0)
ZEND_END_ARG_INFO()
-#define arginfo_class_ReflectionMethod___toString arginfo_class_Reflector___toString
+#define arginfo_class_ReflectionMethod___toString arginfo_class_ReflectionFunction___toString
-#define arginfo_class_ReflectionMethod_isPublic arginfo_class_Reflector___toString
+#define arginfo_class_ReflectionMethod_isPublic arginfo_class_ReflectionFunctionAbstract___clone
-#define arginfo_class_ReflectionMethod_isPrivate arginfo_class_Reflector___toString
+#define arginfo_class_ReflectionMethod_isPrivate arginfo_class_ReflectionFunctionAbstract___clone
-#define arginfo_class_ReflectionMethod_isProtected arginfo_class_Reflector___toString
+#define arginfo_class_ReflectionMethod_isProtected arginfo_class_ReflectionFunctionAbstract___clone
-#define arginfo_class_ReflectionMethod_isAbstract arginfo_class_Reflector___toString
+#define arginfo_class_ReflectionMethod_isAbstract arginfo_class_ReflectionFunctionAbstract___clone
-#define arginfo_class_ReflectionMethod_isFinal arginfo_class_Reflector___toString
+#define arginfo_class_ReflectionMethod_isFinal arginfo_class_ReflectionFunctionAbstract___clone
-#define arginfo_class_ReflectionMethod_isStatic arginfo_class_Reflector___toString
+#define arginfo_class_ReflectionMethod_isStatic arginfo_class_ReflectionFunctionAbstract___clone
-#define arginfo_class_ReflectionMethod_isConstructor arginfo_class_Reflector___toString
+#define arginfo_class_ReflectionMethod_isConstructor arginfo_class_ReflectionFunctionAbstract___clone
-#define arginfo_class_ReflectionMethod_isDestructor arginfo_class_Reflector___toString
+#define arginfo_class_ReflectionMethod_isDestructor arginfo_class_ReflectionFunctionAbstract___clone
ZEND_BEGIN_ARG_INFO_EX(arginfo_class_ReflectionMethod_getClosure, 0, 0, 0)
ZEND_ARG_INFO(0, object)
ZEND_END_ARG_INFO()
-#define arginfo_class_ReflectionMethod_getModifiers arginfo_class_Reflector___toString
+#define arginfo_class_ReflectionMethod_getModifiers arginfo_class_ReflectionFunctionAbstract___clone
ZEND_BEGIN_ARG_INFO_EX(arginfo_class_ReflectionMethod_invoke, 0, 0, 0)
ZEND_ARG_TYPE_INFO(0, object, IS_OBJECT, 1)
@@ -134,43 +133,43 @@ ZEND_BEGIN_ARG_INFO_EX(arginfo_class_ReflectionMethod_invokeArgs, 0, 0, 2)
ZEND_ARG_TYPE_INFO(0, args, IS_ARRAY, 0)
ZEND_END_ARG_INFO()
-#define arginfo_class_ReflectionMethod_getDeclaringClass arginfo_class_Reflector___toString
+#define arginfo_class_ReflectionMethod_getDeclaringClass arginfo_class_ReflectionFunctionAbstract___clone
-#define arginfo_class_ReflectionMethod_getPrototype arginfo_class_Reflector___toString
+#define arginfo_class_ReflectionMethod_getPrototype arginfo_class_ReflectionFunctionAbstract___clone
ZEND_BEGIN_ARG_INFO_EX(arginfo_class_ReflectionMethod_setAccessible, 0, 0, 1)
ZEND_ARG_TYPE_INFO(0, visible, _IS_BOOL, 0)
ZEND_END_ARG_INFO()
-#define arginfo_class_ReflectionClass___clone arginfo_class_Reflector___toString
+#define arginfo_class_ReflectionClass___clone arginfo_class_ReflectionFunctionAbstract___clone
ZEND_BEGIN_ARG_INFO_EX(arginfo_class_ReflectionClass___construct, 0, 0, 1)
ZEND_ARG_INFO(0, argument)
ZEND_END_ARG_INFO()
-#define arginfo_class_ReflectionClass___toString arginfo_class_Reflector___toString
+#define arginfo_class_ReflectionClass___toString arginfo_class_ReflectionFunction___toString
-#define arginfo_class_ReflectionClass_getName arginfo_class_Reflector___toString
+#define arginfo_class_ReflectionClass_getName arginfo_class_ReflectionFunctionAbstract___clone
-#define arginfo_class_ReflectionClass_isInternal arginfo_class_Reflector___toString
+#define arginfo_class_ReflectionClass_isInternal arginfo_class_ReflectionFunctionAbstract___clone
-#define arginfo_class_ReflectionClass_isUserDefined arginfo_class_Reflector___toString
+#define arginfo_class_ReflectionClass_isUserDefined arginfo_class_ReflectionFunctionAbstract___clone
-#define arginfo_class_ReflectionClass_isAnonymous arginfo_class_Reflector___toString
+#define arginfo_class_ReflectionClass_isAnonymous arginfo_class_ReflectionFunctionAbstract___clone
-#define arginfo_class_ReflectionClass_isInstantiable arginfo_class_Reflector___toString
+#define arginfo_class_ReflectionClass_isInstantiable arginfo_class_ReflectionFunctionAbstract___clone
-#define arginfo_class_ReflectionClass_isCloneable arginfo_class_Reflector___toString
+#define arginfo_class_ReflectionClass_isCloneable arginfo_class_ReflectionFunctionAbstract___clone
-#define arginfo_class_ReflectionClass_getFileName arginfo_class_Reflector___toString
+#define arginfo_class_ReflectionClass_getFileName arginfo_class_ReflectionFunctionAbstract___clone
-#define arginfo_class_ReflectionClass_getStartLine arginfo_class_Reflector___toString
+#define arginfo_class_ReflectionClass_getStartLine arginfo_class_ReflectionFunctionAbstract___clone
-#define arginfo_class_ReflectionClass_getEndLine arginfo_class_Reflector___toString
+#define arginfo_class_ReflectionClass_getEndLine arginfo_class_ReflectionFunctionAbstract___clone
-#define arginfo_class_ReflectionClass_getDocComment arginfo_class_Reflector___toString
+#define arginfo_class_ReflectionClass_getDocComment arginfo_class_ReflectionFunctionAbstract___clone
-#define arginfo_class_ReflectionClass_getConstructor arginfo_class_Reflector___toString
+#define arginfo_class_ReflectionClass_getConstructor arginfo_class_ReflectionFunctionAbstract___clone
ZEND_BEGIN_ARG_INFO_EX(arginfo_class_ReflectionClass_hasMethod, 0, 0, 1)
ZEND_ARG_TYPE_INFO(0, name, IS_STRING, 0)
@@ -190,33 +189,33 @@ ZEND_END_ARG_INFO()
#define arginfo_class_ReflectionClass_hasConstant arginfo_class_ReflectionClass_hasMethod
-#define arginfo_class_ReflectionClass_getConstants arginfo_class_Reflector___toString
+#define arginfo_class_ReflectionClass_getConstants arginfo_class_ReflectionFunctionAbstract___clone
-#define arginfo_class_ReflectionClass_getReflectionConstants arginfo_class_Reflector___toString
+#define arginfo_class_ReflectionClass_getReflectionConstants arginfo_class_ReflectionFunctionAbstract___clone
#define arginfo_class_ReflectionClass_getConstant arginfo_class_ReflectionClass_hasMethod
#define arginfo_class_ReflectionClass_getReflectionConstant arginfo_class_ReflectionClass_hasMethod
-#define arginfo_class_ReflectionClass_getInterfaces arginfo_class_Reflector___toString
+#define arginfo_class_ReflectionClass_getInterfaces arginfo_class_ReflectionFunctionAbstract___clone
-#define arginfo_class_ReflectionClass_getInterfaceNames arginfo_class_Reflector___toString
+#define arginfo_class_ReflectionClass_getInterfaceNames arginfo_class_ReflectionFunctionAbstract___clone
-#define arginfo_class_ReflectionClass_isInterface arginfo_class_Reflector___toString
+#define arginfo_class_ReflectionClass_isInterface arginfo_class_ReflectionFunctionAbstract___clone
-#define arginfo_class_ReflectionClass_getTraits arginfo_class_Reflector___toString
+#define arginfo_class_ReflectionClass_getTraits arginfo_class_ReflectionFunctionAbstract___clone
-#define arginfo_class_ReflectionClass_getTraitNames arginfo_class_Reflector___toString
+#define arginfo_class_ReflectionClass_getTraitNames arginfo_class_ReflectionFunctionAbstract___clone
-#define arginfo_class_ReflectionClass_getTraitAliases arginfo_class_Reflector___toString
+#define arginfo_class_ReflectionClass_getTraitAliases arginfo_class_ReflectionFunctionAbstract___clone
-#define arginfo_class_ReflectionClass_isTrait arginfo_class_Reflector___toString
+#define arginfo_class_ReflectionClass_isTrait arginfo_class_ReflectionFunctionAbstract___clone
-#define arginfo_class_ReflectionClass_isAbstract arginfo_class_Reflector___toString
+#define arginfo_class_ReflectionClass_isAbstract arginfo_class_ReflectionFunctionAbstract___clone
-#define arginfo_class_ReflectionClass_isFinal arginfo_class_Reflector___toString
+#define arginfo_class_ReflectionClass_isFinal arginfo_class_ReflectionFunctionAbstract___clone
-#define arginfo_class_ReflectionClass_getModifiers arginfo_class_Reflector___toString
+#define arginfo_class_ReflectionClass_getModifiers arginfo_class_ReflectionFunctionAbstract___clone
ZEND_BEGIN_ARG_INFO_EX(arginfo_class_ReflectionClass_isIntance, 0, 0, 1)
ZEND_ARG_TYPE_INFO(0, object, IS_OBJECT, 0)
@@ -224,19 +223,19 @@ ZEND_END_ARG_INFO()
#define arginfo_class_ReflectionClass_newInstance arginfo_class_ReflectionFunction_invoke
-#define arginfo_class_ReflectionClass_newInstanceWithoutConstructor arginfo_class_Reflector___toString
+#define arginfo_class_ReflectionClass_newInstanceWithoutConstructor arginfo_class_ReflectionFunctionAbstract___clone
ZEND_BEGIN_ARG_INFO_EX(arginfo_class_ReflectionClass_newInstanceArgs, 0, 0, 0)
ZEND_ARG_TYPE_INFO(0, args, IS_ARRAY, 0)
ZEND_END_ARG_INFO()
-#define arginfo_class_ReflectionClass_getParentClass arginfo_class_Reflector___toString
+#define arginfo_class_ReflectionClass_getParentClass arginfo_class_ReflectionFunctionAbstract___clone
ZEND_BEGIN_ARG_INFO_EX(arginfo_class_ReflectionClass_isSubclassOf, 0, 0, 1)
ZEND_ARG_INFO(0, class)
ZEND_END_ARG_INFO()
-#define arginfo_class_ReflectionClass_getStaticProperties arginfo_class_Reflector___toString
+#define arginfo_class_ReflectionClass_getStaticProperties arginfo_class_ReflectionFunctionAbstract___clone
ZEND_BEGIN_ARG_INFO_EX(arginfo_class_ReflectionClass_getStaticPropertyValue, 0, 0, 1)
ZEND_ARG_TYPE_INFO(0, name, IS_STRING, 0)
@@ -248,40 +247,40 @@ ZEND_BEGIN_ARG_INFO_EX(arginfo_class_ReflectionClass_setStaticPropertyValue, 0,
ZEND_ARG_INFO(0, value)
ZEND_END_ARG_INFO()
-#define arginfo_class_ReflectionClass_getDefaultProperties arginfo_class_Reflector___toString
+#define arginfo_class_ReflectionClass_getDefaultProperties arginfo_class_ReflectionFunctionAbstract___clone
-#define arginfo_class_ReflectionClass_isIterable arginfo_class_Reflector___toString
+#define arginfo_class_ReflectionClass_isIterable arginfo_class_ReflectionFunctionAbstract___clone
-#define arginfo_class_ReflectionClass_isIterateable arginfo_class_Reflector___toString
+#define arginfo_class_ReflectionClass_isIterateable arginfo_class_ReflectionFunctionAbstract___clone
ZEND_BEGIN_ARG_INFO_EX(arginfo_class_ReflectionClass_implementsInterface, 0, 0, 1)
ZEND_ARG_INFO(0, interface)
ZEND_END_ARG_INFO()
-#define arginfo_class_ReflectionClass_getExtension arginfo_class_Reflector___toString
+#define arginfo_class_ReflectionClass_getExtension arginfo_class_ReflectionFunctionAbstract___clone
-#define arginfo_class_ReflectionClass_getExtensionName arginfo_class_Reflector___toString
+#define arginfo_class_ReflectionClass_getExtensionName arginfo_class_ReflectionFunctionAbstract___clone
-#define arginfo_class_ReflectionClass_inNamespace arginfo_class_Reflector___toString
+#define arginfo_class_ReflectionClass_inNamespace arginfo_class_ReflectionFunctionAbstract___clone
-#define arginfo_class_ReflectionClass_getNamespaceName arginfo_class_Reflector___toString
+#define arginfo_class_ReflectionClass_getNamespaceName arginfo_class_ReflectionFunctionAbstract___clone
-#define arginfo_class_ReflectionClass_getShortName arginfo_class_Reflector___toString
+#define arginfo_class_ReflectionClass_getShortName arginfo_class_ReflectionFunctionAbstract___clone
ZEND_BEGIN_ARG_INFO_EX(arginfo_class_ReflectionObject___construct, 0, 0, 1)
ZEND_ARG_TYPE_INFO(0, argument, IS_OBJECT, 0)
ZEND_END_ARG_INFO()
-#define arginfo_class_ReflectionProperty___clone arginfo_class_Reflector___toString
+#define arginfo_class_ReflectionProperty___clone arginfo_class_ReflectionFunctionAbstract___clone
ZEND_BEGIN_ARG_INFO_EX(arginfo_class_ReflectionProperty___construct, 0, 0, 2)
ZEND_ARG_INFO(0, class)
ZEND_ARG_TYPE_INFO(0, name, IS_STRING, 0)
ZEND_END_ARG_INFO()
-#define arginfo_class_ReflectionProperty___toString arginfo_class_Reflector___toString
+#define arginfo_class_ReflectionProperty___toString arginfo_class_ReflectionFunction___toString
-#define arginfo_class_ReflectionProperty_getName arginfo_class_Reflector___toString
+#define arginfo_class_ReflectionProperty_getName arginfo_class_ReflectionFunctionAbstract___clone
ZEND_BEGIN_ARG_INFO_EX(arginfo_class_ReflectionProperty_getValue, 0, 0, 0)
ZEND_ARG_TYPE_INFO(0, object, IS_OBJECT, 1)
@@ -294,156 +293,156 @@ ZEND_END_ARG_INFO()
#define arginfo_class_ReflectionProperty_isInitialized arginfo_class_ReflectionProperty_getValue
-#define arginfo_class_ReflectionProperty_isPublic arginfo_class_Reflector___toString
+#define arginfo_class_ReflectionProperty_isPublic arginfo_class_ReflectionFunctionAbstract___clone
-#define arginfo_class_ReflectionProperty_isPrivate arginfo_class_Reflector___toString
+#define arginfo_class_ReflectionProperty_isPrivate arginfo_class_ReflectionFunctionAbstract___clone
-#define arginfo_class_ReflectionProperty_isProtected arginfo_class_Reflector___toString
+#define arginfo_class_ReflectionProperty_isProtected arginfo_class_ReflectionFunctionAbstract___clone
-#define arginfo_class_ReflectionProperty_isStatic arginfo_class_Reflector___toString
+#define arginfo_class_ReflectionProperty_isStatic arginfo_class_ReflectionFunctionAbstract___clone
-#define arginfo_class_ReflectionProperty_isDefault arginfo_class_Reflector___toString
+#define arginfo_class_ReflectionProperty_isDefault arginfo_class_ReflectionFunctionAbstract___clone
-#define arginfo_class_ReflectionProperty_getModifiers arginfo_class_Reflector___toString
+#define arginfo_class_ReflectionProperty_getModifiers arginfo_class_ReflectionFunctionAbstract___clone
-#define arginfo_class_ReflectionProperty_getDeclaringClass arginfo_class_Reflector___toString
+#define arginfo_class_ReflectionProperty_getDeclaringClass arginfo_class_ReflectionFunctionAbstract___clone
-#define arginfo_class_ReflectionProperty_getDocComment arginfo_class_Reflector___toString
+#define arginfo_class_ReflectionProperty_getDocComment arginfo_class_ReflectionFunctionAbstract___clone
#define arginfo_class_ReflectionProperty_setAccessible arginfo_class_ReflectionMethod_setAccessible
-#define arginfo_class_ReflectionProperty_getType arginfo_class_Reflector___toString
+#define arginfo_class_ReflectionProperty_getType arginfo_class_ReflectionFunctionAbstract___clone
-#define arginfo_class_ReflectionProperty_hasType arginfo_class_Reflector___toString
+#define arginfo_class_ReflectionProperty_hasType arginfo_class_ReflectionFunctionAbstract___clone
ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_class_ReflectionProperty_hasDefaultValue, 0, 0, _IS_BOOL, 0)
ZEND_END_ARG_INFO()
-#define arginfo_class_ReflectionProperty_getDefaultValue arginfo_class_Reflector___toString
+#define arginfo_class_ReflectionProperty_getDefaultValue arginfo_class_ReflectionFunctionAbstract___clone
-#define arginfo_class_ReflectionClassConstant___clone arginfo_class_Reflector___toString
+#define arginfo_class_ReflectionClassConstant___clone arginfo_class_ReflectionFunctionAbstract___clone
#define arginfo_class_ReflectionClassConstant___construct arginfo_class_ReflectionProperty___construct
-#define arginfo_class_ReflectionClassConstant___toString arginfo_class_Reflector___toString
+#define arginfo_class_ReflectionClassConstant___toString arginfo_class_ReflectionFunction___toString
-#define arginfo_class_ReflectionClassConstant_getName arginfo_class_Reflector___toString
+#define arginfo_class_ReflectionClassConstant_getName arginfo_class_ReflectionFunctionAbstract___clone
-#define arginfo_class_ReflectionClassConstant_getValue arginfo_class_Reflector___toString
+#define arginfo_class_ReflectionClassConstant_getValue arginfo_class_ReflectionFunctionAbstract___clone
-#define arginfo_class_ReflectionClassConstant_isPublic arginfo_class_Reflector___toString
+#define arginfo_class_ReflectionClassConstant_isPublic arginfo_class_ReflectionFunctionAbstract___clone
-#define arginfo_class_ReflectionClassConstant_isPrivate arginfo_class_Reflector___toString
+#define arginfo_class_ReflectionClassConstant_isPrivate arginfo_class_ReflectionFunctionAbstract___clone
-#define arginfo_class_ReflectionClassConstant_isProtected arginfo_class_Reflector___toString
+#define arginfo_class_ReflectionClassConstant_isProtected arginfo_class_ReflectionFunctionAbstract___clone
-#define arginfo_class_ReflectionClassConstant_getModifiers arginfo_class_Reflector___toString
+#define arginfo_class_ReflectionClassConstant_getModifiers arginfo_class_ReflectionFunctionAbstract___clone
-#define arginfo_class_ReflectionClassConstant_getDeclaringClass arginfo_class_Reflector___toString
+#define arginfo_class_ReflectionClassConstant_getDeclaringClass arginfo_class_ReflectionFunctionAbstract___clone
-#define arginfo_class_ReflectionClassConstant_getDocComment arginfo_class_Reflector___toString
+#define arginfo_class_ReflectionClassConstant_getDocComment arginfo_class_ReflectionFunctionAbstract___clone
-#define arginfo_class_ReflectionParameter___clone arginfo_class_Reflector___toString
+#define arginfo_class_ReflectionParameter___clone arginfo_class_ReflectionFunctionAbstract___clone
ZEND_BEGIN_ARG_INFO_EX(arginfo_class_ReflectionParameter___construct, 0, 0, 2)
ZEND_ARG_INFO(0, function)
ZEND_ARG_INFO(0, parameter)
ZEND_END_ARG_INFO()
-#define arginfo_class_ReflectionParameter___toString arginfo_class_Reflector___toString
+#define arginfo_class_ReflectionParameter___toString arginfo_class_ReflectionFunction___toString
-#define arginfo_class_ReflectionParameter_getName arginfo_class_Reflector___toString
+#define arginfo_class_ReflectionParameter_getName arginfo_class_ReflectionFunctionAbstract___clone
-#define arginfo_class_ReflectionParameter_isPassedByReference arginfo_class_Reflector___toString
+#define arginfo_class_ReflectionParameter_isPassedByReference arginfo_class_ReflectionFunctionAbstract___clone
-#define arginfo_class_ReflectionParameter_canBePassedByValue arginfo_class_Reflector___toString
+#define arginfo_class_ReflectionParameter_canBePassedByValue arginfo_class_ReflectionFunctionAbstract___clone
-#define arginfo_class_ReflectionParameter_getDeclaringFunction arginfo_class_Reflector___toString
+#define arginfo_class_ReflectionParameter_getDeclaringFunction arginfo_class_ReflectionFunctionAbstract___clone
-#define arginfo_class_ReflectionParameter_getDeclaringClass arginfo_class_Reflector___toString
+#define arginfo_class_ReflectionParameter_getDeclaringClass arginfo_class_ReflectionFunctionAbstract___clone
-#define arginfo_class_ReflectionParameter_getClass arginfo_class_Reflector___toString
+#define arginfo_class_ReflectionParameter_getClass arginfo_class_ReflectionFunctionAbstract___clone
-#define arginfo_class_ReflectionParameter_hasType arginfo_class_Reflector___toString
+#define arginfo_class_ReflectionParameter_hasType arginfo_class_ReflectionFunctionAbstract___clone
-#define arginfo_class_ReflectionParameter_getType arginfo_class_Reflector___toString
+#define arginfo_class_ReflectionParameter_getType arginfo_class_ReflectionFunctionAbstract___clone
-#define arginfo_class_ReflectionParameter_isArray arginfo_class_Reflector___toString
+#define arginfo_class_ReflectionParameter_isArray arginfo_class_ReflectionFunctionAbstract___clone
-#define arginfo_class_ReflectionParameter_isCallable arginfo_class_Reflector___toString
+#define arginfo_class_ReflectionParameter_isCallable arginfo_class_ReflectionFunctionAbstract___clone
-#define arginfo_class_ReflectionParameter_allowsNull arginfo_class_Reflector___toString
+#define arginfo_class_ReflectionParameter_allowsNull arginfo_class_ReflectionFunctionAbstract___clone
-#define arginfo_class_ReflectionParameter_getPosition arginfo_class_Reflector___toString
+#define arginfo_class_ReflectionParameter_getPosition arginfo_class_ReflectionFunctionAbstract___clone
-#define arginfo_class_ReflectionParameter_isOptional arginfo_class_Reflector___toString
+#define arginfo_class_ReflectionParameter_isOptional arginfo_class_ReflectionFunctionAbstract___clone
-#define arginfo_class_ReflectionParameter_isDefaultValueAvailable arginfo_class_Reflector___toString
+#define arginfo_class_ReflectionParameter_isDefaultValueAvailable arginfo_class_ReflectionFunctionAbstract___clone
-#define arginfo_class_ReflectionParameter_getDefaultValue arginfo_class_Reflector___toString
+#define arginfo_class_ReflectionParameter_getDefaultValue arginfo_class_ReflectionFunctionAbstract___clone
-#define arginfo_class_ReflectionParameter_isDefaultValueConstant arginfo_class_Reflector___toString
+#define arginfo_class_ReflectionParameter_isDefaultValueConstant arginfo_class_ReflectionFunctionAbstract___clone
-#define arginfo_class_ReflectionParameter_getDefaultValueConstantName arginfo_class_Reflector___toString
+#define arginfo_class_ReflectionParameter_getDefaultValueConstantName arginfo_class_ReflectionFunctionAbstract___clone
-#define arginfo_class_ReflectionParameter_isVariadic arginfo_class_Reflector___toString
+#define arginfo_class_ReflectionParameter_isVariadic arginfo_class_ReflectionFunctionAbstract___clone
-#define arginfo_class_ReflectionType___clone arginfo_class_Reflector___toString
+#define arginfo_class_ReflectionType___clone arginfo_class_ReflectionFunctionAbstract___clone
-#define arginfo_class_ReflectionType_allowsNull arginfo_class_Reflector___toString
+#define arginfo_class_ReflectionType_allowsNull arginfo_class_ReflectionFunctionAbstract___clone
-#define arginfo_class_ReflectionType___toString arginfo_class_Reflector___toString
+#define arginfo_class_ReflectionType___toString arginfo_class_ReflectionFunction___toString
-#define arginfo_class_ReflectionNamedType_getName arginfo_class_Reflector___toString
+#define arginfo_class_ReflectionNamedType_getName arginfo_class_ReflectionFunctionAbstract___clone
-#define arginfo_class_ReflectionNamedType_isBuiltin arginfo_class_Reflector___toString
+#define arginfo_class_ReflectionNamedType_isBuiltin arginfo_class_ReflectionFunctionAbstract___clone
ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_class_ReflectionUnionType_getTypes, 0, 0, IS_ARRAY, 0)
ZEND_END_ARG_INFO()
-#define arginfo_class_ReflectionExtension___clone arginfo_class_Reflector___toString
+#define arginfo_class_ReflectionExtension___clone arginfo_class_ReflectionFunctionAbstract___clone
#define arginfo_class_ReflectionExtension___construct arginfo_class_ReflectionClass_hasMethod
-#define arginfo_class_ReflectionExtension___toString arginfo_class_Reflector___toString
+#define arginfo_class_ReflectionExtension___toString arginfo_class_ReflectionFunction___toString
-#define arginfo_class_ReflectionExtension_getName arginfo_class_Reflector___toString
+#define arginfo_class_ReflectionExtension_getName arginfo_class_ReflectionFunctionAbstract___clone
-#define arginfo_class_ReflectionExtension_getVersion arginfo_class_Reflector___toString
+#define arginfo_class_ReflectionExtension_getVersion arginfo_class_ReflectionFunctionAbstract___clone
-#define arginfo_class_ReflectionExtension_getFunctions arginfo_class_Reflector___toString
+#define arginfo_class_ReflectionExtension_getFunctions arginfo_class_ReflectionFunctionAbstract___clone
-#define arginfo_class_ReflectionExtension_getConstants arginfo_class_Reflector___toString
+#define arginfo_class_ReflectionExtension_getConstants arginfo_class_ReflectionFunctionAbstract___clone
-#define arginfo_class_ReflectionExtension_getINIEntries arginfo_class_Reflector___toString
+#define arginfo_class_ReflectionExtension_getINIEntries arginfo_class_ReflectionFunctionAbstract___clone
-#define arginfo_class_ReflectionExtension_getClasses arginfo_class_Reflector___toString
+#define arginfo_class_ReflectionExtension_getClasses arginfo_class_ReflectionFunctionAbstract___clone
-#define arginfo_class_ReflectionExtension_getClassNames arginfo_class_Reflector___toString
+#define arginfo_class_ReflectionExtension_getClassNames arginfo_class_ReflectionFunctionAbstract___clone
-#define arginfo_class_ReflectionExtension_getDependencies arginfo_class_Reflector___toString
+#define arginfo_class_ReflectionExtension_getDependencies arginfo_class_ReflectionFunctionAbstract___clone
-#define arginfo_class_ReflectionExtension_info arginfo_class_Reflector___toString
+#define arginfo_class_ReflectionExtension_info arginfo_class_ReflectionFunctionAbstract___clone
-#define arginfo_class_ReflectionExtension_isPersistent arginfo_class_Reflector___toString
+#define arginfo_class_ReflectionExtension_isPersistent arginfo_class_ReflectionFunctionAbstract___clone
-#define arginfo_class_ReflectionExtension_isTemporary arginfo_class_Reflector___toString
+#define arginfo_class_ReflectionExtension_isTemporary arginfo_class_ReflectionFunctionAbstract___clone
-#define arginfo_class_ReflectionZendExtension___clone arginfo_class_Reflector___toString
+#define arginfo_class_ReflectionZendExtension___clone arginfo_class_ReflectionFunctionAbstract___clone
#define arginfo_class_ReflectionZendExtension___construct arginfo_class_ReflectionClass_hasMethod
-#define arginfo_class_ReflectionZendExtension___toString arginfo_class_Reflector___toString
+#define arginfo_class_ReflectionZendExtension___toString arginfo_class_ReflectionFunction___toString
-#define arginfo_class_ReflectionZendExtension_getName arginfo_class_Reflector___toString
+#define arginfo_class_ReflectionZendExtension_getName arginfo_class_ReflectionFunctionAbstract___clone
-#define arginfo_class_ReflectionZendExtension_getVersion arginfo_class_Reflector___toString
+#define arginfo_class_ReflectionZendExtension_getVersion arginfo_class_ReflectionFunctionAbstract___clone
-#define arginfo_class_ReflectionZendExtension_getAuthor arginfo_class_Reflector___toString
+#define arginfo_class_ReflectionZendExtension_getAuthor arginfo_class_ReflectionFunctionAbstract___clone
-#define arginfo_class_ReflectionZendExtension_getURL arginfo_class_Reflector___toString
+#define arginfo_class_ReflectionZendExtension_getURL arginfo_class_ReflectionFunctionAbstract___clone
-#define arginfo_class_ReflectionZendExtension_getCopyright arginfo_class_Reflector___toString
+#define arginfo_class_ReflectionZendExtension_getCopyright arginfo_class_ReflectionFunctionAbstract___clone
ZEND_BEGIN_ARG_WITH_RETURN_OBJ_INFO_EX(arginfo_class_ReflectionReference_fromArrayElement, 0, 2, ReflectionReference, 1)
ZEND_ARG_TYPE_INFO(0, array, IS_ARRAY, 0)
@@ -453,6 +452,6 @@ ZEND_END_ARG_INFO()
ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_class_ReflectionReference_getId, 0, 0, IS_STRING, 0)
ZEND_END_ARG_INFO()
-#define arginfo_class_ReflectionReference___clone arginfo_class_Reflector___toString
+#define arginfo_class_ReflectionReference___clone arginfo_class_ReflectionFunctionAbstract___clone
-#define arginfo_class_ReflectionReference___construct arginfo_class_Reflector___toString
+#define arginfo_class_ReflectionReference___construct arginfo_class_ReflectionFunctionAbstract___clone
diff --git a/ext/reflection/tests/ReflectionClass_toString_001.phpt b/ext/reflection/tests/ReflectionClass_toString_001.phpt
index 0aa46652b7..4eb82b96f3 100644
--- a/ext/reflection/tests/ReflectionClass_toString_001.phpt
+++ b/ext/reflection/tests/ReflectionClass_toString_001.phpt
@@ -9,7 +9,7 @@ $rc = new ReflectionClass("ReflectionClass");
echo $rc;
?>
--EXPECT--
-Class [ <internal:Reflection> class ReflectionClass implements Reflector ] {
+Class [ <internal:Reflection> class ReflectionClass implements Reflector, Stringable ] {
- Constants [3] {
Constant [ public int IS_IMPLICIT_ABSTRACT ] { 16 }
@@ -41,10 +41,11 @@ Class [ <internal:Reflection> class ReflectionClass implements Reflector ] {
}
}
- Method [ <internal:Reflection, prototype Reflector> public method __toString ] {
+ Method [ <internal:Reflection, prototype Stringable> public method __toString ] {
- Parameters [0] {
}
+ - Return [ string ]
}
Method [ <internal:Reflection> public method getName ] {
diff --git a/ext/simplexml/simplexml.c b/ext/simplexml/simplexml.c
index 4e922e3ef0..7a1a410c8e 100644
--- a/ext/simplexml/simplexml.c
+++ b/ext/simplexml/simplexml.c
@@ -2633,7 +2633,7 @@ PHP_MINIT_FUNCTION(simplexml)
sxe.create_object = sxe_object_new;
sxe_class_entry = zend_register_internal_class(&sxe);
sxe_class_entry->get_iterator = php_sxe_get_iterator;
- zend_class_implements(sxe_class_entry, 2, zend_ce_traversable, zend_ce_countable);
+ zend_class_implements(sxe_class_entry, 3, zend_ce_traversable, zend_ce_countable, zend_ce_stringable);
memcpy(&sxe_object_handlers, &std_object_handlers, sizeof(zend_object_handlers));
sxe_object_handlers.offset = XtOffsetOf(php_sxe_object, zo);
diff --git a/ext/simplexml/simplexml.stub.php b/ext/simplexml/simplexml.stub.php
index 3a1d0d51f4..f78694c139 100644
--- a/ext/simplexml/simplexml.stub.php
+++ b/ext/simplexml/simplexml.stub.php
@@ -6,7 +6,7 @@ function simplexml_load_string(string $data, ?string $class_name = SimpleXMLElem
function simplexml_import_dom(DOMNode $node, ?string $class_name = SimpleXMLElement::class): ?SimpleXMLElement {}
-class SimpleXMLElement
+class SimpleXMLElement implements Stringable
{
/** @return array|false */
public function xpath(string $path) {}
@@ -43,8 +43,7 @@ class SimpleXMLElement
/** @return string */
public function getName() {}
- /** @return string */
- public function __toString() {}
+ public function __toString(): string {}
/** @return int */
public function count() {}
diff --git a/ext/simplexml/simplexml_arginfo.h b/ext/simplexml/simplexml_arginfo.h
index b44426beeb..06b9941b2e 100644
--- a/ext/simplexml/simplexml_arginfo.h
+++ b/ext/simplexml/simplexml_arginfo.h
@@ -71,6 +71,7 @@ ZEND_END_ARG_INFO()
ZEND_BEGIN_ARG_INFO_EX(arginfo_class_SimpleXMLElement_getName, 0, 0, 0)
ZEND_END_ARG_INFO()
-#define arginfo_class_SimpleXMLElement___toString arginfo_class_SimpleXMLElement_getName
+ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_class_SimpleXMLElement___toString, 0, 0, IS_STRING, 0)
+ZEND_END_ARG_INFO()
#define arginfo_class_SimpleXMLElement_count arginfo_class_SimpleXMLElement_getName
diff --git a/ext/soap/soap.stub.php b/ext/soap/soap.stub.php
index 15ea54f660..77070dccf7 100644
--- a/ext/soap/soap.stub.php
+++ b/ext/soap/soap.stub.php
@@ -18,8 +18,7 @@ class SoapFault extends Exception
{
function __construct($faultcode, string $faultstring, ?string $faultactor = null, $detail = null, ?string $faultname = null, $headerfault = null);
- /** @return string */
- function __toString();
+ function __toString(): string;
}
class SoapVar
diff --git a/ext/soap/soap_arginfo.h b/ext/soap/soap_arginfo.h
index 69079b82eb..82f30e9e67 100644
--- a/ext/soap/soap_arginfo.h
+++ b/ext/soap/soap_arginfo.h
@@ -30,7 +30,7 @@ ZEND_BEGIN_ARG_INFO_EX(arginfo_class_SoapFault___construct, 0, 0, 2)
ZEND_ARG_INFO(0, headerfault)
ZEND_END_ARG_INFO()
-ZEND_BEGIN_ARG_INFO_EX(arginfo_class_SoapFault___toString, 0, 0, 0)
+ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_class_SoapFault___toString, 0, 0, IS_STRING, 0)
ZEND_END_ARG_INFO()
ZEND_BEGIN_ARG_INFO_EX(arginfo_class_SoapVar___construct, 0, 0, 2)
@@ -72,7 +72,8 @@ ZEND_BEGIN_ARG_INFO_EX(arginfo_class_SoapServer_setObject, 0, 0, 1)
ZEND_ARG_TYPE_INFO(0, object, IS_OBJECT, 0)
ZEND_END_ARG_INFO()
-#define arginfo_class_SoapServer_getFunctions arginfo_class_SoapFault___toString
+ZEND_BEGIN_ARG_INFO_EX(arginfo_class_SoapServer_getFunctions, 0, 0, 0)
+ZEND_END_ARG_INFO()
ZEND_BEGIN_ARG_INFO_EX(arginfo_class_SoapServer_addFunction, 0, 0, 1)
ZEND_ARG_INFO(0, functions)
@@ -97,17 +98,17 @@ ZEND_BEGIN_ARG_INFO_EX(arginfo_class_SoapClient___soapCall, 0, 0, 2)
ZEND_ARG_INFO(0, output_headers)
ZEND_END_ARG_INFO()
-#define arginfo_class_SoapClient___getFunctions arginfo_class_SoapFault___toString
+#define arginfo_class_SoapClient___getFunctions arginfo_class_SoapServer_getFunctions
-#define arginfo_class_SoapClient___getTypes arginfo_class_SoapFault___toString
+#define arginfo_class_SoapClient___getTypes arginfo_class_SoapServer_getFunctions
-#define arginfo_class_SoapClient___getLastRequest arginfo_class_SoapFault___toString
+#define arginfo_class_SoapClient___getLastRequest arginfo_class_SoapServer_getFunctions
-#define arginfo_class_SoapClient___getLastResponse arginfo_class_SoapFault___toString
+#define arginfo_class_SoapClient___getLastResponse arginfo_class_SoapServer_getFunctions
-#define arginfo_class_SoapClient___getLastRequestHeaders arginfo_class_SoapFault___toString
+#define arginfo_class_SoapClient___getLastRequestHeaders arginfo_class_SoapServer_getFunctions
-#define arginfo_class_SoapClient___getLastResponseHeaders arginfo_class_SoapFault___toString
+#define arginfo_class_SoapClient___getLastResponseHeaders arginfo_class_SoapServer_getFunctions
ZEND_BEGIN_ARG_INFO_EX(arginfo_class_SoapClient___doRequest, 0, 0, 4)
ZEND_ARG_TYPE_INFO(0, request, IS_STRING, 0)
@@ -122,7 +123,7 @@ ZEND_BEGIN_ARG_INFO_EX(arginfo_class_SoapClient___setCookie, 0, 0, 1)
ZEND_ARG_TYPE_INFO(0, value, IS_STRING, 1)
ZEND_END_ARG_INFO()
-#define arginfo_class_SoapClient___getCookies arginfo_class_SoapFault___toString
+#define arginfo_class_SoapClient___getCookies arginfo_class_SoapServer_getFunctions
ZEND_BEGIN_ARG_INFO_EX(arginfo_class_SoapClient___setSoapHeaders, 0, 0, 0)
ZEND_ARG_INFO(0, soapheaders)
diff --git a/ext/spl/spl_directory.c b/ext/spl/spl_directory.c
index eb2b320792..4ebbdf9cf7 100644
--- a/ext/spl/spl_directory.c
+++ b/ext/spl/spl_directory.c
@@ -1899,6 +1899,9 @@ ZEND_END_ARG_INFO()
ZEND_BEGIN_ARG_INFO(arginfo_splfileinfo_void, 0)
ZEND_END_ARG_INFO()
+ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_splfileinfo___toString, 0, 0, IS_STRING, 0)
+ZEND_END_ARG_INFO()
+
/* the method table */
/* each method can have its own parameters and visibility */
static const zend_function_entry spl_SplFileInfo_functions[] = {
@@ -1933,7 +1936,7 @@ static const zend_function_entry spl_SplFileInfo_functions[] = {
SPL_ME(SplFileInfo, setFileClass, arginfo_info_optinalFileClass, ZEND_ACC_PUBLIC)
SPL_ME(SplFileInfo, setInfoClass, arginfo_info_optinalFileClass, ZEND_ACC_PUBLIC)
SPL_ME(SplFileInfo, _bad_state_ex, arginfo_splfileinfo_void, ZEND_ACC_PUBLIC|ZEND_ACC_FINAL)
- SPL_MA(SplFileInfo, __toString, SplFileInfo, getPathname, arginfo_splfileinfo_void, ZEND_ACC_PUBLIC)
+ SPL_MA(SplFileInfo, __toString, SplFileInfo, getPathname, arginfo_splfileinfo___toString, ZEND_ACC_PUBLIC)
PHP_FE_END
};
@@ -1959,7 +1962,7 @@ static const zend_function_entry spl_DirectoryIterator_functions[] = {
SPL_ME(DirectoryIterator, current, arginfo_splfileinfo_void, ZEND_ACC_PUBLIC)
SPL_ME(DirectoryIterator, next, arginfo_splfileinfo_void, ZEND_ACC_PUBLIC)
SPL_ME(DirectoryIterator, seek, arginfo_dir_it_seek, ZEND_ACC_PUBLIC)
- SPL_MA(DirectoryIterator, __toString, DirectoryIterator, getFilename, arginfo_splfileinfo_void, ZEND_ACC_PUBLIC)
+ SPL_MA(DirectoryIterator, __toString, DirectoryIterator, getFilename, arginfo_splfileinfo___toString, ZEND_ACC_PUBLIC)
PHP_FE_END
};
@@ -3072,7 +3075,7 @@ static const zend_function_entry spl_SplFileObject_functions[] = {
SPL_ME(SplFileObject, seek, arginfo_file_object_seek, ZEND_ACC_PUBLIC)
/* mappings */
SPL_MA(SplFileObject, getCurrentLine, SplFileObject, fgets, arginfo_splfileinfo_void, ZEND_ACC_PUBLIC)
- SPL_MA(SplFileObject, __toString, SplFileObject, fgets, arginfo_splfileinfo_void, ZEND_ACC_PUBLIC)
+ SPL_MA(SplFileObject, __toString, SplFileObject, fgets, arginfo_splfileinfo___toString, ZEND_ACC_PUBLIC)
PHP_FE_END
};
@@ -3100,6 +3103,7 @@ PHP_MINIT_FUNCTION(spl_directory)
spl_filesystem_object_handlers.free_obj = spl_filesystem_object_free_storage;
spl_ce_SplFileInfo->serialize = zend_class_serialize_deny;
spl_ce_SplFileInfo->unserialize = zend_class_unserialize_deny;
+ REGISTER_SPL_IMPLEMENTS(SplFileInfo, Stringable);
REGISTER_SPL_SUB_CLASS_EX(DirectoryIterator, SplFileInfo, spl_filesystem_object_new, spl_DirectoryIterator_functions);
diff --git a/ext/spl/spl_iterators.c b/ext/spl/spl_iterators.c
index 666f3ebf64..8aa35081e1 100644
--- a/ext/spl/spl_iterators.c
+++ b/ext/spl/spl_iterators.c
@@ -61,6 +61,9 @@ PHPAPI zend_class_entry *spl_ce_RecursiveTreeIterator;
ZEND_BEGIN_ARG_INFO(arginfo_recursive_it_void, 0)
ZEND_END_ARG_INFO()
+ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_caching_it___toString, 0, 0, IS_STRING, 0)
+ZEND_END_ARG_INFO()
+
static const zend_function_entry spl_funcs_RecursiveIterator[] = {
SPL_ABSTRACT_ME(RecursiveIterator, hasChildren, arginfo_recursive_it_void)
SPL_ABSTRACT_ME(RecursiveIterator, getChildren, arginfo_recursive_it_void)
@@ -2942,7 +2945,7 @@ static const zend_function_entry spl_funcs_CachingIterator[] = {
SPL_ME(dual_it, current, arginfo_recursive_it_void, ZEND_ACC_PUBLIC)
SPL_ME(CachingIterator, next, arginfo_recursive_it_void, ZEND_ACC_PUBLIC)
SPL_ME(CachingIterator, hasNext, arginfo_recursive_it_void, ZEND_ACC_PUBLIC)
- SPL_ME(CachingIterator, __toString, arginfo_recursive_it_void, ZEND_ACC_PUBLIC)
+ SPL_ME(CachingIterator, __toString, arginfo_caching_it___toString, ZEND_ACC_PUBLIC)
SPL_ME(dual_it, getInnerIterator, arginfo_recursive_it_void, ZEND_ACC_PUBLIC)
SPL_ME(CachingIterator, getFlags, arginfo_recursive_it_void, ZEND_ACC_PUBLIC)
SPL_ME(CachingIterator, setFlags, arginfo_caching_it_setFlags, ZEND_ACC_PUBLIC)
@@ -3662,6 +3665,7 @@ PHP_MINIT_FUNCTION(spl_iterators)
REGISTER_SPL_SUB_CLASS_EX(CachingIterator, IteratorIterator, spl_dual_it_new, spl_funcs_CachingIterator);
REGISTER_SPL_IMPLEMENTS(CachingIterator, ArrayAccess);
REGISTER_SPL_IMPLEMENTS(CachingIterator, Countable);
+ REGISTER_SPL_IMPLEMENTS(CachingIterator, Stringable);
REGISTER_SPL_CLASS_CONST_LONG(CachingIterator, "CALL_TOSTRING", CIT_CALL_TOSTRING);
REGISTER_SPL_CLASS_CONST_LONG(CachingIterator, "CATCH_GET_CHILD", CIT_CATCH_GET_CHILD);
diff --git a/ext/spl/spl_iterators.h b/ext/spl/spl_iterators.h
index a3b02bf8bc..5d890bb2b9 100644
--- a/ext/spl/spl_iterators.h
+++ b/ext/spl/spl_iterators.h
@@ -27,6 +27,7 @@
#define spl_ce_ArrayAccess zend_ce_arrayaccess
#define spl_ce_Serializable zend_ce_serializable
#define spl_ce_Countable zend_ce_countable
+#define spl_ce_Stringable zend_ce_stringable
extern PHPAPI zend_class_entry *spl_ce_RecursiveIterator;
extern PHPAPI zend_class_entry *spl_ce_RecursiveIteratorIterator;
diff --git a/ext/standard/tests/strings/strlen.phpt b/ext/standard/tests/strings/strlen.phpt
index 6be163d8fe..282db2da2d 100644
--- a/ext/standard/tests/strings/strlen.phpt
+++ b/ext/standard/tests/strings/strlen.phpt
Binary files differ
diff --git a/ext/standard/tests/strings/strpos.phpt b/ext/standard/tests/strings/strpos.phpt
index 59162e1822..7617536346 100644
--- a/ext/standard/tests/strings/strpos.phpt
+++ b/ext/standard/tests/strings/strpos.phpt
Binary files differ
diff --git a/ext/standard/tests/strings/strstr.phpt b/ext/standard/tests/strings/strstr.phpt
index 4fa6165d97..796a3476e9 100644
--- a/ext/standard/tests/strings/strstr.phpt
+++ b/ext/standard/tests/strings/strstr.phpt
Binary files differ
diff --git a/ext/standard/tests/strings/ucfirst.phpt b/ext/standard/tests/strings/ucfirst.phpt
index e7c0373a3c..48fd772a04 100644
--- a/ext/standard/tests/strings/ucfirst.phpt
+++ b/ext/standard/tests/strings/ucfirst.phpt
Binary files differ