|
php.net | support | documentation | report a bug | advanced search | search howto | statistics | random bug | login |
[2009-05-17 16:50 UTC] 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. PatchesPull RequestsHistoryAllCommentsChangesGit/SVN commits
|
|||||||||||||||||||||||||||||||||||||
Copyright © 2001-2025 The PHP GroupAll rights reserved. |
Last updated: Sun Oct 26 09:00:01 2025 UTC |
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);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.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>"; } } ?>> 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>