<?php
class Foo {}
+class ToString {
+ public function __toString() {
+ return "ToString";
+ }
+}
var_dump(zend_string_or_stdclass("string"));
var_dump(zend_string_or_stdclass(1));
var_dump(zend_string_or_stdclass(null));
var_dump(zend_string_or_stdclass(new stdClass()));
+var_dump(zend_string_or_stdclass(new ToString()));
try {
zend_string_or_stdclass([]);
var_dump(zend_string_or_stdclass_or_null(1));
var_dump(zend_string_or_stdclass_or_null(null));
var_dump(zend_string_or_stdclass_or_null(new stdClass()));
+var_dump(zend_string_or_stdclass_or_null(new ToString()));
try {
zend_string_or_stdclass_or_null([]);
string(0) ""
object(stdClass)#1 (0) {
}
+string(8) "ToString"
zend_string_or_stdclass(): Argument #1 ($param) must be of type stdClass|string, array given
zend_string_or_stdclass(): Argument #1 ($param) must be of type stdClass|string, Foo given
string(6) "string"
NULL
object(stdClass)#1 (0) {
}
+string(8) "ToString"
zend_string_or_stdclass_or_null(): Argument #1 ($param) must be of type stdClass|string|null, array given
zend_string_or_stdclass_or_null(): Argument #1 ($param) must be of type stdClass|string|null, Foo given
zval *arg, zend_string **destination_string, zend_object **destination_object, zend_class_entry *base_ce, int allow_null
) {
if (EXPECTED(Z_TYPE_P(arg) == IS_OBJECT)) {
- if (base_ce && UNEXPECTED(!instanceof_function(Z_OBJCE_P(arg), base_ce))) {
- return 0;
+ if (!base_ce || EXPECTED(instanceof_function(Z_OBJCE_P(arg), base_ce))) {
+ *destination_string = NULL;
+ *destination_object = Z_OBJ_P(arg);
+ return 1;
}
-
- *destination_string = NULL;
- *destination_object = Z_OBJ_P(arg);
- } else if (EXPECTED(Z_TYPE_P(arg) == IS_STRING)) {
- *destination_string = Z_STR_P(arg);
- *destination_object = NULL;
- } else if (allow_null && EXPECTED(Z_TYPE_P(arg) == IS_NULL)) {
- *destination_string = NULL;
- *destination_object = NULL;
- } else {
- *destination_object = NULL;
- return zend_parse_arg_str_slow(arg, destination_string);
}
- return 1;
+ *destination_object = NULL;
+ return zend_parse_arg_str(arg, destination_string, allow_null);
}
END_EXTERN_C()