php full Int- `(int) X` তে অন্তর্বর্তী এবং কাস্টিংয়ের মধ্যে কোন বিশেষ পার্থক্য আছে?



php tutorial pdf (6)

অন্তর্বর্তী এবং (int) মধ্যে কোন বিশেষ পার্থক্য আছে?

উদাহরণ:

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

কোড দুই লাইনের মধ্যে কোন বিশেষ পার্থক্য আছে?


Answer #1

(int) এবং intval() মধ্যে পার্থক্য সম্পর্কে মনে রাখা একটি বিষয়: intval() চিকিত্সা করে যা ইতোমধ্যেই কোনও রূপান্তর করার প্রয়োজনের সাথে int এবং float গুলি, নির্বিশেষে বেস আর্গুমেন্ট (অন্তত পিএইচপি 5.3.5 এর মত) নির্বিশেষে। এই আচরণটি সর্বাধিক স্পষ্ট নয়, পিএইচপি ডক পৃষ্ঠায় মন্তব্য হিসাবে উল্লেখ করা হয়েছে এবং এখানে নির্লজ্জভাবে পুনরাবৃত্তি করা হয়েছে:

$test_int    = 12;
$test_string = "12";
$test_float  = 12.8;

echo (int) $test_int;         // 12
echo (int) $test_string;      // 12
echo (int) $test_float;       // 12

echo intval($test_int, 8);    // 12 <-- WOAH!
echo intval($test_string, 8); // 10
echo intval($test_float, 8)   // 12 <-- HUH?

Answer #2

অ্যাম্বার সঠিক এবং যদি আমি একটি কার্যকর তথ্য টাইপ কাস্টিং যোগ করতে পারি (আপনার অভিব্যক্তিটির আগে একটি "(int)" যোগ করা) অন্তরের চেয়ে 300 থেকে 600% দ্রুত। তাই যদি আপনার উদ্দেশ্য দশমিকের চেয়ে অন্যান্য ঘাঁটিগুলির সাথে ডিল করা না হয় তবে আমি ব্যবহার করার পরামর্শ দিই: (int) $something


Answer #3

আমার মনে হয় অন্তত একটি পার্থক্য রয়েছে: intval সঙ্গে, আপনি কোন বেসটি দ্বিতীয় প্যারামিটার হিসাবে ব্যবহার করতে পারেন তা নির্ধারণ করতে পারেন (ডিফল্ট অনুসারে বেস 10):

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

আপনি পাবেন:

int 123
int 123
int 83

Answer #4

Necroing জন্য দুঃখিত, আমি শুধু এই প্রশ্নে পিএইচপি 7 একটি প্রভাব আছে কিনা দেখতে চেয়েছিলেন:

$ 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 একটি বিট যা ঘটছে। এমনকি যদি intval দৃশ্যের পিছনে কাস্টিং ব্যবহার করে, এমনকি যদি intval সাথে একটি বাগ পাওয়া যায় এবং কিছু কারণে এটি সংশোধন করা যায় না (পিছনে সামঞ্জস্য?) তাহলে তারা অন্তত এটির দায়িত্ব সম্পাদন করতে অন্তর্বর্তী স্থির করতে পারে।

আপডেট (পিএইচপি 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


Answer #5

intval যা একটি সাধারণ কাস্ট বেস রূপান্তর না করে না:

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

যদি ভিত্তিটি 10 ​​হয় তবে intval একটি intval হওয়া উচিত (যদি না আপনি nitpicky হতে পারেন এবং উল্লেখ করেন যে কেউ ফাংশন কল করে এবং অন্যটি না করে)। হিসাবে intval উল্লিখিত:

পূর্ণসংখ্যা ঢালাই সাধারণ নিয়ম প্রয়োগ।






php