summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--Zend/tests/009.phpt12
-rw-r--r--Zend/tests/bug47054.phpt6
-rw-r--r--Zend/tests/get_called_class_001.phpt11
-rw-r--r--Zend/zend_vm_def.h17
-rw-r--r--Zend/zend_vm_execute.h35
5 files changed, 40 insertions, 41 deletions
diff --git a/Zend/tests/009.phpt b/Zend/tests/009.phpt
index 16c060389d..ddf38e96f4 100644
--- a/Zend/tests/009.phpt
+++ b/Zend/tests/009.phpt
@@ -26,7 +26,11 @@ $f2 = new foo2;
$f1->bar();
$f2->bar();
-var_dump(get_class());
+try {
+ var_dump(get_class());
+} catch (Error $e) {
+ echo $e->getMessage(), "\n";
+}
try {
var_dump(get_class("qwerty"));
} catch (TypeError $e) {
@@ -40,12 +44,10 @@ $f1->testNull();
echo "Done\n";
?>
---EXPECTF--
+--EXPECT--
string(3) "foo"
string(3) "foo"
-
-Warning: get_class() called without object from outside a class in %s on line %d
-bool(false)
+get_class() without arguments must be called from within a class
get_class(): Argument #1 ($object) must be of type object, string given
string(3) "foo"
string(4) "foo2"
diff --git a/Zend/tests/bug47054.phpt b/Zend/tests/bug47054.phpt
index f607365bdc..eca13e00af 100644
--- a/Zend/tests/bug47054.phpt
+++ b/Zend/tests/bug47054.phpt
@@ -22,12 +22,8 @@ C::s();
$c = new C();
$c->s();
-get_called_class();
-
?>
---EXPECTF--
+--EXPECT--
Called class: D
Called class: C
Called class: C
-
-Warning: get_called_class() called from outside a class in %s on line %d
diff --git a/Zend/tests/get_called_class_001.phpt b/Zend/tests/get_called_class_001.phpt
index 7012ae8129..caa6d154d9 100644
--- a/Zend/tests/get_called_class_001.phpt
+++ b/Zend/tests/get_called_class_001.phpt
@@ -3,9 +3,12 @@ Calling get_called_class() outside a class
--FILE--
<?php
-var_dump(get_called_class());
+try {
+ var_dump(get_called_class());
+} catch (Error $e) {
+ echo $e->getMessage(), "\n";
+}
?>
---EXPECTF--
-Warning: get_called_class() called from outside a class in %s on line %d
-bool(false)
+--EXPECT--
+get_called_class() must be called from within a class
diff --git a/Zend/zend_vm_def.h b/Zend/zend_vm_def.h
index 510595b7c8..9e10721265 100644
--- a/Zend/zend_vm_def.h
+++ b/Zend/zend_vm_def.h
@@ -8940,9 +8940,9 @@ ZEND_VM_COLD_CONST_HANDLER(191, ZEND_GET_CLASS, UNUSED|CONST|TMPVAR|CV, UNUSED)
if (OP1_TYPE == IS_UNUSED) {
if (UNEXPECTED(!EX(func)->common.scope)) {
SAVE_OPLINE();
- zend_error(E_WARNING, "get_class() called without object from outside a class");
- ZVAL_FALSE(EX_VAR(opline->result.var));
- ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
+ zend_throw_error(NULL, "get_class() without arguments must be called from within a class");
+ ZVAL_UNDEF(EX_VAR(opline->result.var));
+ HANDLE_EXCEPTION();
} else {
ZVAL_STR_COPY(EX_VAR(opline->result.var), EX(func)->common.scope->name);
ZEND_VM_NEXT_OPCODE();
@@ -8981,12 +8981,11 @@ ZEND_VM_HANDLER(192, ZEND_GET_CALLED_CLASS, UNUSED, UNUSED)
} else if (Z_CE(EX(This))) {
ZVAL_STR_COPY(EX_VAR(opline->result.var), Z_CE(EX(This))->name);
} else {
- ZVAL_FALSE(EX_VAR(opline->result.var));
- if (UNEXPECTED(!EX(func)->common.scope)) {
- SAVE_OPLINE();
- zend_error(E_WARNING, "get_called_class() called from outside a class");
- ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
- }
+ ZEND_ASSERT(!EX(func)->common.scope);
+ SAVE_OPLINE();
+ zend_throw_error(NULL, "get_called_class() must be called from within a class");
+ ZVAL_UNDEF(EX_VAR(opline->result.var));
+ HANDLE_EXCEPTION();
}
ZEND_VM_NEXT_OPCODE();
}
diff --git a/Zend/zend_vm_execute.h b/Zend/zend_vm_execute.h
index f59c923bd1..ac0dd911c0 100644
--- a/Zend/zend_vm_execute.h
+++ b/Zend/zend_vm_execute.h
@@ -10381,9 +10381,9 @@ static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_GET_CLASS_SPEC_CO
if (IS_CONST == IS_UNUSED) {
if (UNEXPECTED(!EX(func)->common.scope)) {
SAVE_OPLINE();
- zend_error(E_WARNING, "get_class() called without object from outside a class");
- ZVAL_FALSE(EX_VAR(opline->result.var));
- ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
+ zend_throw_error(NULL, "get_class() without arguments must be called from within a class");
+ ZVAL_UNDEF(EX_VAR(opline->result.var));
+ HANDLE_EXCEPTION();
} else {
ZVAL_STR_COPY(EX_VAR(opline->result.var), EX(func)->common.scope->name);
ZEND_VM_NEXT_OPCODE();
@@ -17624,9 +17624,9 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_GET_CLASS_SPEC_TMPVAR_UNUSED_H
if ((IS_TMP_VAR|IS_VAR) == IS_UNUSED) {
if (UNEXPECTED(!EX(func)->common.scope)) {
SAVE_OPLINE();
- zend_error(E_WARNING, "get_class() called without object from outside a class");
- ZVAL_FALSE(EX_VAR(opline->result.var));
- ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
+ zend_throw_error(NULL, "get_class() without arguments must be called from within a class");
+ ZVAL_UNDEF(EX_VAR(opline->result.var));
+ HANDLE_EXCEPTION();
} else {
ZVAL_STR_COPY(EX_VAR(opline->result.var), EX(func)->common.scope->name);
ZEND_VM_NEXT_OPCODE();
@@ -35225,9 +35225,9 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_GET_CLASS_SPEC_UNUSED_UNUSED_H
if (IS_UNUSED == IS_UNUSED) {
if (UNEXPECTED(!EX(func)->common.scope)) {
SAVE_OPLINE();
- zend_error(E_WARNING, "get_class() called without object from outside a class");
- ZVAL_FALSE(EX_VAR(opline->result.var));
- ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
+ zend_throw_error(NULL, "get_class() without arguments must be called from within a class");
+ ZVAL_UNDEF(EX_VAR(opline->result.var));
+ HANDLE_EXCEPTION();
} else {
ZVAL_STR_COPY(EX_VAR(opline->result.var), EX(func)->common.scope->name);
ZEND_VM_NEXT_OPCODE();
@@ -35266,12 +35266,11 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_GET_CALLED_CLASS_SPEC_UNUSED_U
} else if (Z_CE(EX(This))) {
ZVAL_STR_COPY(EX_VAR(opline->result.var), Z_CE(EX(This))->name);
} else {
- ZVAL_FALSE(EX_VAR(opline->result.var));
- if (UNEXPECTED(!EX(func)->common.scope)) {
- SAVE_OPLINE();
- zend_error(E_WARNING, "get_called_class() called from outside a class");
- ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
- }
+ ZEND_ASSERT(!EX(func)->common.scope);
+ SAVE_OPLINE();
+ zend_throw_error(NULL, "get_called_class() must be called from within a class");
+ ZVAL_UNDEF(EX_VAR(opline->result.var));
+ HANDLE_EXCEPTION();
}
ZEND_VM_NEXT_OPCODE();
}
@@ -47385,9 +47384,9 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_GET_CLASS_SPEC_CV_UNUSED_HANDL
if (IS_CV == IS_UNUSED) {
if (UNEXPECTED(!EX(func)->common.scope)) {
SAVE_OPLINE();
- zend_error(E_WARNING, "get_class() called without object from outside a class");
- ZVAL_FALSE(EX_VAR(opline->result.var));
- ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
+ zend_throw_error(NULL, "get_class() without arguments must be called from within a class");
+ ZVAL_UNDEF(EX_VAR(opline->result.var));
+ HANDLE_EXCEPTION();
} else {
ZVAL_STR_COPY(EX_VAR(opline->result.var), EX(func)->common.scope->name);
ZEND_VM_NEXT_OPCODE();