1
0
mirror of https://github.com/php/php-src.git synced 2026-03-24 00:02:20 +01:00
Files
archived-php-src/Zend/tests/readonly_props/variation.phpt
Ilija Tovilo daeb3295b2 Improve readonly avis error (GH-15618)
We don't track whether protected(set) is implicit, so for now always point out
when the property is readonly in the error message.
2024-08-29 13:19:31 +02:00

135 lines
3.6 KiB
PHP

--TEST--
Readonly variations
--FILE--
<?php
class Test {
public readonly int $prop;
public readonly array $array;
public function init() {
$this->prop = 1;
$this->array = [];
}
public function r() {
echo $this->prop;
}
public function w() {
$this->prop = 1;
echo 'done';
}
public function rw() {
$this->prop += 1;
echo 'done';
}
public function im() {
$this->prop[] = 1;
echo 'done';
}
public function is() {
echo (int) isset($this->prop);
}
public function us() {
unset($this->prop);
echo 'done';
}
public function us_dim() {
unset($this->array[0]);
echo 'done';
}
}
function r($test) {
echo $test->prop;
}
function w($test) {
$test->prop = 0;
echo 'done';
}
function rw($test) {
$test->prop += 1;
echo 'done';
}
function im($test) {
$test->prop[] = 1;
echo 'done';
}
function is($test) {
echo (int) isset($test->prop);
}
function us($test) {
unset($test->prop);
echo 'done';
}
function us_dim($test) {
unset($test->array[0]);
echo 'done';
}
foreach ([true, false] as $init) {
foreach ([true, false] as $scope) {
foreach (['r', 'w', 'rw', 'im', 'is', 'us', 'us_dim'] as $op) {
$test = new Test();
if ($init) {
$test->init();
}
echo 'Init: ' . ((int) $init) . ', scope: ' . ((int) $scope) . ', op: ' . $op . ": ";
try {
if ($scope) {
$test->{$op}();
} else {
$op($test);
}
} catch (Error $e) {
echo $e->getMessage();
}
echo "\n";
}
}
}
?>
--EXPECT--
Init: 1, scope: 1, op: r: 1
Init: 1, scope: 1, op: w: Cannot modify readonly property Test::$prop
Init: 1, scope: 1, op: rw: Cannot modify readonly property Test::$prop
Init: 1, scope: 1, op: im: Cannot indirectly modify readonly property Test::$prop
Init: 1, scope: 1, op: is: 1
Init: 1, scope: 1, op: us: Cannot unset readonly property Test::$prop
Init: 1, scope: 1, op: us_dim: Cannot indirectly modify readonly property Test::$array
Init: 1, scope: 0, op: r: 1
Init: 1, scope: 0, op: w: Cannot modify readonly property Test::$prop
Init: 1, scope: 0, op: rw: Cannot modify readonly property Test::$prop
Init: 1, scope: 0, op: im: Cannot indirectly modify readonly property Test::$prop
Init: 1, scope: 0, op: is: 1
Init: 1, scope: 0, op: us: Cannot unset readonly property Test::$prop
Init: 1, scope: 0, op: us_dim: Cannot indirectly modify readonly property Test::$array
Init: 0, scope: 1, op: r: Typed property Test::$prop must not be accessed before initialization
Init: 0, scope: 1, op: w: done
Init: 0, scope: 1, op: rw: Typed property Test::$prop must not be accessed before initialization
Init: 0, scope: 1, op: im: Cannot indirectly modify readonly property Test::$prop
Init: 0, scope: 1, op: is: 0
Init: 0, scope: 1, op: us: done
Init: 0, scope: 1, op: us_dim: done
Init: 0, scope: 0, op: r: Typed property Test::$prop must not be accessed before initialization
Init: 0, scope: 0, op: w: Cannot modify protected(set) readonly property Test::$prop from global scope
Init: 0, scope: 0, op: rw: Typed property Test::$prop must not be accessed before initialization
Init: 0, scope: 0, op: im: Cannot indirectly modify readonly property Test::$prop
Init: 0, scope: 0, op: is: 0
Init: 0, scope: 0, op: us: Cannot unset protected(set) readonly property Test::$prop from global scope
Init: 0, scope: 0, op: us_dim: done