En PHP, la pratique commune de la division entière est d'utiliser l'opérateur de division / puis de combiner plancher () , intVal () ou coulé pour obtenir le résultat entier. Cependant, cette approche n'est pas toujours optimale, surtout en ce qui concerne les performances et la lisibilité au code. La fonction intdiv () est conçue pour résoudre ces problèmes. Cet article explorera en profondeur l'utilisation d' IntDiv () et de ses techniques avancées pour vous aider à écrire un code PHP plus efficace et robuste.
IntDiv () est une fonction intégrée introduite depuis PHP 7 pour effectuer des résultats entiers de division entière et de retour. La syntaxe de base est la suivante:
<span><span><span class="hljs-title function_ invoke__">intdiv</span></span><span>(</span><span><span class="hljs-keyword">int</span></span><span> </span><span><span class="hljs-variable">$dividend</span></span><span>, </span><span><span class="hljs-keyword">int</span></span><span> </span><span><span class="hljs-variable">$divisor</span></span><span>): </span><span><span class="hljs-keyword">int</span></span><span>
</span></span>
Contrairement à la division traditionnelle, IntDiv () rejetera directement la partie décimale au lieu de l'arrondir. Cela signifie qu'il se comporte plus près de l'opération de diviseur dans les langues de bas niveau.
<span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-title function_ invoke__">intdiv</span></span><span>(</span><span><span class="hljs-number">10</span></span><span>, </span><span><span class="hljs-number">3</span></span><span>); </span><span><span class="hljs-comment">// Sortir 3</span></span><span>
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-title function_ invoke__">intdiv</span></span><span>(-</span><span><span class="hljs-number">10</span></span><span>, </span><span><span class="hljs-number">3</span></span><span>); </span><span><span class="hljs-comment">// Sortir -3</span></span><span>
</span></span>
Ceci est plus explicite et performant qu'intval (10/3) , et évite également les calculs de points flottants inutiles.
Comparé à l'utilisation de la division puis à la conversion en entiers, IntDiv () effectue directement des opérations de diviseur en bas, en évitant les frais généraux des nombres à virgule flottante participant aux calculs, en particulier à des boucles à grande échelle ou au traitement des données par lots, qui présente des avantages évidents.
<span><span><span class="hljs-keyword">for</span></span><span> (</span><span><span class="hljs-variable">$i</span></span><span> = </span><span><span class="hljs-number">0</span></span><span>; </span><span><span class="hljs-variable">$i</span></span><span> < </span><span><span class="hljs-number">1000000</span></span><span>; </span><span><span class="hljs-variable">$i</span></span><span>++) {
</span><span><span class="hljs-variable">$a</span></span><span> = </span><span><span class="hljs-title function_ invoke__">intdiv</span></span><span>(</span><span><span class="hljs-variable">$i</span></span><span>, </span><span><span class="hljs-number">3</span></span><span>); </span><span><span class="hljs-comment">// Apparemment plus rapide que intval($i / 3)</span></span><span>
}
</span></span>
Intdiv () exprime clairement l'intention de "nous ne nous soucions que de la divisibilité". Le code est plus lisible et est particulièrement important pour le travail d'équipe.
Intdiv () suit également le comportement de l'arrondi à zéro pour les nombres négatifs (cohérents avec C), ce qui est plus cohérent que l'utilisation de plancher () ou rond () , et peut éviter les erreurs logiques cachées.
Lors de la mise en œuvre de la logique de pagination, il est souvent nécessaire de calculer le nombre actuel de pages ou de décalages:
<span><span><span class="hljs-variable">$page</span></span><span> = </span><span><span class="hljs-title function_ invoke__">intdiv</span></span><span>(</span><span><span class="hljs-variable">$offset</span></span><span>, </span><span><span class="hljs-variable">$limit</span></span><span>) + </span><span><span class="hljs-number">1</span></span><span>;
</span></span>
Plus précis et lisible que le traditionnel (int) ($ offset / $ limite) + 1 .
Dans certains algorithmes, tels que la simulation de l'opération de bit, IntDiv () peut remplacer en toute sécurité le fonctionnement de SHIFT à droite de >> , en particulier en ce qui concerne le traitement des symboles.
<span><span><span class="hljs-comment">// Équivalent à diviser par 2 Le gros</span></span><span>
</span><span><span class="hljs-variable">$half</span></span><span> = </span><span><span class="hljs-title function_ invoke__">intdiv</span></span><span>(</span><span><span class="hljs-variable">$value</span></span><span>, </span><span><span class="hljs-number">2</span></span><span>);
</span></span>
Lors de l'exécution de l'opération de récupération du moule, si le quotient et le reste sont nécessaires, intdiv () et % sont des partenaires naturels:
<span><span><span class="hljs-variable">$quotient</span></span><span> = </span><span><span class="hljs-title function_ invoke__">intdiv</span></span><span>(</span><span><span class="hljs-variable">$value</span></span><span>, </span><span><span class="hljs-variable">$chunkSize</span></span><span>);
</span><span><span class="hljs-variable">$remainder</span></span><span> = </span><span><span class="hljs-variable">$value</span></span><span> % </span><span><span class="hljs-variable">$chunkSize</span></span><span>;
</span></span>
Cette combinaison est extrêmement courante dans la gestion des téléchargements par lots, le chargement de la pagination, le groupe de fichiers et d'autres scénarios.
IntDiv () accepte uniquement les paramètres entiers, et le passage des numéros de points flottants lancera une énergie type .
Le diviseur ne peut pas être 0, sinon la divisionByzeroError sera lancée.
Si vous n'êtes pas sûr du type de variable, il est recommandé d'effectuer une vérification de type ou une conversion explicite avant utilisation.
Intdiv () est une fonction souvent négligée mais très puissante. Il améliore non seulement l'efficacité du code, mais améliore également la clarté sémantique. Que ce soit dans les boucles critiques de performance ou dans la logique métier qui nécessite une division entière précise, IntDiv () est un outil digne de confiance. La maîtriser sera une étape importante pour vous de vous déplacer vers des développeurs PHP avancés.