parent
6df71ec557
commit
7d7977fc5a
4 changed files with 79 additions and 5 deletions
@ -0,0 +1,60 @@ |
||||
--TEST-- |
||||
Dynamic property statement writes preserve scope, evaluation and reference value semantics |
||||
--FILE-- |
||||
<?php |
||||
declare(strict_types=1); |
||||
|
||||
final class DynamicWriter |
||||
{ |
||||
private int $hidden = 0; |
||||
|
||||
public function write(string $name, mixed $value): void |
||||
{ |
||||
$this->$name = $value; |
||||
} |
||||
|
||||
public function writeFromReference(string $name, mixed &$value): void |
||||
{ |
||||
$this->$name = $value; |
||||
} |
||||
|
||||
public function writeComputed(string $name, int &$calls): void |
||||
{ |
||||
$this->$name = nextDynamicValue($calls); |
||||
} |
||||
|
||||
public function value(): int |
||||
{ |
||||
return $this->hidden; |
||||
} |
||||
} |
||||
|
||||
function nextDynamicValue(int &$calls): int |
||||
{ |
||||
$calls++; |
||||
return 41; |
||||
} |
||||
|
||||
function main(): void |
||||
{ |
||||
$writer = new DynamicWriter(); |
||||
$name = 'hidden'; |
||||
$writer->write($name, 17); |
||||
var_dump($writer->value()); |
||||
|
||||
$calls = 0; |
||||
$writer->writeComputed($name, $calls); |
||||
var_dump($writer->value(), $calls); |
||||
|
||||
$source = 42; |
||||
$writer->writeFromReference($name, $source); |
||||
$source = 43; |
||||
var_dump($writer->value(), $source); |
||||
} |
||||
?> |
||||
--EXPECT-- |
||||
int(17) |
||||
int(41) |
||||
int(1) |
||||
int(42) |
||||
int(43) |
||||
Loading…
Reference in new issue