Hi
On 8/31/22 22:43, Larry Garfield wrote:
## References make everything worse
[…]
That problem wouldn't happen if all we're changing is visibility, however.
That means in the C# style, we would need to differentiate whether the block on
the right is intended to disable references or not. Ilija has proposed `raw`
to indicate that. That would mean:
```php
class Test
{
public $a { private set; }
public $b { private raw; }
public function inScope()
{
echo $this->a; // echo $this->getA();
$this->a = 'a'; // $this->setA('a');
echo $this->b; // echo $this->b;
$this->b = 'b'; // $this->b = 'b';
}
}
$test = new Test();
echo $test->a; // echo $test->getA();
$test->a = 'a'; // Error, set operation not accessible
echo $test->b; // echo $test->getB();
$test->b = 'b'; // Error, set operation not accessible
```
The take-away for the asymmetric visibility only case is that we would need to
use `raw` instead of `set`, in order to avoid confusion later with accessor
hooks and whether or not to disable references.
The Swift-style syntax, as it does not require any hook-like syntax to just
control visibility, does not have this problem. There is no ambiguity to
resolve, so no need for a `raw` keyword.
I've read through that explanation three times, but don't understand why
the C#-style syntax would require to differentiate between `set` and
`raw`. Isn't the difference between "visibility only" and "accessor" not
clear [1] by having either '{' or ';' after the 'set'?
[1] Read: Clear to the engine, not talking about the human reader here.
Best regards
Tim Düsterhus
--
PHP Internals - PHP Runtime Development Mailing List
To unsubscribe, visit: https://www.php.net/unsub.php