php - www - w3schools html reference pdf




هل هناك أي اختلاف معين بين الفترة الزمنية والصب إلى int-(int) X`؟ (5)

هل هناك أي فرق معين بين intval و (int)؟

مثال:

$product_id = intval($_GET['pid']);
$product_id = (int) $_GET['pid'];

هل يوجد فرق معين بين سطرين من الكود؟


آسف على necroing ، أردت فقط معرفة ما إذا كان / PHP7 له تأثير على هذا السؤال:

$ php -v
PHP 7.0.4-5+deb.sury.org~trusty+1 (cli) ( NTS )

الاختبار:

php > $start_ts = microtime(true); for($i = 0; $i < 100000000; $i++) { $a = (int) '1'; } var_dump((microtime(true) - $start_ts)*1000 . ' ms');
string(18) "3279.1121006012 ms"
php > $start_ts = microtime(true); for($i = 0; $i < 100000000; $i++) { $a = intval('1'); } var_dump((microtime(true) - $start_ts)*1000 . ' ms');
string(18) "5379.3351650238 ms"

كما ترون ، فإن الصب هو بالتأكيد أسرع بنسبة 100٪ تقريبًا

لكنني اضطررت إلى زيادة عدد الحلقات إلى 100 مليون قبل أن يكون الفارق مجرد مسألة ثانية ، وهو ما يحدث عندما أبدأ بالفعل في الاهتمام بالأداء ، في معظم الحالات.

لذا intval باستخدام الدالة intval ، لأن الصب هو نوع من السحر اللغوي الذي يحدث. حتى إذا intval casting وراء الكواليس ، إذا كان هناك خلل تم العثور عليه مع الصب ، ولسبب ما ، فإنه لا يمكن إصلاحه (التوافق العكسي؟) ، عندها يمكن على الأقل إصلاح intval للقيام بواجبها.

تحديث (PHP 7.1 + حالة إضافية):

$ php -v
PHP 7.1.0RC6 (cli) (built: Nov  9 2016 04:45:59) ( NTS )
$ php -a
php > $start_ts = microtime(true); for($i = 0; $i < 100000000; $i++) { $a = (int) '1'; } var_dump((microtime(true) - $start_ts)*1000 . ' ms');
string(18) "3583.9052200317 ms"
php > $start_ts = microtime(true); for($i = 0; $i < 100000000; $i++) { $a = intval('1'); } var_dump((microtime(true) - $start_ts)*1000 . ' ms');
string(18) "3569.0960884094 ms"
php > $start_ts = microtime(true); for($i = 0; $i < 100000000; $i++) { $a = '1' + 0; } var_dump((microtime(true) - $start_ts)*1000 . ' ms');
string(18) "1641.7920589447 ms"

يبدو أن 7.1 intval محسّن ، و '1' + 0 هو الآن الفائز في مسابقة السرعة هذه: فما زلت أستمر في استخدام intval أي حال


أعتقد أن هناك اختلاف واحد على الأقل: مع intval ، يمكنك تحديد القاعدة التي يجب استخدامها كمعلمة ثانية (الأساس 10 بشكل افتراضي):

var_dump((int)"0123", intval("0123"), intval("0123", 8));

سوف تحصل :

int 123
int 123
int 83

الشيء الذي يفعله intval هو أن التحويل البسيط ليس هو التحويل الأساسي:

int intval ( mixed $var [, int $base = 10 ] )

إذا كانت القاعدة 10 على الرغم من ذلك ، يجب أن تكون intval هي نفسها مثل cast (إلا إذا كنت ستصبح nitpicky وتذكر أن أحدها يقوم بإجراء مكالمة دالة بينما لا يقوم الآخر). كما هو موضح في intval :

تنطبق القواعد العامة للإدخال الصحيح.


العنبر هو الصحيح وإذا أمكنني إضافة نوع مفيد من معلومات الإرسال (إضافة "(int)" قبل التعبير الخاص بك) هو 300 إلى 600٪ أسرع من intval. لذلك إذا كان الغرض الخاص بك هو عدم التعامل مع قواعد أخرى غير العشرية ، فإنني أوصي باستخدام: (int) $something


يمكن تمرير intval() قاعدة منه للتحويل. (int) لا يمكن.

int intval( mixed $var  [, int $base = 10  ] )




php