This is an old revision of the document!
PHP RFC: instance counter
- Version: 0.2
- Date: 2013-04-08
- Author: Frank Liepert, contact@frank-liepert.de
- Contributor: Joe Watkins
- Status: Under Discussion
- First Published at: http://wiki.php.net/rfc/instance_counter
Introduction
Coming to Object-Orientated Programming, PHP offers a variety of possibilities to obtain information about classes and their instances (objects). In this regard, the classes/objects functions (http://www.php.net/manual/en/ref.classobj.php) as well as the reflection API (http://www.php.net/manual/en/book.reflection.php) do a great job. But still there is no function to obtain a particular information: the number of instances of a class.
One might say, simply implement a static counter in each class. But what about built-in classes like SPL? A wrapper would be required. Implementing it these ways, it does not only sound, but it actually is cumbersome. The purpose of this RFC is to address this issue.
Proposal
The proposal is to add a new functionality dealing with the number of instances of either a specific class or all classes.
The function name should fit in with the current names of class/object functions. Therefore, the name get_objects_count() seems to be reasonable, but is still up for discussion (see Function name).
- If a class name is provided, the number of objects of the specified class in the object store will be returned.
- If no class name is provided, the number of all objects in the object store as an associative array ('class name' => count) will be returned.
Example #1:
print_r (get_objects_count()); // Array () print get_objects_count('stdClass'); // 0 $foo = new stdClass; print_r (get_objects_count()); // Array ( [stdClass] => 1 ) print get_objects_count('stdClass'); // 1 $bar = new stdClass; print_r (get_objects_count()); // Array ( [stdClass] => 2 ) print get_objects_count('stdClass'); // 2 $bar = null; print_r (get_objects_count()); // Array ( [stdClass] => 1 ) print get_objects_count('stdClass'); // 1 $foo = null; print_r (get_objects_count()); // Array () print get_objects_count('stdClass'); // 0
Use cases:
- Debugging
- Implementation of design patterns (f.ex. flyweight pattern)
- Extended control: limit the number of objects
- Teach people about assignment of objects
- to be continued...
Function name
Further suggestions for the function name in example #1:
// Proposed get_objects_count() // Alternatives get_instances_counts() get_instances_count() get_instance_counts() get_object_store_count() get_class_counts()
Backward Incompatible Changes
No BC breaks.
Proposed PHP Version(s)
next PHP 5.4.x or PHP 5.5.x
SAPIs Impacted
None.
Impact to Existing Extensions
None.
New Constants
None.
php.ini Defaults
None.
Open Issues
- Decision on function name.
Patches and Tests
Implementation: https://gist.github.com/krakjoe/5275773
Tests need to be done.
References
Rejected Features
- None.