diff options
| author | Nikita Popov <nikita.ppv@gmail.com> | 2019-09-26 12:22:48 +0200 |
|---|---|---|
| committer | Nikita Popov <nikita.ppv@gmail.com> | 2019-09-27 10:11:47 +0200 |
| commit | a66c60cce3cd8878284fb39388080cfb6bac8ff5 (patch) | |
| tree | 417941074c593391c0b61613082b69334e757cf4 /tests/classes | |
| parent | e8d2097bdc467e4ad814e23b406f70c3dc568ff4 (diff) | |
| download | php-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.phpt | 156 |
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) -} |
