ホームページ >バックエンド開発 >PHPチュートリアル >PHP カーネル in_array、PHP カーネル in_array_PHP の詳細なチュートリアル
1、a.php
リーリーテスト
リーリー2、b.php
リーリーテスト
リーリー9秒必要
b.php には重大な効率の問題があります。フォローアップしてテストしてください
リーリーstrtol には多くの時間がかかることがわかりました
ライブラリの機能を確認してみよう
リーリーしたがって、ソースコードには多くの型変換があるはずです
in_array は次のようになります
リーリー では、緩やかな比較が使用されます。 haystack
中搜索 needle
,如果没有设置 strict
needle
が文字列の場合、比較では大文字と小文字が区別されます。 needle
haystack
strict
の値が TRUE
の場合、strict
的值为 TRUE
则 in_array() 函数还会检查 needle
的类型是否和 haystack
in_array() 関数は の型が
最初のステップは ext/standard/array.c ファイルです リーリー
ところで、array_searchを見てみましたが、基本的にin_arrayの内部実装と同じであることがわかりました
関数のパラメータは./zend.hにあります
リーリーステップ 2 ext/standard/array.c ファイル内の php_search_array プロトタイプを表示します
リーリーstrict の値の違いには 2 つの比較方法があることがわかりました。 2 つの関数の違いを見てみましょう。 is_identical_function 型が同じかどうかを確認します
リーリー
is_equal_function は型が同じかどうかをチェックしないため、暗黙的な変換が必要です
リーリー
==》比較関数リーリー
配列と文字列を比較してみましょう==》zend/zend_hash.c のzend_hash_compare
リーリー
==》Zend/zend_operators.c には zendi_smart_strcmp もありますリーリー 型変換関数 is_numeric_string_ex は Zend/zend_operators.h にあります
フォローし続けてください
==》is_numeric_string_ex
リーリー 案の定、
type == IS_LONGの場合、このコードがあります。
このコードをインターセプトしますリーリー 以上ですstrtol
はこちらです