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

Reply via email to