Edit report at http://bugs.php.net/bug.php?id=52318&edit=1
ID: 52318 Comment by: brendel at krumedia dot de Reported by: brendel at krumedia dot de Summary: Weak references for PHP Status: Open Type: Feature/Change Request Package: Scripting Engine problem PHP Version: Irrelevant Block user comment: N New Comment: bastard dot internets at gmail dot com, for framework developers this would be very useful. It just means, when the user of the framework no longer use a certain object the framework also should not longer waste memory. There are no pitfalls for the user. But the framework is more flexible. Previous Comments: ------------------------------------------------------------------------ [2010-08-09 08:57:46] bastard dot internets at gmail dot com brendel at krumedia dot de - Good call: "$user now contains a new user object" When looking at it from a security perspective, I do believe you just killed all my arguments against. Not because you've proven it impossible, but because unless the developer explicitly wants that functionality, their code will have a thousand holes. ------------------------------------------------------------------------ [2010-08-09 08:21:48] brendel at krumedia dot de Hi bastard dot internets at gmail dot com, see how variable references are no solution: <?php $repository = new SplWeakArrayValues(); $user = $dbTable->getUserById(1); $repository[$user->id] = $user; // Now two variables hold object references to one user object $user = new User(); // $user now contains a new user object and the old one should have // been removed from the repository. This time i do not assign null // but another (transient) user object. // count($repository) should equal 0. ?> ------------------------------------------------------------------------ [2010-08-09 08:08:26] bastard dot internets at gmail dot com brendel at krumedia dot de - You got me at "Also count($repository) should equal 0" As I said earlier, "Registry::$Collection[$a->id] = null;" will set all variables referring to this object handle to null globally. However, count(Registry::$Collection) is still 1. I'd still argue this is possible using existing language features. However, it means juggling so many references, forced implementing spaghetti code to get a solution, and a single missing "&" symbol anywhere leading to hours of debugging. And, I just found myself needing just such a solution. So, I'd have to vote for a built-in interface or class like you describe. ------------------------------------------------------------------------ [2010-08-03 16:43:39] brendel at krumedia dot de Sample code use case: <?php $repository = new SplWeakArrayValues(); // assume it implements // ArrayAccess and others $user = $this->userObjectFromSomewhere(); $repository[$user->id] = $user; // Now two variables hold object references to one user object $user = null; // Since $repository is weak, the destructor of the class of $user should have been called now // Also count($repository) should equal 0 ?> ------------------------------------------------------------------------ [2010-08-03 16:32:36] brendel at krumedia dot de bastard dot internets at gmail dot com, please see the constructor parameter "weakKeys" of http://livedocs.adobe.com/flex/3/langref/flash/utils/Dictionary.html to get an idea. This is not about variable references. ------------------------------------------------------------------------ The remainder of the comments for this report are too long. To view the rest of the comments, please view the bug report online at http://bugs.php.net/bug.php?id=52318 -- Edit this bug report at http://bugs.php.net/bug.php?id=52318&edit=1