Late Static Binding (see Task #3078).¶
List of methods on which we would like to change to static¶
CommonDBTM::getTable()¶
I don't think possible to change this method to static: it relies on local variable ($this->table) that can be dynamically changed by forceTable (for instance by Computer_Device).
Update : actually, only few elements use forceTable : Computer_Device and rules children.
For rules children, if we replace by a local getTable method we should not need the forceTable method.
From the Computer_Device, it seems more complicated. But I suggest to implement Computer_DeviceProcessor, Computer_DeviceMemory, etc classes that inherits from Common_Device. Besides that, we will be able to add more specific fields for each junction. Moreover, we should also inherit Common_Device from CommonDBRelation. Thus, we will be able to use its new can* and post_*Item methods.
MoYo : it was the idea. Device management could be completely rewritten and create these classes is the first step.
The patch below (getTable.static.diff) show a possible implementation of such thing. Computer_Device* are not created but can be very small if they inherits from Common_Device.
CommonDBTM::getIndexName()¶
I think it is possible to change it (cf. task #3811).
CommonDBTM::can*()¶
CommonDBTM::canCreate(), CommonDBTM::canView(), CommonDBTM::canUpdate() and CommonDBTM::canDelete() can be transform to static. But, some adaptation should be done (see task #3806).