<?php
include_once $_SERVER['DOCUMENT_ROOT'] . '/include/shared-manual.inc';
$TOC = array();
$TOC_DEPRECATED = array();
$PARENTS = array();
include_once dirname(__FILE__) ."/toc/language.functions.inc";
$setup = array (
  'home' => 
  array (
    0 => 'index.php',
    1 => 'PHP Manual',
  ),
  'head' => 
  array (
    0 => 'UTF-8',
    1 => 'fr',
  ),
  'this' => 
  array (
    0 => 'functions.internal.php',
    1 => 'Fonctions internes',
    2 => 'Fonctions internes',
  ),
  'up' => 
  array (
    0 => 'language.functions.php',
    1 => 'Les fonctions',
  ),
  'prev' => 
  array (
    0 => 'functions.variable-functions.php',
    1 => 'Fonctions variables',
  ),
  'next' => 
  array (
    0 => 'functions.anonymous.php',
    1 => 'Fonctions anonymes',
  ),
  'alternatives' => 
  array (
  ),
  'source' => 
  array (
    'lang' => 'fr',
    'path' => 'language/functions.xml',
  ),
  'history' => 
  array (
  ),
);
$setup["toc"] = $TOC;
$setup["toc_deprecated"] = $TOC_DEPRECATED;
$setup["parents"] = $PARENTS;
manual_setup($setup);

contributors($setup);

?>
<div id="functions.internal" class="sect1">
  <h2 class="title">Fonctions internes</h2>
  
  <p class="para">
   PHP dispose de nombreuses fonctions et structures standards. Il y a aussi
   des fonctions qui requièrent des extensions spécifiques de PHP, sans
   lesquelles l&#039;erreur fatale
   <code class="literal">undefined function</code> sera obtenue. Par exemple, pour utiliser les
   fonctions  <a href="ref.image.php" class="link">d&#039;images</a>,
   telles que <span class="function"><a href="function.imagecreatetruecolor.php" class="function">imagecreatetruecolor()</a></span>, le
   support de <span class="productname">GD</span> dans PHP est nécessaire. Ou bien, pour utiliser
   <span class="function"><a href="function.mysqli-connect.php" class="function">mysqli_connect()</a></span>, l&#039;extension
   <a href="book.mysqli.php" class="link">MySQLi</a> est requise. Il y a des fonctions de base qui
   sont incluses dans toutes les versions de PHP, telles que les fonctions de
   <a href="ref.strings.php" class="link">chaînes de caractères</a> et les fonctions
   de <a href="ref.var.php" class="link">variables</a>. Utiliser
   <span class="function"><a href="function.phpinfo.php" class="function">phpinfo()</a></span> ou
   <span class="function"><a href="function.get-loaded-extensions.php" class="function">get_loaded_extensions()</a></span> pour savoir quelles sont les
   extensions qui sont compilées avec PHP. Il est à noter que de
   nombreuses extensions sont activées par défaut, et que le manuel PHP est
   compartimenté par extension. Voir les chapitres de
   <a href="configuration.php" class="link">configuration</a>,
   <a href="install.php" class="link">installation</a> ainsi que les
   détails particuliers à chaque extension, pour savoir comment les mettre en place.
  </p>
  <p class="para">
   Lire et comprendre le prototype d&#039;une fonction est décrit dans l&#039;annexe
   <a href="about.prototypes.php" class="link">Comment lire la définition d&#039;une
    fonction (prototype)</a>.
   Il est important de comprendre ce qu&#039;une fonction retourne, ou si une
   fonction travaille directement sur la valeur des paramètres fournis. Par
   exemple, <span class="function"><a href="function.str-replace.php" class="function">str_replace()</a></span> va retourner une chaîne modifiée,
   tandis que <span class="function"><a href="function.usort.php" class="function">usort()</a></span> travaille directement sur la variable
   passée en paramètre. Chaque page du manuel a des informations spécifiques
   sur chaque fonction, comme le nombre de paramètres, les évolutions de
   spécifications, les valeurs retournées en cas de succès ou d&#039;échec, et la
   disponibilité en fonction des versions. Bien connaître ces différences,
   parfois subtiles, est crucial pour bien programmer en PHP.
  </p>
  <blockquote class="note"><p><strong class="note">Note</strong>: 
   <span class="simpara">
    Si les paramètres donnés à une fonction ne sont pas corrects, comme le fait
    de passer un <a href="language.types.array.php" class="link">tableau</a> alors qu&#039;une <a href="language.types.string.php" class="link">chaîne de caractères</a> est attendue, la valeur retournée
    de la fonction est indéfinie. Dans ce cas, la fonction retournera la plupart
    du temps une valeur <strong><code><a href="reserved.constants.php#constant.null">null</a></code></strong> mais ce n&#039;est juste qu&#039;une convention et
    ne peut être considéré comme une certitude.
    À partir de PHP 8.0.0, une exception <span class="classname"><a href="class.typeerror.php" class="classname">TypeError</a></span>
    est normalement lancée dans ce cas.
   </span>
  </p></blockquote>
  <blockquote class="note"><p><strong class="note">Note</strong>: 
   <p class="para">
    En mode coercitif, les types scalaires des fonctions internes sont nullables par défaut.
    À partir de PHP 8.1.0, passer <strong><code><a href="reserved.constants.php#constant.null">null</a></code></strong> à un paramètre de fonction interne qui n&#039;est pas déclaré
    nullable est déconseillé et émet une notice de dépréciation en mode coercitif pour s&#039;aligner
    sur le comportement des fonctions définies par l&#039;utilisateur, où les types scalaires doivent
    être marqués comme nullables explicitement.
   </p>
   <p class="para">
    Par exemple, la fonction <span class="function"><a href="function.strlen.php" class="function">strlen()</a></span> attend que le paramètre <code class="literal">$string</code>
    soit de type <a href="language.types.string.php" class="link">chaîne de caractères</a> et non <strong><code><a href="reserved.constants.php#constant.null">null</a></code></strong>.
    Pour des raisons historiques, PHP autorise le passage de <strong><code><a href="reserved.constants.php#constant.null">null</a></code></strong> pour ce paramètre en mode coercitif.
    Le paramètre est alors implicitement converti en <span class="type"><a href="language.types.string.php" class="type string">string</a></span>, résultant en une valeur <code class="literal">&quot;&quot;</code>.
    En revanche, une <span class="classname"><a href="class.typeerror.php" class="classname">TypeError</a></span> est émise en mode strict.
   </p>
   <div class="informalexample">
    <div class="example-contents">
<div class="phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br />var_dump</span><span style="color: #007700">(</span><span style="color: #0000BB">strlen</span><span style="color: #007700">(</span><span style="color: #0000BB">null</span><span style="color: #007700">));<br /></span><span style="color: #FF8000">// "Deprecated: Passing null to parameter #1 ($string) of type string is deprecated" as of PHP 8.1.0<br />// int(0)<br /><br /></span><span style="color: #0000BB">var_dump</span><span style="color: #007700">(</span><span style="color: #0000BB">str_contains</span><span style="color: #007700">(</span><span style="color: #DD0000">"foobar"</span><span style="color: #007700">, </span><span style="color: #0000BB">null</span><span style="color: #007700">));<br /></span><span style="color: #FF8000">// "Deprecated: Passing null to parameter #2 ($needle) of type string is deprecated" as of PHP 8.1.0<br />// bool(true)<br /></span><span style="color: #0000BB">?&gt;</span></span></code></div>
     </div>

    </div>
   </p></blockquote>
  <div class="sect2">
   <h3 class="title">Voir aussi</h3>
   <p class="para">
    <ul class="simplelist">
     <li><span class="function"><a href="function.function-exists.php" class="function">function_exists()</a></span></li>
     <li><a href="funcref.php" class="link">l&#039;index des fonctions</a></li>
     <li><span class="function"><a href="function.get-extension-funcs.php" class="function">get_extension_funcs()</a></span></li>
     <li><span class="function"><a href="function.dl.php" class="function">dl()</a></span></li>
    </ul>
   </p>
  </div>
 </div><?php manual_footer($setup); ?>