1.2.331. Deep Definitions¶
Structures, such as functions, classes, interfaces, traits, enum, etc. may be defined anywhere in the code, including inside functions. This is legit code for PHP.
Since the availability of autoload, with spl_register_autoload(), there is no need for that kind of code. Structures should be defined, and accessible to the autoloading. Inclusions and deep definitions should be avoided, as they compel code to load some definitions, while autoloading will only load them if needed. Functions are excluded from autoload, but shall be gathered in libraries, and not hidden inside other code.
Constants definitions are tolerated inside functions : they may be used for avoiding repeat, or noting the usage of such function.
Definitions inside a if/then statement, that include PHP version check are accepted here.
<?php
class X {
function init() {
// myFunction is defined when and only if X::init() is called.
if (!function_exists('myFunction'){
function myFunction($a) {
return $a + 1;
}
})
}
}
?>
See also Autoloading Classes.
1.2.331.1. Connex PHP features¶
1.2.331.1.1. Suggestions¶
Move function definitions to the global space : outside structures, and method.
1.2.331.1.2. Specs¶
Short name |
Functions/DeepDefinitions |
Rulesets |
|
Exakat since |
0.8.4 |
PHP Version |
All |
Severity |
Major |
Time To Fix |
Slow (1 hour) |
Precision |
Very high |
Examples |
|
Available in |