minor optimization
authorgggeek <giunta.gaetano@gmail.com>
Thu, 2 Feb 2023 08:37:03 +0000 (08:37 +0000)
committergggeek <giunta.gaetano@gmail.com>
Thu, 2 Feb 2023 08:37:03 +0000 (08:37 +0000)
src/Value.php

index 5d13ea1..3cb9c45 100644 (file)
@@ -257,29 +257,27 @@ class Value implements \Countable, \IteratorAggregate, \ArrayAccess
     {
         $this->logDeprecationUnlessCalledBy('serialize');
 
-        $rs = '';
-
         if (!isset(static::$xmlrpcTypes[$typ])) {
-            return $rs;
+            return '';
         }
 
         switch (static::$xmlrpcTypes[$typ]) {
             case 1:
                 switch ($typ) {
                     case static::$xmlrpcBase64:
-                        $rs .= "<{$typ}>" . base64_encode($val) . "</{$typ}>";
+                        $rs = "<{$typ}>" . base64_encode($val) . "</{$typ}>";
                         break;
                     case static::$xmlrpcBoolean:
-                        $rs .= "<{$typ}>" . ($val ? '1' : '0') . "</{$typ}>";
+                        $rs = "<{$typ}>" . ($val ? '1' : '0') . "</{$typ}>";
                         break;
                     case static::$xmlrpcString:
                         // Do NOT use htmlentities, since it will produce named html entities, which are invalid xml
-                        $rs .= "<{$typ}>" . $this->getCharsetEncoder()->encodeEntities($val, PhpXmlRpc::$xmlrpc_internalencoding, $charsetEncoding) . "</{$typ}>";
+                        $rs = "<{$typ}>" . $this->getCharsetEncoder()->encodeEntities($val, PhpXmlRpc::$xmlrpc_internalencoding, $charsetEncoding) . "</{$typ}>";
                         break;
                     case static::$xmlrpcInt:
                     case static::$xmlrpcI4:
                     case static::$xmlrpcI8:
-                        $rs .= "<{$typ}>" . (int)$val . "</{$typ}>";
+                        $rs = "<{$typ}>" . (int)$val . "</{$typ}>";
                         break;
                     case static::$xmlrpcDouble:
                         // avoid using standard conversion of float to string because it is locale-dependent,
@@ -287,46 +285,45 @@ class Value implements \Countable, \IteratorAggregate, \ArrayAccess
                         // sprintf('%F') could be most likely ok, but it fails e.g. on 2e-14.
                         // The code below tries its best at keeping max precision while avoiding exp notation,
                         // but there is of course no limit in the number of decimal places to be used...
-                        $rs .= "<{$typ}>" . preg_replace('/\\.?0+$/', '', number_format((double)$val, PhpXmlRpc::$xmlpc_double_precision, '.', '')) . "</{$typ}>";
+                        $rs = "<{$typ}>" . preg_replace('/\\.?0+$/', '', number_format((double)$val, PhpXmlRpc::$xmlpc_double_precision, '.', '')) . "</{$typ}>";
                         break;
                     case static::$xmlrpcDateTime:
                         if (is_string($val)) {
-                            $rs .= "<{$typ}>{$val}</{$typ}>";
+                            $rs = "<{$typ}>{$val}</{$typ}>";
                         // DateTimeInterface is not present in php 5.4...
                         } elseif (is_a($val, 'DateTimeInterface') || is_a($val, 'DateTime')) {
-                            $rs .= "<{$typ}>" . $val->format('Ymd\TH:i:s') . "</{$typ}>";
+                            $rs = "<{$typ}>" . $val->format('Ymd\TH:i:s') . "</{$typ}>";
                         } elseif (is_int($val)) {
-                            $rs .= "<{$typ}>" . date('Ymd\TH:i:s', $val) . "</{$typ}>";
+                            $rs = "<{$typ}>" . date('Ymd\TH:i:s', $val) . "</{$typ}>";
                         } else {
                             // not really a good idea here: but what should we output anyway? left for backward compat...
-                            $rs .= "<{$typ}>{$val}</{$typ}>";
+                            $rs = "<{$typ}>{$val}</{$typ}>";
                         }
                         break;
                     case static::$xmlrpcNull:
                         if (PhpXmlRpc::$xmlrpc_null_apache_encoding) {
-                            $rs .= "<ex:nil/>";
+                            $rs = "<ex:nil/>";
                         } else {
-                            $rs .= "<nil/>";
+                            $rs = "<nil/>";
                         }
                         break;
                     default:
                         // no standard type value should arrive here, but provide a possibility
                         // for xml-rpc values of unknown type...
-                        $rs .= "<{$typ}>{$val}</{$typ}>";
+                        $rs = "<{$typ}>{$val}</{$typ}>";
                 }
                 break;
             case 3:
                 // struct
                 if ($this->_php_class) {
-                    $rs .= '<struct php_class="' . $this->_php_class . "\">\n";
+                    $rs = '<struct php_class="' . $this->_php_class . "\">\n";
                 } else {
-                    $rs .= "<struct>\n";
+                    $rs = "<struct>\n";
                 }
                 $charsetEncoder = $this->getCharsetEncoder();
                 /** @var Value $val2 */
                 foreach ($val as $key2 => $val2) {
                     $rs .= '<member><name>' . $charsetEncoder->encodeEntities($key2, PhpXmlRpc::$xmlrpc_internalencoding, $charsetEncoding) . "</name>\n";
-                    //$rs.=$this->serializeval($val2);
                     $rs .= $val2->serialize($charsetEncoding);
                     $rs .= "</member>\n";
                 }
@@ -334,15 +331,16 @@ class Value implements \Countable, \IteratorAggregate, \ArrayAccess
                 break;
             case 2:
                 // array
-                $rs .= "<array>\n<data>\n";
+                $rs = "<array>\n<data>\n";
                 /** @var Value $element */
                 foreach ($val as $element) {
-                    //$rs.=$this->serializeval($val[$i]);
                     $rs .= $element->serialize($charsetEncoding);
                 }
                 $rs .= "</data>\n</array>";
                 break;
             default:
+                /// @todo log a warning?
+                $rs = '';
                 break;
         }