<?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 => 'ja',
  ),
  'this' => 
  array (
    0 => 'functions.internal.php',
    1 => '内部（ビルトイン）関数',
    2 => '内部（ビルトイン）関数',
  ),
  'up' => 
  array (
    0 => 'language.functions.php',
    1 => '関数',
  ),
  'prev' => 
  array (
    0 => 'functions.variable-functions.php',
    1 => '可変関数',
  ),
  'next' => 
  array (
    0 => 'functions.anonymous.php',
    1 => '無名関数',
  ),
  'alternatives' => 
  array (
  ),
  'source' => 
  array (
    'lang' => 'ja',
    '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">内部（ビルトイン）関数</h2>
   
   <p class="para">
    PHPは標準で多くの関数と言語構造を持っています。また他にも
    コンパイル済みの特定のPHP拡張モジュールを必要とする関数があります。
    それらはもしコンパイルされていなければ&quot;undefined function（未定義の関数）&quot;
    として致命的エラーを発するでしょう。例えば、
    <span class="function"><a href="function.imagecreatetruecolor.php" class="function">imagecreatetruecolor()</a></span>のような
    <a href="ref.image.php" class="link">画像</a>関数を使用するには、
    <span class="productname">GD</span>サポートを有効にしてPHPをコンパイルしておく必要があります。
    また、<span class="function"><a href="function.mysqli-connect.php" class="function">mysqli_connect()</a></span>を使う場合もやはり
    <a href="ref.mysql.php" class="link">MySQL</a>サポートを有効にしてPHPが
    コンパイルされている必要があります。
    <a href="ref.strings.php" class="link">string</a>や
    <a href="ref.var.php" class="link">variable</a>関数のように
    どのバージョンのPHPでも含まれているコアの関数もたくさんあります。
    <span class="function"><a href="function.phpinfo.php" class="function">phpinfo()</a></span>や<span class="function"><a href="function.get-loaded-extensions.php" class="function">get_loaded_extensions()</a></span>を
    コールすることで使用しているPHPにロードされている拡張モジュールを
    見ることができます。また、多くの拡張モジュールはデフォルトで有効に
    なっており、PHPのマニュアルは拡張モジュール毎に分けられていることにも
    注意してください。PHPのセットアップについては
    <a href="configuration.php" class="link">設定</a>,  
    <a href="install.php" class="link">インストール</a>,そして個々の拡張モジュール
    の項をご覧ください。
   </p>
   <p class="para">
    関数のプロトタイプに関する解説はマニュアルの
    <a href="about.prototypes.php" class="link">関数の定義を読むには</a>を
    参照ください。関数の戻り値や引数が直接与えられた場合に
    どのように動くかを認識することは重要です。
    例えば、<span class="function"><a href="function.str-replace.php" class="function">str_replace()</a></span>は変更された文字列を
    返すのに対し、<span class="function"><a href="function.usort.php" class="function">usort()</a></span>は与えられた引数そのものを
    変更します。マニュアルの各項にはそれぞれの関数に関する情報があります。
    関数のパラメータ、振る舞いの変更、成功した場合失敗した場合の
    それぞれの戻り値、可用性に関する情報などです。
    これらの重要な（時には微妙な）違いを知ることは、
    正しいPHPコードを書くうえで極めて重要なことです。
   </p>
   <blockquote class="note"><p><strong class="note">注意</strong>: 
    <span class="simpara">
     関数へのパラメータとして関数が想定しているのとは異なるものを渡した場合、
     例えば文字列を想定しているところに配列を渡した場合などの場合は
     関数の戻り値は未定義となります。たいていの場合は
     <strong><code><a href="reserved.constants.php#constant.null">null</a></code></strong> を返すでしょう。しかしこれはあくまでも規約にすぎず、
     これに依存することはできません。
     PHP 8.0.0 以降では、このような場合には <span class="classname"><a href="class.typeerror.php" class="classname">TypeError</a></span> をスローすることになっています。
    </span>
   </p></blockquote>
   <blockquote class="note"><p><strong class="note">注意</strong>: 
    <p class="para">
     ビルトイン関数のスカラー型の引数には、
     デフォルトの自動変換(coercive)モードの場合、
     null を渡すことが出来ます。
     PHP 8.1.0 以降では、
     nullable として宣言されていない内部関数のパラメータに <strong><code><a href="reserved.constants.php#constant.null">null</a></code></strong> を渡すことは推奨されなくなり、
     自動変換モードでは警告が発生するようになっています。
     ユーザ定義の関数においては、スカラー型の引数は nullable と明示的にマークする必要があり、その振る舞いと合わせるためです。
    </p>

    <p class="para">
     たとえば、<span class="function"><a href="function.strlen.php" class="function">strlen()</a></span>
     関数はパラメータ <code class="literal">$string</code>
     に null でない文字列を渡すことを期待しています。
     歴史的な理由により、
     PHP は自動変換モードの場合に、
     このパラメータに <strong><code><a href="reserved.constants.php#constant.null">null</a></code></strong> を渡すことを許可してきました。
     結果として、引数に <strong><code><a href="reserved.constants.php#constant.null">null</a></code></strong>
     を渡すと暗黙のうちに文字列にキャストされ、
     結果は空文字列 <code class="literal">&quot;&quot;</code> になっていました。
     これに対し、strict モードの場合は <span class="classname"><a href="class.typeerror.php" class="classname">TypeError</a></span>
     がスローされます。
    </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">参考</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">関数リファレンス</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); ?>