現在の位置: ホーム> 最新記事一覧> function_existsを使用して組み込み関数とカスタム関数を区別する方法は?詳細な方法分析

function_existsを使用して組み込み関数とカスタム関数を区別する方法は?詳細な方法分析

gitbox 2025-08-26
<span><span><span class="hljs-meta"><?php</span></span><span>
</span><span><span class="hljs-comment">// コードのこの部分は、記事の内容とは何の関係もありません,いくつかのステートメントやコメントを配置できます</span></span><span>
</span><span><span class="hljs-comment">// たとえば、プログラム著者情報、タイムスタンプなど</span></span><span>
</span><span><span class="hljs-comment">// Author: ChatGPT</span></span><span>
</span><span><span class="hljs-comment">// Date: 2025-07-02</span></span><span>
</span><span><span class="hljs-meta">?></span></span><span>

<hr>

<h1>それを使用する方法function_exists関数組み込み関数とカスタム関数を区別します?詳細な方法分析</h1>

<p>存在するするPHP開発中,我们经常会遇到需要判断某个函数是否存存在するする的情况。PHP非常に実用的な機能が組み込まれています <code></span><span><span class="hljs-title function_ invoke__">function_exists</span></span><span>()

function_exists()を使用して関数の存在を決定する基本的な例

&lt;?php
</span><span><span class="hljs-keyword">if</span></span><span> (</span><span><span class="hljs-title function_ invoke__">function_exists</span></span><span>(</span><span><span class="hljs-string">'array_merge'</span></span><span>)) {
    </span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">'array_merge 函数存存在するする'</span></span><span>;
} </span><span><span class="hljs-keyword">else</span></span><span> {
    </span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">'array_merge 函数不存存在するする'</span></span><span>;
}
?&gt;

この例では、 array_mergeはPHPの組み込み関数であり、通常存在するように戻ります。

function_exists()を直接使用して組み込み関数とカスタム関数を区別できないのはなぜですか?

function_exists()は関数が存在するかどうかを検出できますが、関数がPHPに組み込まれているのかユーザー定義されているのかを知ることはできません。関数名が登録されているかどうかのみを気にします。

言い換えれば、 function_exists()は組み込み関数とカスタム関数に「等しく」、ソースとは区別されないかどうかを判断するだけです。

それでは、組み込み関数とカスタム関数を区別する方法は?

組み込み関数とカスタム関数を区別するために、 get_defined_functions()関数と組み合わせて使用​​できます。

この関数は、2つのキーを含む関連配列を返します。

  • 内部:すべての組み込み関数名配列
  • ユーザー:すべてのユーザー定義の関数名配列

サンプルコード:

 &lt;?php
</span><span><span class="hljs-variable">$allFunctions</span></span><span> = </span><span><span class="hljs-title function_ invoke__">get_defined_functions</span></span><span>();

</span><span><span class="hljs-variable">$functionName</span></span><span> = </span><span><span class="hljs-string">'array_merge'</span></span><span>;

</span><span><span class="hljs-keyword">if</span></span><span> (</span><span><span class="hljs-title function_ invoke__">function_exists</span></span><span>(</span><span><span class="hljs-variable">$functionName</span></span><span>)) {
    </span><span><span class="hljs-keyword">if</span></span><span> (</span><span><span class="hljs-title function_ invoke__">in_array</span></span><span>(</span><span><span class="hljs-variable">$functionName</span></span><span>, </span><span><span class="hljs-variable">$allFunctions</span></span><span>[</span><span><span class="hljs-string">'internal'</span></span><span>])) {
        </span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"<span class="hljs-subst">$functionName</span></span></span><span> 組み込み機能です";
    } </span><span><span class="hljs-keyword">elseif</span></span><span> (</span><span><span class="hljs-title function_ invoke__">in_array</span></span><span>(</span><span><span class="hljs-variable">$functionName</span></span><span>, </span><span><span class="hljs-variable">$allFunctions</span></span><span>[</span><span><span class="hljs-string">'user'</span></span><span>])) {
        </span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"<span class="hljs-subst">$functionName</span></span></span><span> カスタム関数です";
    } </span><span><span class="hljs-keyword">else</span></span><span> {
        </span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"<span class="hljs-subst">$functionName</span></span></span><span> 存存在するする,しかし、分類されていません";
    }
} </span><span><span class="hljs-keyword">else</span></span><span> {
    </span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"<span class="hljs-subst">$functionName</span></span></span><span> 不存存在するする";
}
?&gt;

完全な例:カスタム関数と組み込み関数の違い

&lt;?php
</span><span><span class="hljs-comment">// カスタム関数の例</span></span><span>
</span><span><span class="hljs-function"><span class="hljs-keyword">function</span></span></span><span> </span><span><span class="hljs-title">my_custom_func</span></span><span>(</span><span><span class="hljs-params"></span></span><span>) {
    </span><span><span class="hljs-keyword">return</span></span><span> </span><span><span class="hljs-string">'这カスタム関数です'</span></span><span>;
}

</span><span><span class="hljs-variable">$allFunctions</span></span><span> = </span><span><span class="hljs-title function_ invoke__">get_defined_functions</span></span><span>();

</span><span><span class="hljs-comment">// 組み込み関数を確認してください</span></span><span>
</span><span><span class="hljs-variable">$func1</span></span><span> = </span><span><span class="hljs-string">'strlen'</span></span><span>;
</span><span><span class="hljs-comment">// カスタム関数を確認します</span></span><span>
</span><span><span class="hljs-variable">$func2</span></span><span> = </span><span><span class="hljs-string">'my_custom_func'</span></span><span>;
</span><span><span class="hljs-comment">// 检查不存存在するする函数</span></span><span>
</span><span><span class="hljs-variable">$func3</span></span><span> = </span><span><span class="hljs-string">'non_exist_func'</span></span><span>;

</span><span><span class="hljs-function"><span class="hljs-keyword">function</span></span></span><span> </span><span><span class="hljs-title">checkFunctionType</span></span><span>(</span><span><span class="hljs-params"><span class="hljs-variable">$funcName</span></span></span><span>, </span><span><span class="hljs-variable">$allFunctions</span></span><span>) {
    </span><span><span class="hljs-keyword">if</span></span><span> (</span><span><span class="hljs-title function_ invoke__">function_exists</span></span><span>(</span><span><span class="hljs-variable">$funcName</span></span><span>)) {
        </span><span><span class="hljs-keyword">if</span></span><span> (</span><span><span class="hljs-title function_ invoke__">in_array</span></span><span>(</span><span><span class="hljs-variable">$funcName</span></span><span>, </span><span><span class="hljs-variable">$allFunctions</span></span><span>[</span><span><span class="hljs-string">'internal'</span></span><span>])) {
            </span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"<span class="hljs-subst">$funcName</span></span></span><span> 組み込み機能です\n";
        } </span><span><span class="hljs-keyword">elseif</span></span><span> (</span><span><span class="hljs-title function_ invoke__">in_array</span></span><span>(</span><span><span class="hljs-variable">$funcName</span></span><span>, </span><span><span class="hljs-variable">$allFunctions</span></span><span>[</span><span><span class="hljs-string">'user'</span></span><span>])) {
            </span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"<span class="hljs-subst">$funcName</span></span></span><span> カスタム関数です\n";
        } </span><span><span class="hljs-keyword">else</span></span><span> {
            </span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"<span class="hljs-subst">$funcName</span></span></span><span> 存存在するする,しかし、分類されていません\n";
        }
    } </span><span><span class="hljs-keyword">else</span></span><span> {
        </span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"<span class="hljs-subst">$funcName</span></span></span><span> 不存存在するする\n";
    }
}

</span><span><span class="hljs-title function_ invoke__">checkFunctionType</span></span><span>(</span><span><span class="hljs-variable">$func1</span></span><span>, </span><span><span class="hljs-variable">$allFunctions</span></span><span>);
</span><span><span class="hljs-title function_ invoke__">checkFunctionType</span></span><span>(</span><span><span class="hljs-variable">$func2</span></span><span>, </span><span><span class="hljs-variable">$allFunctions</span></span><span>);
</span><span><span class="hljs-title function_ invoke__">checkFunctionType</span></span><span>(</span><span><span class="hljs-variable">$func3</span></span><span>, </span><span><span class="hljs-variable">$allFunctions</span></span><span>);
?&gt;

上記のコードを実行すると、次のようになります。

 strlen 組み込み機能です
my_custom_func カスタム関数です
non_exist_func 不存存在するする

要約します

  • function_exists()は、関数が定義されているかどうかを検出できますが、組み込み関数とカスタム関数を区別することはできません。
  • 組み込みおよびユーザー定義の関数を含むget_defined_functions()を介してシステムのすべての機能を取得します。
  • これら2つの機能を組み合わせることで、関数が存在するかどうか、および組み込みまたはカスタマイズされているかどうかを正確に判断できます。

上記の方法を習得すると、PHP開発における機能関連のロジックをより柔軟に処理し、競合の名前や繰り返しの定義を避け、コードの堅牢性を向上させることができます。