อะไรคือความแตกต่างระหว่างdie()
และexit()
ฟังก์ชั่นใน PHP?
ฉันคิดว่าทั้งคู่มีฟังก์ชั่นเหมือนกัน แต่ฉันสงสัยว่ามีบางอย่างที่แตกต่างกันในทั้งสอง ... มันคืออะไร?
อะไรคือความแตกต่างระหว่างdie()
และexit()
ฟังก์ชั่นใน PHP?
ฉันคิดว่าทั้งคู่มีฟังก์ชั่นเหมือนกัน แต่ฉันสงสัยว่ามีบางอย่างที่แตกต่างกันในทั้งสอง ... มันคืออะไร?
คำตอบ:
ไม่มีความแตกต่าง - พวกเขาเหมือนกัน
คู่มือ PHP สำหรับexit
:
หมายเหตุ:
die()
ภาษาสร้างนี้จะเทียบเท่ากับ
คู่มือ PHP สำหรับdie
:
exit()
ภาษาสร้างนี้จะเทียบเท่ากับ
die
สำหรับการหยุดที่เกี่ยวข้องกับข้อผิดพลาดและexit
สถานการณ์อื่น ๆ ทั้งหมด ดูเหมือนว่าจะไหลได้ดีขึ้นเมื่ออ่านโค้ด
die
มันเขียนได้เร็วกว่าexit
... ฉันเริ่มใช้exit
เพราะมันอ่านได้ง่ายกว่าสำหรับผู้ที่ไม่ใช่โปรแกรมเมอร์ PHP แต่die
มันเร็วกว่าที่จะพิมพ์เมื่อคุณอยู่ใน รีบร้อน. die
นอกจากนี้โดยแบ่งตามชนิดวิธีที่ฉันที่ฉันไม่ได้มีการเปลี่ยนตำแหน่งมือของฉันที่จะเขียน
ความแตกต่างระหว่างdie()
และexit()
ใน PHP เป็นของพวกเขากำเนิด
die()
และexit()
เป็นฟังก์ชั่นที่เทียบเท่า
คู่มือ PHP สำหรับdie
:
exit()
ภาษาสร้างนี้จะเทียบเท่ากับ
คู่มือ PHP สำหรับexit
:
หมายเหตุ:
die()
ภาษาสร้างนี้จะเทียบเท่ากับ
คู่มือ PHP สำหรับรายชื่อฟังก์ชันนามแฝง :
die()
และexit()
มีความแตกต่างกันในภาษาอื่น ๆแต่ใน PHP พวกเขาเหมือนกัน
จากการคุยโว PHP อื่น :
... ในฐานะ C และ Perl coder ฉันพร้อมที่จะตอบว่า "ทำไม exit () เพียงแค่ปิดโปรแกรมที่มีสถานะทางออกเป็นตัวเลขขณะที่ die () พิมพ์ข้อความแสดงข้อผิดพลาดไปยัง stderr และออกด้วยสถานะ EXIT_FAILURE " แต่จากนั้นฉันจำได้ว่าเราอยู่ในระเบียบยุ่งเหยิงของ PHP
ใน PHP exit () และ die () เหมือนกัน
เห็นได้ชัดว่านักออกแบบคิดว่า "อืมมายืมexit () จาก Cและคน Perl ก็คงจะชอบถ้าเราตาย () เหมือนมาจาก Perlด้วยอ๊ะเรามีฟังก์ชั่นทางออกทั้งสองเอาไว้ให้พวกเขาทั้งคู่ สามารถใช้สตริงหรือเลขจำนวนเต็มเป็นอาร์กิวเมนต์และทำให้เหมือนกัน! "
ผลลัพธ์ที่ได้คือสิ่งนี้ไม่ได้ทำให้สิ่งใด ๆ "ง่ายขึ้น" ยิ่งสับสนยิ่งขึ้น ตัวแปลงสัญญาณ C และ Perl จะยังคงใช้ exit () เพื่อโยนค่าออกจำนวนเต็มเท่านั้นและตาย () เพื่อโยนข้อความแสดงข้อผิดพลาดและออกด้วยความล้มเหลว มือใหม่และ PHP-as-a-first-language อาจจะสงสัยว่า "อืมมสองฟังก์ชั่นทางออกซึ่งฉันควรใช้อันไหน?" คู่มือไม่ได้อธิบายว่าทำไมมี exit () และ die ()
โดยทั่วไป PHP มีความซ้ำซ้อนจำนวนมากเช่นนี้ - พยายามเป็นมิตรกับผู้ที่มาจากภูมิหลังทางภาษาที่แตกต่างกัน แต่ในขณะที่ทำเช่นนั้นจะสร้างความซ้ำซ้อนที่สับสน
exit()
ไม่ปิดการเชื่อมต่อในขณะdie()
นั้นดูเหมือนว่าจะเกี่ยวข้อง
ตามที่ระบุไว้ก่อนหน้านี้ทั้งสองคำสั่งสร้างโทเค็นการแยกวิเคราะห์เดียวกัน
แต่
มีความแตกต่างเล็กน้อยและนั่นคือระยะเวลาที่โปรแกรมแยกวิเคราะห์ใช้เวลาส่งคืนโทเค็น
ฉันยังไม่ได้ศึกษาตัวแยกวิเคราะห์ PHP แต่ถ้าเป็นรายการที่มีความยาวของฟังก์ชั่นที่เริ่มต้นด้วย "d" และรายการสั้น ๆ ที่ขึ้นต้นด้วย "e" จะต้องมีการปรับเวลาเพื่อค้นหาชื่อฟังก์ชั่นที่ขึ้นต้นด้วย " E" และอาจมีความแตกต่างอื่น ๆ เนื่องจากการตรวจสอบชื่อฟังก์ชันทั้งหมด
ฉันสงสัยว่ามันจะวัดได้เว้นแต่คุณจะมีสภาพแวดล้อม "สมบูรณ์แบบ" โดยเฉพาะสำหรับการแยกวิเคราะห์ PHP และคำขอจำนวนมากที่มีพารามิเตอร์ที่แตกต่างกัน แต่จะต้องมีความแตกต่างหลังจากทั้งหมด PHP เป็นภาษาตีความ
คู่มือ PHP เกี่ยวกับการตาย :
ตาย - เท่ากับทางออก
คุณสามารถทำdie;
แบบเดียวexit;
กับที่มีหรือไม่มีล้อเลียนก็ได้
ประโยชน์เฉพาะของการเลือกdie()
มากกว่าexit()
อาจจะมีเวลาที่คุณว่างในการพิมพ์ตัวอักษรพิเศษ ;-)
php -a
) die;
, die();
, exit;
และexit();
ไม่มีผลในขณะที่exit
(ไม่อัฒภาค) ออกจากโหมดการโต้ตอบ
ตามที่ทุกคำตอบที่ถูกต้องอื่น ๆ พูดdie
และexit
เหมือนกัน / นามแฝง
exit;
แม้ว่าผมจะมีการประชุมส่วนบุคคลที่เมื่อฉันต้องการที่จะยุติการดำเนินการของสคริปต์เมื่อมีการคาดหวังและต้องการที่ผมใช้ และเมื่อฉันต้องการที่จะยุติการดำเนินการเนื่องจากปัญหาบางอย่าง (ไม่สามารถเชื่อมต่อกับ db, ไม่สามารถเขียนไปยังไฟล์ ฯลฯ ) ฉันใช้die("Something went wrong.");
เพื่อ "ฆ่า" สคริปต์
เมื่อฉันใช้ทางออก:
header( "Location: http://www.example.com/" ); /* Redirect browser */
/* Make sure that code below does not get executed when we redirect. */
exit; // I would like to end now.
เมื่อฉันใช้ตาย:
$data = file_get_contents( "file.txt" );
if( $data === false ) {
die( "Failure." ); // I don't want to end, but I can't continue. Die, script! Die!
}
do_something_important( $data );
ด้วยวิธีนี้เมื่อฉันเห็นexit
จุดในรหัสของฉันฉันรู้ว่า ณ จุดนี้ฉันต้องการออกเพราะตรรกะสิ้นสุดที่นี่ เมื่อฉันเห็นdie
ฉันรู้ว่าฉันต้องการดำเนินการต่อ แต่ฉันไม่สามารถหรือไม่ควรเนื่องจากข้อผิดพลาดในการดำเนินการก่อนหน้านี้
แน่นอนว่าจะใช้ได้เฉพาะเมื่อทำงานกับโครงการเพียงอย่างเดียว เมื่อมีผู้คนจำนวนมากจะไม่มีใครป้องกันไม่ให้พวกเขาใช้งานdie
หรือในexit
กรณีที่ไม่เหมาะกับการประชุมของฉัน ...
นี่คือสิ่งที่น่าสนใจทีเดียว แม้ว่าexit()
และdie()
จะเทียบเท่าdie()
ปิดการเชื่อมต่อ exit()
ไม่ได้ปิดการเชื่อมต่อ
die()
:
<?php
header('HTTP/1.1 304 Not Modified');
die();
?>
exit()
:
<?php
header('HTTP/1.1 304 Not Modified');
exit();
?>
ผล:
exit()
:
HTTP/1.1 304 Not Modified
Connection: Keep-Alive
Keep-Alive: timeout=5, max=100
die()
:
HTTP/1.1 304 Not Modified
Connection: close
เพียงไม่จำเป็นต้องคำนึงถึงเรื่องนี้สำหรับโครงการของคุณ
exit
และdie
ทำงานในลักษณะเดียวกันพวกเขาทั้งสองเชื่อมต่ออย่างใกล้ชิด
ฟังก์ชั่น - ฉลาดพวกมันเหมือนกัน แต่ฉันใช้พวกมันในสถานการณ์ต่อไปนี้เพื่อให้โค้ดอ่านได้:
ใช้ die () เมื่อมีข้อผิดพลาดและต้องหยุดการทำงาน
เช่น
die( 'Oops! Something went wrong' );
ใช้ exit () เมื่อไม่มีข้อผิดพลาดและต้องหยุดการทำงาน
เช่น
exit( 'Request has been processed successfully!' );
หน้านี้กล่าวว่าdie
เป็นนามแฝงของexit
ดังนั้นพวกเขาจึงเหมือนกัน แต่ยังอธิบายว่า:
มีฟังก์ชั่นที่เปลี่ยนชื่อเนื่องจากการล้าง API หรือเหตุผลอื่น ๆ และชื่อเก่าจะถูกเก็บไว้เป็นนามแฝงเพื่อความเข้ากันได้ย้อนหลังเท่านั้น มันเป็นความคิดที่ดีที่จะใช้นามแฝงประเภทนี้เนื่องจากอาจจะล้าสมัยหรือเปลี่ยนชื่อซึ่งจะนำไปสู่สคริปต์ที่ไม่สามารถแปลได้
ดังนั้นโทรหาฉันหวาดระแวง แต่อาจไม่มีdie
อนาคต
is_int()
และis_integer()
ดีพอ ๆ กันเช่น ดูที่php-src
ประวัติความเป็นมาของ GitHub สิ่งdie()
ก่อสร้างนั้นอยู่ใน PHP อย่างน้อยตั้งแต่ปี 1999 เมื่อมันถูกแปลงเป็นพื้นที่เก็บข้อมูล SVN และอาจนานเท่าที่ภาษานั้นมีอยู่ ดูเหมือนว่าไร้สาระที่จะจินตนาการว่าจะเลิกใช้แล้ว
exit
ในอนาคตหรืออาจจะไม่มีdie
ในอนาคต"
เอาต์พุตนี้จากhttps://3v4l.orgแสดงให้เห็นว่า die และ exit นั้นเหมือนกันกับการใช้งาน
พวกเขาเป็นหลักเหมือนกันถึงแม้ว่าบทความนี้จะแนะนำเป็นอย่างอื่น
หน้าที่พวกเขาเหมือนกัน ดังนั้นการเลือกใช้อันไหนเป็นความชอบส่วนตัวโดยสิ้นเชิง ความหมายเป็นภาษาอังกฤษพวกมันต่างกัน เสียงฟังดูเป็นลบ เมื่อฉันมีฟังก์ชั่นที่ส่งคืนข้อมูล JSON ไปยังไคลเอนต์และยุติโปรแกรมมันน่ากลัวถ้าฉันเรียกฟังก์ชั่นนี้ว่า jsonDie () และมันเหมาะสมกว่าที่จะเรียกมันว่า jsonExit () ด้วยเหตุนี้ฉันจึงมักจะใช้ทางออกแทนความตาย
จากสิ่งที่ฉันรู้เมื่อฉันดูคำถามนี้ที่นี่
มันบอกว่ามี "ใน PHP มีความแตกต่างที่ชัดเจนในส่วนหัวของผลลัพธ์ในตัวอย่างด้านล่างฉันเลือกที่จะใช้ส่วนหัวที่แตกต่างกัน แต่เพื่อแสดงความแตกต่างระหว่าง exit () และ die () ที่ไม่สำคัญ" และผ่านการทดสอบ (เป็นการส่วนตัว)
ใน w3schools Quiz: ฟังก์ชั่น die () และ exit () ทำสิ่งเดียวกันหรือไม่ คำตอบของฉันเป็นเท็จ นั่นคือคำตอบที่ไม่ถูกต้อง คำตอบที่ถูกต้องเป็นจริง
สิ่งที่ฉันสังเกตเห็นในสคริปต์ของฉันอย่างน้อยก็คือ exit () จะหยุดสคริปต์ที่ดำเนินการอยู่ในปัจจุบันและส่งการควบคุมกลับไปที่สคริปต์การโทรใด ๆ ในขณะที่ die จะหยุด php ในแทร็กของมัน ฉันจะบอกว่าค่อนข้างแตกต่างกันมาก?
ผลลัพธ์ของฟังก์ชัน exit () และฟังก์ชัน die () เหมือนกันทุกประการ แต่ดังที่อธิบายไว้ในหน้าคู่มือนามแฝง ( http://php.net/manual/en/aliases.php ) มันบอกว่าฟังก์ชั่น die () เรียกใช้ฟังก์ชัน exit ฉันคิดว่ามันยากรหัสเช่นด้านล่าง:
function die($msg){
exit($msg);
}
นี่ไม่ใช่ปัญหาด้านประสิทธิภาพสำหรับโครงการขนาดเล็กขนาดกลางและขนาดใหญ่ แต่ถ้าโครงการมีหลายพันล้านกระบวนการคูณหลายพันล้านกระบวนการนี้เกิดขึ้นเป็นสิ่งสำคัญที่สุดในการปรับปรุงประสิทธิภาพของรัฐ
แต่คนส่วนใหญ่ไม่คิดว่านี่เป็นปัญหาเพราะถ้าคุณมีกระบวนการมากมายคุณต้องคิดปัญหามากกว่าถ้าฟังก์ชั่นเป็นผู้เชี่ยวชาญหรือนามแฝง
แต่คำตอบที่แน่นอนคือ; ฟังก์ชั่นหลัก allways เร็วกว่านามแฝง
สุดท้าย; หน้าคู่มือนามแฝงบอกว่าคุณไม่สามารถใช้ die ได้อีกต่อไป เป็นเพียงนามแฝงและเลิกใช้แล้ว
มันเป็นความคิดที่ดีที่จะใช้นามแฝงประเภทนี้เนื่องจากอาจจะล้าสมัยหรือเปลี่ยนชื่อซึ่งจะนำไปสู่สคริปต์ที่ไม่สามารถแปลได้ รายการนี้จัดทำขึ้นเพื่อช่วยผู้ที่ต้องการอัพเกรดสคริปต์เก่าเป็นไวยากรณ์ใหม่
die()
ไม่ใช่ฟังก์ชั่นแยกต่างหาก exit()
มันเป็นเพียงแค่ชื่อของผู้อื่น คำตอบนี้มีข้อความที่ไม่ถูกต้องเกี่ยวกับนามแฝงและประสิทธิภาพ
พวกเขาฟังดูเหมือนกันอย่างไรก็ตาม exit () ยังช่วยให้คุณสามารถตั้งรหัสทางออกของสคริปต์ PHP ของคุณ
โดยปกติแล้วคุณไม่ต้องการสิ่งนี้จริงๆ แต่เมื่อเขียนสคริปต์ PHP ของคอนโซลคุณอาจต้องการตรวจสอบเช่น Bash หากสคริปต์ทำทุกอย่างอย่างถูกต้อง
จากนั้นคุณสามารถใช้ exit () และจับได้ในภายหลัง อย่างไรก็ตาม Die () ไม่สนับสนุนสิ่งนั้น
Die () มักจะมีรหัส 0 อยู่เสมอดังนั้นโดยพื้นฐานแล้วคำสั่ง die () จะทำสิ่งต่อไปนี้:
<?php
echo "I am going to die";
exit(0);
?>
ซึ่งเหมือนกับ:
<?php
die("I am going to die");
?>
die
และexit
เหมือนกัน (จะสร้างโทเค็น parser เดียวกัน ( T_EXIT
) และถูกประมวลผลด้วยรหัสเดียวกัน) หากพารามิเตอร์เป็นจำนวนเต็มมันจะส่งคืนรหัสนั้นให้กับเชลล์ หากไม่เป็นเช่นนั้นก็จะส่งออกและส่งกลับ 0 ดังนั้นdie
และexit
เป็นชื่อแทนอย่างแท้จริงสำหรับแต่ละอื่น ๆ
so exit() is exit and die() is also exit :)