Req #57201 [Opn->Csd]: SplObject[Weak]Reference proposal
| From: | colder@php.net | Date: | Fri, 27 Jan 2012 15:23:25 +0000 |
| Subject: | Req #57201 [Opn->Csd]: SplObject[Weak]Reference proposal | ||
| References: | 1 | Groups: | php.bugs |
| Request: | Send a blank email to php-bugs+get-166858@lists.php.net to get a copy of this message | ||
Edit report at https://bugs.php.net/bug.php?id=57201&edit=1
ID: 57201
Updated by: colder@php.net
Reported by: wb at pro-net dot co dot uk
Summary: SplObject[Weak]Reference proposal
-Status: Open
+Status: Closed
Type: Feature/Change Request
-Package: SPL
+Package: *General Issues
Operating System: *
PHP Version: 5.*
-Assigned To: helly
+Assigned To: colder
Block user comment: N
Private report: N
New Comment:
Seems that what you are looking for is:
https://github.com/colder/php-weakref
Previous Comments:
------------------------------------------------------------------------
[2006-09-01 05:35:25] wb at pro-net dot co dot uk
Pardon my ignorance but I have no idea what you mean when you say JNI.
The main functionality I'm looking for is to simply (from a PHP point of view) be able to link
objects to /any/ existing object without having to do or worry about the following:
1. Amend the existing class declarations.
2. Having to manually implement some kind of 'garbage collection' when your holding
object is the only object left with references to the base objects. As far as I can see this can not
be done from within a php script.
Just thinking off the top of my head but this could probably be linked in with the recent __toHash()
debate on the internals list. If the __toHash() functionality was available along with an
object_hash_exists($hashString) function then the functionality could be implemented from within a
php script. You wouldn't have automatic GC but you could then provide a cleanUp() method that
you could call to check that the object hashes exist and then act accordingly. Also depending on how
the GC works internally you might also be able to provide a register_gc_function($callback) so that
the cleanUp() method get called whenever the PHP GC is actioned.
As for the example I posted, I was using stdClsss as a way to ensure that only objects are allowed
to be passed to the class methods. Off topic but is there a better way to do this or should I just
leave out the type hinting and do an is_object($foo) check within the method?
I have already created a php land class that extends SplObjectStorage that only works on given
classes or interfaces, however this does not help with the request in hand, although it is useful in
its own right.
------------------------------------------------------------------------
[2006-08-31 21:30:48] helly@php.net
Your weak reference sounds very much like JNI. In our case we could eventually do it but we pretty
much do not have something to hook into the garbage collection to get rid of otherwise no longer
used objects.
A question from my side is whether you want some template/generic solution here or something else.
In your example code you had stdClsss as base class but you must remember that not all PHP classes
derive from that class. Actually we have no common base class at all. Which basically brings us back
to the template/generic solution.
What we could do is provide a function that creates a class derived from SplObjectStorage that only
works on a given class or interface. Would that solve what you want?
------------------------------------------------------------------------
[2006-08-29 05:03:38] wb at pro-net dot co dot uk
Description:
------------
This is just a request for a new SPL class. Its similar to the SplObjectStorage class but allows
you to provide a base class to reference against.
The reasoning behind this is that you might have a situation where you want/need to assign other
objects to a specific object instance without having to amend any existing objects and without the
objects needing knowing about it.
An example could be a generic permission system where you have an object and using this new class
you assign a permission reference to it which you can then check at a later time.
Reproduce code:
---------------
Reference implementation and simple example available at...
http://wb.pro-net.co.uk/php/splobjectreference.phps
Expected result:
----------------
N/A
Actual result:
--------------
N/A
------------------------------------------------------------------------
--
Edit this bug report at https://bugs.php.net/bug.php?id=57201&edit=1