rfc:instance_counter
Differences
This shows you the differences between two versions of the page.
Both sides previous revisionPrevious revisionNext revision | Previous revision | ||
rfc:instance_counter [2013/04/08 16:02] – [Open Issues] No discussion on reflection frank | rfc:instance_counter [2017/09/22 13:28] (current) – external edit 127.0.0.1 | ||
---|---|---|---|
Line 1: | Line 1: | ||
====== PHP RFC: instance counter ====== | ====== PHP RFC: instance counter ====== | ||
- | * Version: 0.1 | + | * Version: 0.4 |
* Date: 2013-04-08 | * Date: 2013-04-08 | ||
* Author: Frank Liepert, contact@frank-liepert.de | * Author: Frank Liepert, contact@frank-liepert.de | ||
* Contributor: | * Contributor: | ||
- | * Status: | + | * Status: |
* First Published at: http:// | * First Published at: http:// | ||
Line 12: | Line 12: | ||
Coming to Object-Orientated Programming, | Coming to Object-Orientated Programming, | ||
- | 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. | + | 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 not only sounds, but actually is cumbersome. The purpose of this RFC is to address this issue. |
===== Proposal ===== | ===== Proposal ===== | ||
- | The proposal is to add a new function returning an array ('name of the class' => number of instances) in the current script. | + | The proposal is to add a new functionality dealing with the number of instances |
- | The function name should fit in with the current names of class/ | + | The function name should fit in with the current names of class/ |
- | Example #1: | + | * **If no argument is provided, the number of all objects in the object store as an associative array (' |
<code php> | <code php> | ||
print_r (get_objects_count()); | print_r (get_objects_count()); | ||
Line 46: | Line 46: | ||
</ | </ | ||
- | ==== Use cases: ==== | + | * **If a class name is provided, the number of objects of the specified class in the object store will be returned.** |
+ | <code php> | ||
+ | print get_objects_count(' | ||
+ | // 0 | ||
+ | |||
+ | $foo = new stdClass; | ||
+ | |||
+ | print get_objects_count(' | ||
+ | // 1 | ||
+ | |||
+ | $bar = new stdClass; | ||
+ | |||
+ | print get_objects_count(' | ||
+ | // 2 | ||
+ | |||
+ | $bar = null; | ||
+ | |||
+ | print get_objects_count(' | ||
+ | // 1 | ||
+ | |||
+ | $foo = null; | ||
+ | |||
+ | print get_objects_count(' | ||
+ | // 0 | ||
+ | </ | ||
+ | |||
+ | * **If an object is provided, the number of objects of the specifiied objects class in the object store will be returned. The return value is always ≥ 1.** | ||
+ | <code php> | ||
+ | $foo = new stdClass; | ||
+ | |||
+ | print get_objects_count($foo); | ||
+ | // 1 | ||
+ | |||
+ | $bar = new stdClass; | ||
+ | |||
+ | print get_objects_count($bar); | ||
+ | // 2 | ||
+ | |||
+ | $bar = null; | ||
+ | |||
+ | print get_objects_count($foo); | ||
+ | // 1 | ||
+ | </ | ||
+ | |||
+ | * **If an an array is provided, it will be the treated as an inclusive indexed array of class names. An associative array (' | ||
+ | <code php> | ||
+ | print_r (get_objects_count(array(' | ||
+ | // Array ( [stdClass] => 0 ) | ||
+ | |||
+ | $foo = new stdClass; | ||
+ | |||
+ | print_r (get_objects_count(array(' | ||
+ | // Array ( [stdClass] => 1 ) | ||
+ | |||
+ | $bar = new stdClass; | ||
+ | |||
+ | print_r (get_objects_count(array(' | ||
+ | // Array ( [stdClass] => 2 ) | ||
+ | |||
+ | $bar = null; | ||
+ | |||
+ | print_r (get_objects_count(array(' | ||
+ | // Array ( [stdClass] => 1 ) | ||
+ | |||
+ | $foo = null; | ||
+ | |||
+ | print_r (get_objects_count(array(' | ||
+ | // Array ( [stdClass] => 0 ) | ||
+ | </ | ||
+ | |||
+ | ===== General questions & answers ===== | ||
+ | |||
+ | ==== Inheritance ==== | ||
+ | |||
+ | On internals list there was the question, if only the " | ||
+ | <code php> | ||
+ | class A {} | ||
+ | class B extends A {} | ||
+ | |||
+ | print get_objects_count(' | ||
+ | // 0 | ||
+ | |||
+ | $b = new B; | ||
+ | |||
+ | var_dump($b instanceof A); | ||
+ | // bool(true) | ||
+ | |||
+ | print get_objects_count(' | ||
+ | // 0 | ||
+ | |||
+ | print get_objects_count(' | ||
+ | // 1 | ||
+ | </ | ||
+ | |||
+ | ===== Use cases: | ||
* Debugging | * Debugging | ||
* Implementation of design patterns (f.ex. flyweight pattern) | * Implementation of design patterns (f.ex. flyweight pattern) | ||
* Extended control: limit the number of objects | * Extended control: limit the number of objects | ||
+ | * Teach people about assignment of objects | ||
* to be continued... | * to be continued... | ||
===== Function name ===== | ===== Function name ===== | ||
- | Further suggestions for the function name in example #1: | + | Since there were no objections against |
< | < | ||
- | // Proposed | + | // Proposed |
get_objects_count() | get_objects_count() | ||
Line 93: | Line 188: | ||
===== Open Issues ===== | ===== Open Issues ===== | ||
- | * Decision on function name. | + | None. |
===== Patches and Tests ===== | ===== Patches and Tests ===== | ||
- | A first implementation: https:// | + | Implementation: https:// |
Tests need to be done. | Tests need to be done. | ||
Line 109: | Line 204: | ||
- None. | - None. | ||
+ | |||
+ | ===== Vote ===== | ||
+ | <doodle title=" | ||
+ | * Yes | ||
+ | * No | ||
+ | </ | ||
+ | | ||
+ | ==== Voting period ==== | ||
+ | Start: **2013/ | ||
+ | |||
+ | End: **2013/ |
rfc/instance_counter.txt · Last modified: 2017/09/22 13:28 by 127.0.0.1