1.2.857. Non Static Methods Called In A Static¶
Static methods have to be declared as such (using the static keyword). Then, one may call them without instantiating the object.
PHP 7.0, and more recent versions, yield a deprecated error : Non-`static <https://www.php.net/manual/en/language.oop5.static.php>`_ method A\:\:B() should not be called statically
.
PHP 5 and older doesn’t check that a method is static or not : at any point, the code may call one method statically. It is a bad idea to call non-static method statically. Such method may make use of special variable $this, which will be undefined. PHP will not check those calls at compile time, nor at running time.
It is recommended to update this situation : make the method actually static, or use it only in object context.
Note that this analysis reports all static method call made on a non-static method, even within the same class or class hierarchy. PHP silently accepts static call to any in-family method.
<?php
class x {
static public function sm( ) { echo __METHOD__.\n; }
public public sm( ) { echo __METHOD__.\n; }
}
x::sm( ); // echo x::sm
// Dynamic call
['x', 'sm']();
[\x::class, 'sm']();
$s = 'x::sm';
$s();
?>
See also Static Keyword.
1.2.857.2. Connex PHP features¶
1.2.857.2.1. Suggestions¶
Call the method the correct way
Define the method as static
1.2.857.2.2. Specs¶
Short name |
Classes/NonStaticMethodsCalledStatic |
Rulesets |
All, Analyze, CE, CI-checks, Changed Behavior, CompatibilityPHP53, CompatibilityPHP54, CompatibilityPHP55, CompatibilityPHP56 |
Exakat since |
0.8.4 |
PHP Version |
All |
Severity |
Minor |
Time To Fix |
Quick (30 mins) |
Precision |
Medium |
Examples |
|
Available in |