Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

__callStatic vs static function of PHP

Tags:

php

Is there are any performance difference between using PHP's magic function __callStatic and defining static function normally.

Example:

class Welcome{

 public static function __callStatic($method, $parameters){
   switch ($method) {
     case 'functionName1':
       // codes for functionName1 goes here
     break;
     case 'functionName2':
       // codes for functionName2 goes here
     break;
   }
 }

}

vs

class Welcome{

 public static function functionName1{
   //codes for functionName1 goes here
 }
 public static function functionName1{
   //codes for functionName1 goes here
 }

}
like image 981
ArioCC Avatar asked Jul 04 '26 11:07

ArioCC


1 Answers

If you're just talking about speed, this is easy enough to test:

class Testing
{
        private static $x = 0;

        public static function f1()
        {
                self::$x++;
        }
        public static function f2()
        {
                self::$x++;
        }
        public static function __callStatic($method, $params)
        {
                switch ($method) {
                        case 'f3':
                                self::$x++;
                                break;
                        case 'f4':
                                self::$x++;
                                break;
                }
        }
}

$start = microtime(true);
for ($i = 0; $i < 1000000; $i++) {
        Testing::f1();
        Testing::f2();
}
$totalForStaticMethods = microtime(true) - $start;

$start = microtime(true);
for ($i = 0; $i < 1000000; $i++) {
        Testing::f3();
        Testing::f4();
}
$totalForCallStatic = microtime(true) - $start;

printf(
    "static method: %.3f\n__callStatic: %.3f\n",
    $totalForStaticMethods,
    $totalForCallStatic
);

I get static method: 0.187 and __callStatic: 0.812, so defining actual methods is over 4 times faster.

I would also say that using __callStatic is bad style unless you have a good reason for it. It makes it harder to trace code, and IDEs have a harder time providing auto-complete features. That said, there are plenty of cases where it's worth it.

like image 191
Austin Avatar answered Jul 07 '26 00:07

Austin



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!