On Wed, Jan 29, 2025 at 4:14 PM Tim Düsterhus <t...@bastelstu.be> wrote:

> Hi
>
> Volker and I would like to start discussion on our RFC to allow "Marking
> return values as important (#[\NoDiscard])".
>
> Please find the following resources for your reference:
>
> - RFC: https://wiki.php.net/rfc/marking_return_value_as_important
> - Implementation: https://github.com/php/php-src/pull/17599
>
> Best regards
> Tim Düsterhus
>

I don't see this as something useful when you want to force interactions
with variables. I do see value in using this for the keeping and closing of
resources, but the only error you should ever get is when you use
`#[NoDiscard]` without a return value.

https://3v4l.org/L4bOc

<?php

#[NoDiscard]
function lockFile(string $path) {
    $handle = fopen($path, 'r+');
    if (! $handle || ! flock($handle, LOCK_EX)) {
        throw new RuntimeException('Failed locking ' . $path);
    }
    return $handle;
}

// what we write
function main() {
    lockFile($path);
    doSomething();
    echo 'hi';
}

// gets rewritten internally to something like
function main() {
    $hidden = lockFile($path);
    doSomething();
    echo 'hi';
    unset($hidden);
}

// if we do assign it, we omit it all
// what we write here would not get rewritten
function main() {
    $handle = lockFile($path);
    doSomething();
    echo 'hi';
}

// if we were to ever get a "using"-like
// what we write
function main() {
    using {
        lockFile($path);
        doSomething();
    }
    echo 'hi';
}

// gets rewritten internally to something like
function main() {
    $hidden = lockFile($path);
    doSomething();
    unset($hidden);
    echo 'hi';
}

Reply via email to