Maison  >  Article  >  développement back-end  >  Explication détaillée de la comparaison entre la liaison statique retardée et l'efficacité statique ordinaire en PHP

Explication détaillée de la comparaison entre la liaison statique retardée et l'efficacité statique ordinaire en PHP

黄舟
黄舟original
2017-10-21 09:25:571383parcourir

Comparaison de la liaison retardée statique PHP et de l'efficacité statique ordinaire

C'est juste une expérience simple pour comparer l'efficacité de la liaison retardée et non retardée

La liaison paresseuse utilise principalement le mot-clé static pour remplacer le self d'origine, mais la fonction est très puissante

Code expérimental :


class A { 
  protected static $cc1 = array('a1', 'b', 'c', 'd'); 
  protected static $cc2 = array('a2', 'b', 'c', 'd'); 
  protected static $cc3 = array('a3', 'b', 'c', 'd'); 
  protected static $cc4 = array('a4', 'b', 'c', 'd'); 
  protected static $cc5 = array('a5', 'b', 'c', 'd'); 
 
  public static function n1() { 
    return static::$cc1; 
  } 
  public static function n2() { 
    return static::$cc2; 
  } 
  public static function n3() { 
    return static::$cc3; 
  } 
  public static function n4() { 
    return static::$cc4; 
  } 
  public static function n5() { 
    return static::$cc5; 
  } 
} 
 
class C extends A { 
 
} 
 
class B { 
  protected static $cc1 = array('a1', 'b', 'c', 'd'); 
  protected static $cc2 = array('a2', 'b', 'c', 'd'); 
  protected static $cc3 = array('a3', 'b', 'c', 'd'); 
  protected static $cc4 = array('a4', 'b', 'c', 'd'); 
  protected static $cc5 = array('a5', 'b', 'c', 'd'); 
 
  public static function n1() { 
    return self::$cc1; 
  } 
  public static function n2() { 
    return self::$cc2; 
  } 
  public static function n3() { 
    return self::$cc3; 
  } 
  public static function n4() { 
    return self::$cc4; 
  } 
  public static function n5() { 
    return self::$cc5; 
  } 
}

Il existe trois classes A, B et C ci-dessus, qui sont toutes des variables et méthodes membres statiques, parmi lesquelles

La classe A utilise un délai statique,
La classe B est sans délai,
La classe C hérite de la classe A et implémente la liaison retardée des variables et méthodes membres statiques.

Je ne dirai pas grand chose sur le processus. L'environnement est PHP5.4.27 Téléchargez directement les résultats du test :

Il y a deux situations,

1. . Lorsqu'il n'y a que les classes A et B (c'est-à-dire qu'aucune classe n'hérite de la classe A), il n'y a presque aucune différence d'efficacité

2 Lorsque la classe A est héritée par la classe C, les performances de la classe A en utilisant la liaison statique retardée Ce sera légèrement pire que la classe B (tant que la classe A a hérité des classes, elle sera plus lente)

Boucles 100 000 fois et la différence de temps entre 2,8 s ~ 3,2 s correspond à environ 0,3 seconde. Cela devrait toujours être négligeable

Remarque supplémentaire : Plus tard, j'ai ajouté quelques méthodes de test si la classe C hérite de la classe A et surcharge certaines des variables membres statiques de la classe. A, recharger Plus il y a de charges, plus la vitesse sera proche de la classe B (non retardée), mais la vitesse de la classe A sera toujours plus lente que celle de la classe B et de la classe C

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn