Req #48311 [Opn->Sus]: Controllable object disposing

From: Date: Thu, 21 Jan 2021 13:47:53 +0000
Subject: Req #48311 [Opn->Sus]: Controllable object disposing
References: 1  Groups: php.bugs 
Request: Send a blank email to php-bugs+get-231678@lists.php.net to get a copy of this message
Edit report at https://bugs.php.net/bug.php?id=48311&edit=1

 ID:                 48311
 Updated by:         cmb@php.net
 Reported by:        av3ng3r at gmail dot com
 Summary:            Controllable object disposing
-Status:             Open
+Status:             Suspended
 Type:               Feature/Change Request
 Package:            Scripting Engine problem
 Operating System:   *
 PHP Version:        *
 Block user comment: N
 Private report:     N

 New Comment:

> However code-wise it will be cleaner to let only live the reader
> variable of a certain scope.

You can use function scope:

    (function () {
        $reader = XMLReader::XML('<root/>');
        var_dump($reader->read());
    })();

Given that this only slightly more verbose than the suggested
using statement, and given that that feature likely would be
implemented like the above alternative, I don't see much value in
it.  If anybody feels strongly about needing the feature, please
pursue the RFC process[1].  For the time being, I'm suspending
this ticket.

[1] <https://wiki.php.net/rfc/howto>


Previous Comments:
------------------------------------------------------------------------
[2019-01-10 23:15:49] maju at 10g dot pl

Thanks to this feature you could potentially do something like this:

<?

using(new Brace('div')){
  echo 'DIV INNER TEXT';
}
//this would output:<div>DIV INNER TEXT</div>

class Brace{
 private $tag;
 function __construct($tag) {
  $this->tag=$tag;
  echo "<$this->tag>";
 }
 function __destruct() {
  echo "</$this->tag>";
 }
}

?>

------------------------------------------------------------------------
[2019-01-10 23:06:41] maju at 10g dot pl

It would be nice if we could have a similar 'using(...){..}' keyword which would allow to
control the scope of code block and force the disposal of the object/resource.

------------------------------------------------------------------------
[2009-05-18 22:13:11] av3ng3r at gmail dot com

I know that's a solution to cope with this. However code-wise it will be cleaner to let only
live the reader variable of a certain scope.

------------------------------------------------------------------------
[2009-05-18 12:25:35] a at b dot c dot de

Your example would be handled by

$reader = new StreamReader($stream);
$reader->write('blahblahblah');
$reader = null; // $reader->__destruct() called

Objects and values are destroyed as soon as the last reference to them goes away. Remove those
references, destroy the object.


$start = microtime(true);

class foo{
	private $name;
function __construct($name) {
	$this->name = $name;
}
function __destruct() {
	echo $this->name." Destroyed at ".(microtime(true)-$GLOBALS['start'])."
seconds\n";
}

}

$t1 = new foo('t1');
$t2 = new foo('t2');
$t3 = new foo('t3');

echo "Set \$t1 to null at ".(microtime(true)-$start)." seconds\n";
$t1 = null;
echo "Sleep 5 seconds\n";
sleep(5);
echo "Replace \$t2 with \$t3 at ".(microtime(true)-$start)." seconds\n";
$t2 = $t3;
echo "Sleep 5 seconds\n";
sleep(5);

------------------------------------------------------------------------
[2009-05-17 16:50:23] av3ng3r at gmail dot com

Description:
------------
An implementation like C# ( http://www.coderjournal.com/2007/02/proper-use-idisposable/
) would be appreciated:

using(StreamReader reader = new StreamReader(stream))
{
   reader.write('blalblabab');
}

The class StreamReader implements an interface IDisposable, by implementing this interface (creating
a function in the class called; Dispose) the user can use the statement using to
control the disposal of the object manually instead of waiting of the garbage collection of PHP.

This would be usefull for controling database connections, socket connections, simplexml?, etc.



------------------------------------------------------------------------



--
Edit this bug report at https://bugs.php.net/bug.php?id=48311&edit=1


Thread (6 messages)

« previous php.bugs (#231678) next »