summaryrefslogtreecommitdiff
path: root/tests/classes
diff options
context:
space:
mode:
authorNikita Popov <nikita.ppv@gmail.com>2019-09-26 12:22:48 +0200
committerNikita Popov <nikita.ppv@gmail.com>2019-09-27 10:11:47 +0200
commita66c60cce3cd8878284fb39388080cfb6bac8ff5 (patch)
tree417941074c593391c0b61613082b69334e757cf4 /tests/classes
parente8d2097bdc467e4ad814e23b406f70c3dc568ff4 (diff)
downloadphp-git-a66c60cce3cd8878284fb39388080cfb6bac8ff5.tar.gz
Throw Error when writing property of non-object
This removes object auto-vivification support. This also means that we can remove the corresponding special handling for typed properites: We no longer need to check that a property is convertible to stdClass if such a conversion might take place indirectly due to a nested property write. Additionally OBJ_W style operations now no longer modify the object operand, and as such we no longer need to treat op1 as a def in SSA form. The next step would be to actually compile the whole LHS of OBJ_W operations in R rather than W mode, but that causes issues with SimpleXML, whose object handlers depend on the current compilation structure. Part of https://wiki.php.net/rfc/engine_warnings.
Diffstat (limited to 'tests/classes')
-rw-r--r--tests/classes/implicit_instantiation_001.phpt156
1 files changed, 0 insertions, 156 deletions
diff --git a/tests/classes/implicit_instantiation_001.phpt b/tests/classes/implicit_instantiation_001.phpt
deleted file mode 100644
index 495a8a1e35..0000000000
--- a/tests/classes/implicit_instantiation_001.phpt
+++ /dev/null
@@ -1,156 +0,0 @@
---TEST--
-Implicit object instantiation when accessing properties of non-object.
---FILE--
-<?php
-class C {
- // These values get implicitly converted to objects
- public $boolFalse = false;
- public $emptyString = '';
- public $null = null;
-
- // These values do not get implicitly converted to objects
- public $boolTrue = true;
- public $nonEmptyString = 'hello';
- public $intZero = 0;
-}
-
-$c = new C;
-foreach($c as $name => $value) {
- echo "\n\n---( \$c->$name )---";
- echo "\n --> Attempting implicit conversion to object using increment...\n";
- $c->$name->prop++;
- $c->$name = $value; // reset value in case implicit conversion was successful
-
- echo "\n --> Attempting implicit conversion to object using assignment...\n";
- $c->$name->prop = "Implicit instantiation!";
- $c->$name = $value; // reset value in case implicit conversion was successful
-
- echo "\n --> Attempting implicit conversion to object using combined assignment...\n";
- $c->$name->prop .= " Implicit instantiation!";
-}
-
-echo "\n\n\n --> Resulting object:";
-var_dump($c);
-
-?>
---EXPECTF--
----( $c->boolFalse )---
- --> Attempting implicit conversion to object using increment...
-
-Warning: Creating default object from empty value in %s on line 18
-
-Notice: Undefined property: stdClass::$prop in %s on line 18
-
- --> Attempting implicit conversion to object using assignment...
-
-Warning: Creating default object from empty value in %s on line 22
-
- --> Attempting implicit conversion to object using combined assignment...
-
-Warning: Creating default object from empty value in %s on line 26
-
-Notice: Undefined property: stdClass::$prop in %s on line 26
-
-
----( $c->emptyString )---
- --> Attempting implicit conversion to object using increment...
-
-Warning: Creating default object from empty value in %s on line 18
-
-Notice: Undefined property: stdClass::$prop in %s on line 18
-
- --> Attempting implicit conversion to object using assignment...
-
-Warning: Creating default object from empty value in %s on line 22
-
- --> Attempting implicit conversion to object using combined assignment...
-
-Warning: Creating default object from empty value in %s on line 26
-
-Notice: Undefined property: stdClass::$prop in %s on line 26
-
-
----( $c->null )---
- --> Attempting implicit conversion to object using increment...
-
-Warning: Creating default object from empty value in %s on line 18
-
-Notice: Undefined property: stdClass::$prop in %s on line 18
-
- --> Attempting implicit conversion to object using assignment...
-
-Warning: Creating default object from empty value in %s on line 22
-
- --> Attempting implicit conversion to object using combined assignment...
-
-Warning: Creating default object from empty value in %s on line 26
-
-Notice: Undefined property: stdClass::$prop in %s on line 26
-
-
----( $c->boolTrue )---
- --> Attempting implicit conversion to object using increment...
-
-Warning: Attempt to %s property 'prop' of non-object in %s on line 18
-
- --> Attempting implicit conversion to object using assignment...
-
-Warning: Attempt to assign property 'prop' of non-object in %s on line 22
-
- --> Attempting implicit conversion to object using combined assignment...
-
-Warning: Attempt to assign property 'prop' of non-object in %s on line 26
-
-
----( $c->nonEmptyString )---
- --> Attempting implicit conversion to object using increment...
-
-Warning: Attempt to %s property 'prop' of non-object in %s on line 18
-
- --> Attempting implicit conversion to object using assignment...
-
-Warning: Attempt to assign property 'prop' of non-object in %s on line 22
-
- --> Attempting implicit conversion to object using combined assignment...
-
-Warning: Attempt to assign property 'prop' of non-object in %s on line 26
-
-
----( $c->intZero )---
- --> Attempting implicit conversion to object using increment...
-
-Warning: Attempt to %s property 'prop' of non-object in %s on line 18
-
- --> Attempting implicit conversion to object using assignment...
-
-Warning: Attempt to assign property 'prop' of non-object in %s on line 22
-
- --> Attempting implicit conversion to object using combined assignment...
-
-Warning: Attempt to assign property 'prop' of non-object in %s on line 26
-
-
-
- --> Resulting object:object(C)#%d (6) {
- ["boolFalse"]=>
- object(stdClass)#%d (1) {
- ["prop"]=>
- string(24) " Implicit instantiation!"
- }
- ["emptyString"]=>
- object(stdClass)#%d (1) {
- ["prop"]=>
- string(24) " Implicit instantiation!"
- }
- ["null"]=>
- object(stdClass)#%d (1) {
- ["prop"]=>
- string(24) " Implicit instantiation!"
- }
- ["boolTrue"]=>
- bool(true)
- ["nonEmptyString"]=>
- string(5) "hello"
- ["intZero"]=>
- int(0)
-}