ผลลัพธ์ของตัวแปรทั้งหมดใน php.ini ขอบเขตตัวแปร PHP ทุกเรื่องที่อยากรู้แต่ไม่กล้าถาม ตัวแปรคงที่: พวกมันอยู่ใกล้ ๆ
ตัวแปร PHPเป็นคลังข้อมูลชนิดหนึ่งที่สามารถบรรจุ หลากหลายชนิดข้อมูล (ข้อความ ตัวเลข อาร์เรย์ และอื่นๆ) โดยทั่วไป ตัวแปรช่วยให้คุณสร้าง จัดเก็บ แก้ไข และเข้าถึงข้อมูลที่ระบุในตัวแปรได้อย่างรวดเร็วในอนาคต
วิธีสร้างตัวแปรใน PHP
เริ่มแรก ตัวแปรประกอบด้วยเครื่องหมาย $ (ดอลลาร์) - การกำหนดการใช้ตัวแปรแล้วตัวอักษร อักษรละติน(จาก a ถึง z และเล็กและใหญ่) ในตอนท้ายสามารถมี ตัวเลข... นอกจากนี้ ชื่อสามารถใช้ขีดล่างได้ (ไม่ใช่ต่อท้าย)วิธีตั้งชื่อตัวแปร:
$ var
$ ตัวแปร
$ ปี1945
$ _variable
ไม่สามารถเรียกตัวแปรได้อย่างไร:
$ 1 - ประกอบด้วยตัวเลขเท่านั้น
$ 1var - คุณไม่สามารถเริ่มชื่อตัวแปรด้วยตัวเลข
$ / var - อนุญาตเฉพาะขีดล่างของอักขระเพิ่มเติม _
$ ตัวแปร - Cyrillic อนุญาตโดยเอกสาร php แต่ไม่แนะนำ
$ var iable - ไม่สามารถใช้ช่องว่างได้
ตัวแปรแต่ละตัวได้รับการกำหนดค่า ในการกำหนดค่าให้ใช้เครื่องหมาย =
(เท่ากับ). ในระหว่างการประมวลผลสคริปต์ ค่าของตัวแปรสามารถเปลี่ยนแปลงได้ซ้ำๆ ขึ้นอยู่กับเงื่อนไขที่แตกต่างกัน
$ เมือง = "มอสโก"; // ตัวแปร $ เมืองได้รับการกำหนดค่าสตริง (ในเครื่องหมายคำพูด) มอสโก
$ ปี = 1147; // และตัวแปร $ year ถูกกำหนดเป็นค่าตัวเลข 1147
?>
$ name = "อเล็กซานเดอร์";
$ Name = "อเล็กซี่";
echo "$ ชื่อ $ ชื่อ"; // แสดง "อเล็กซานเดอร์ อเล็กซี่"
?>
เอาต์พุตตัวแปร PHP
แยกกัน คุณควรพิจารณาวิธีแสดงตัวแปรโดยใช้ ตัวดำเนินการส่งออก, งานที่เราตรวจสอบในบทเรียนที่แล้ว, การสร้างหน้า PHP. ตัวดำเนินการเอาต์พุต ... ด้านล่างนี้ฉันจะให้ตัวอย่างประกอบพร้อมความคิดเห็นจำนวนหนึ่ง// นี่คือวิธีที่เรากำหนดค่าให้กับตัวแปร
$ name1 = "อเล็กซี่";
$ name2 = "อเล็กซานเดอร์";
// แสดงตัวแปร
ก้อง $ name2; // เอาท์พุต: Alexander
echo "name1 คือ $ name1"; // ชื่อ 1 คืออเล็กซี่
// เมื่อใช้เครื่องหมายคำพูดเดี่ยว ผลลัพธ์คือ
// ชื่อตัวแปร ไม่ใช่ค่า
echo "name1 คือ $ name1"; // พิมพ์: name1 คือ $ name1
// คุณเพียงแค่แสดงค่าของตัวแปร
ก้อง $ name1; // อเล็กซี่
เสียงสะท้อน $ name1, $ name2; // อเล็กซี่ อเล็กซานเดอร์
echo $ name1. "". $ name2; // อเล็กซี่ อเล็กซานเดอร์
echo "$ name1, $ name2"; // อเล็กซี่, อเล็กซานเดอร์
ก้อง<<
หลายบรรทัดที่มีการแทนที่ตัวแปร $
จบ;
การทำงานของตัวแปร PHP
การดำเนินการทางคณิตศาสตร์ใน PHPในกรณีของค่าตัวเลข คุณสามารถดำเนินการทางคณิตศาสตร์ได้: การบวก การลบ การคูณ และอื่นๆ
- $a(ปฏิเสธ) เปลี่ยนเครื่องหมายของ $ a
$ a + $ b(เพิ่มเติม) ผลรวมของ $ a และ $ b
$ a - $ b(การลบ) ความแตกต่างระหว่าง $ a และ $ b
$ a * $ b(การคูณ) ผลคูณของ $ a และ $ b
$ a / $ b(ส่วน) ผลหารของ $ a หารด้วย $ b
$ a% $ b(การหารแบบโมดูโล) เศษจำนวนเต็มของ $ a หารด้วย $ b
มาดูตัวอย่างกัน
$a = 2; // หมายเหตุ กรณีเป็นตัวเลขจะไม่ใช้เครื่องหมายคำพูด
$ b = 3; // หมายเหตุ กรณีเป็นตัวเลขจะไม่ใช้เครื่องหมายคำพูด
$ ผล = $ a + $ b; // เพิ่มตัวแปร
สะท้อน $ ผล; // จะพิมพ์ 5
$ ผล = $ b - $ a; // เพิ่มตัวแปร
สะท้อน $ ผล; // จะส่งออก 1
เพิ่มและลดการดำเนินการใน PHP
การดำเนินการเหล่านี้จะเป็นประโยชน์ในการสร้างลูปเป็นหลัก ซึ่งเราจะพูดถึงในภายหลัง
คำนำหน้า- ตัวดำเนินการที่เขียนก่อนตัวแปร ( - $a; ++ $ a). ส่งกลับค่าของตัวแปรก่อนการเปลี่ยนแปลง
Postfix- ตัวดำเนินการที่เขียนหลังตัวแปร ( $a--; $a--). ส่งกลับค่าที่แก้ไขของตัวแปร
เพิ่มขึ้น- การเพิ่มมูลค่า
ลดลง- มูลค่าลดลง
++ $ aคำนำหน้าเพิ่มขึ้น เพิ่มทีละ $ a และส่งกลับค่าของ $ a
$a ++การเพิ่มขึ้นของ Postfix ส่งกลับค่าของ $ a แล้วเพิ่ม $ a ทีละหนึ่ง
- $aคำนำหน้าลดลง ลด $ a ทีละหนึ่งและส่งกลับค่าของ $ a
$a-- Postfix ลดลง ส่งคืนค่า $ a แล้วลดค่า $ a ทีละหนึ่ง
เสียงสะท้อน "
Postfix เพิ่มขึ้น
";$a = 5;
echo "ควรเป็น 5:" $a++. "\ NS";
เสียงสะท้อน "
คำนำหน้าเพิ่มขึ้น
";$a = 5;
echo "ควรเป็น 6:" ++ $ ก. "\ NS";
echo "ควรเป็น 6:" $ ก. "\ NS";
เสียงสะท้อน "
Postfix ลดลง
";$a = 5;
echo "ควรเป็น 5:" $a--. "\ NS";
เสียงสะท้อน "
คำนำหน้าลดลง
";$a = 5;
echo "ควรเป็น 4:" - $ ก. "\ NS";
echo "ควรเป็น 4:" $ ก. "\ NS";
?>
การดำเนินการมอบหมาย PHP
โอเปอเรเตอร์พื้นฐานดูเหมือนกับ =
... เมื่อมองแวบแรก อาจดูเหมือนว่าโอเปอเรเตอร์นี้เท่ากัน อันที่จริง นี่ไม่ใช่กรณี ตัวดำเนินการกำหนดหมายความว่าตัวถูกดำเนินการทางซ้ายถูกกำหนดเป็นค่าของนิพจน์ที่ถูกต้อง (นั่นคือ มันถูกตั้งค่าเป็นค่าผลลัพธ์) ตัวดำเนินการรวม- เป็นโอเปอเรเตอร์ที่ช่วยให้คุณใช้ค่าก่อนหน้าของตัวแปรสำหรับการดำเนินการที่ตามมา (ต่อท้ายตัวแปรสตริง (พร้อมข้อความ) หรือเพิ่มค่าตัวเลข)
$ a = ($ b = 2) + 4; // ผลลัพธ์: $ a ถูกตั้งค่าเป็น 6, $ b ถูกตั้งค่าเป็น 2
$a = 2;
$ a + = 3; // ตั้งค่า $ a เป็น 5 คล้ายกับการเขียน: $ a = $ a + 3;
$ b = "สวัสดี";
$ b. = "สันติภาพ!"; // ตั้งค่า $ b เป็น "Hello World!" เช่นเดียวกับ $ b = $ b "ที่นั่น!";
นอกจากนี้ยังมี การดำเนินการเปรียบเทียบและ ของเล่นพัฒนาสมองแต่เราจะพูดถึงพวกเขาในบทเรียนต่อไป ฉันจะพยายามไม่ทำให้คุณตกใจด้วยข้อมูลจำนวนมากในทันที!)
ต่อคำถามที่ถามก่อนหน้านี้ด้วยรายละเอียดใหม่ ดังนั้น: ไซต์ในคลาวด์, ธีม - ค่าเริ่มต้น 3.0, can_use_smarty = true ในหน้าย่อยของผลิตภัณฑ์ โค้ด Smarty ใช้งานได้ค่อนข้างดี สามารถเข้าถึงและแสดงตัวแปรที่จำเป็นได้ ในผลิตภัณฑ์ คำอธิบาย ...
สวัสดี. ในไฟล์ checkout.html จะมีตัวแปร $ cart_total = $ wa-> shop-> cart-> total () ซึ่งเก็บต้นทุนสุดท้าย และจะแบ่งค่าใช้จ่ายนี้เป็นต้นทุนในการจัดส่งและค่าใช้จ่ายในการสั่งซื้อและนำค่าใช้จ่ายทั้งหมดมาที่ไซต์ได้อย่างไร ขอบคุณ
มีทางแก้
สวัสดีตอนบ่าย บอกฉันที ฉันมีรหัสผลิตภัณฑ์หลายรหัส ตัวอย่างเช่น 1,3,5 ฉันต้องการรับข้อมูลจาก $ wa-> shop-> product () ฉันต้องกำหนดตัวแปรให้กับข้อมูลผลิตภัณฑ์สำหรับ 3 ID นี้ ทำอย่างไร? ไม่แรงที่...
บางอย่างเช่นนี้ (ฉันเขียนจากหน่วยความจำ ฉันต้องตรวจสอบ) ($ all_my_products = $ wa-> shop-> products ()) (foreach $ all_my_products เป็น $ ab)
($ ab | var_dump)(/ แต่ละ)
ฉันต้องการแสดง 3 ราคาสำหรับหน้าร้านพร้อมกันมีทางแก้
สวัสดี! IM มี 3 ราคามาตรฐาน: การซื้อ ขีดทับ และขายปลีก ด้วยความช่วยเหลือของปลั๊กอินหลายราคา ฉันได้สร้างราคาเพิ่มเติมอีก 2 ราคาสำหรับผู้ค้าส่ง ตัวแทนจำหน่าย จำเป็นต้องสะท้อนราคาทั้ง 3 สำหรับผู้ซื้อทั้งหมด แต่เมื่อลูกค้า ...
คำถามถูกปิด - พวกกำลังทำอยู่แล้ว
แบบสอบถามใดที่คุณสามารถแสดงรายการตัวแปรที่มีอยู่มีทางแก้
บอกสิ่งที่คุณสามารถใช้ในการพัฒนานอกเหนือจาก (debug) และ (wa_dumpc ($ order)) เพื่อดูตัวแปรที่มีอยู่บนหน้า และอื่นๆ ... โครงสร้างและแบบสอบถามใดที่คุณสามารถใช้ในการพัฒนา
(wa_tpl_vars) - ตัวช่วยที่ให้คุณแสดงตัวแปรทั้งหมดที่ส่งผ่านไปยังเทมเพลตปัจจุบัน .... คำถามนี้ได้ถูกกล่าวถึงแล้ว
มีทางแก้
สวัสดี ฉันไม่เข้าใจอะไรใน php มีเพียง แนวคิดทั่วไปเกี่ยวกับลูป อาร์เรย์ เป็นต้น ฉันใช้ css, html, bootstap, uikit เพราะฉันไม่เข้าใจเฟรมเวิร์ก ฉันไม่สามารถใช้งานได้อย่างเต็มที่ ฉันไม่เข้าใจว่าการดำเนินการทำงานอย่างไร และจะหาได้จากที่ไหน (เช่น ...
ดูคำอธิบายของกลไกเทมเพลต Smarty ตัวแปรจะถูกส่งไปยังเทมเพลต ซึ่งสร้างและมอบให้กับผู้ใช้ หากต้องการทราบสิ่งที่อยู่ในตัวแปร คุณสามารถส่งออกตัวแปรแยกกัน ($ post | wa_print_r) (foreach $ post.plugins.before เป็น $ plugin => $ output) ($ output) (/ foreach) ใช้รหัสนี้รับอาร์เรย์จากตัวแปร $ post.plugins.before ที่มีคีย์ ($ ปลั๊กอิน) และค่า ($ output) ส่งออกค่าทั้งหมด ($ output) ไปยังหน้า
+1 ไม่ยอมรับ
ตัวแปรจาก Cheat Sheet จะไม่ทำงานเมื่อใส่ลงใน Order Notifications เช่นเดียวกับในแบบฟอร์มสั่งพิมพ์ของคุณ ...
การปรับแต่งธีม Default 2.0
จำเป็นต้องทำการปรับปรุงการออกแบบบางอย่าง ค่าเริ่มต้น 2.0 1. ปรับความสูงของรูปภาพผลิตภัณฑ์ในหมวดหมู่ https: //yadi.sk/i/JazqloIg3ZQU ... 2. เปลี่ยนผลลัพธ์ คำอธิบายสั้น ๆ, แสดงฟิลด์เพิ่มเติมพร้อมไอคอน ...
สวัสดี ช่วยบอกวิธีการแสดงลักษณะของสินค้าในตะกร้าและในแค็ตตาล็อก (list of goods) ซึ่งเลือกเอง เช่น ขนาด 1) มีค่าที่เลือกในตะกร้าแล้ว ไฟล์เทมเพลตมาตรฐาน (product.cart.html) .2) ในรายการสินค้า ...
โปรดช่วยฉันคิดออก จะหาเอกสารที่สมบูรณ์เพิ่มเติมเกี่ยวกับเครื่องยนต์ได้ที่ไหน กล่าวคือ ฉันสนใจตัวแปรอัจฉริยะทั้งหมด ฉันจะเดาได้อย่างไรว่าควรแสดงแคตตาล็อกผลิตภัณฑ์ รถเข็น รูปภาพผลิตภัณฑ์ ลักษณะเฉพาะ ฯลฯ ด้วยรหัสใด และ...
มีทางแก้
สวัสดีตอนบ่าย. จำเป็นต้องทำเมนูดรอปดาวน์หลายเมนู ออกแบบธีม ออกแบบด้วยรสชาติ PRO ฉันปีนขึ้นไปที่แถบด้านข้าง / nav.html โดยทำซ้ำรหัส ฉันจึงได้เมนูที่สอง แต่เนื่องจาก มันเหมือนกันโดยธรรมชาติเริ่มที่จะปกครองมัน ทันทีที่ฉัน ...
คุณสามารถสร้างเมนูแบบเลื่อนลงอย่างง่ายโดยไม่ต้องคัดลอกส่วนต่างๆ ของโค้ดที่เกี่ยวข้องกับสคริปต์ของธีมการออกแบบ แต่สร้างเมนูของคุณเอง นี่คือสคริปต์ (วางลงในเทมเพลตของธีม) 350ms คือเวลาที่ปรากฏ และหากต้องการ คุณสามารถเพิ่มเอฟเฟกต์ต่างๆ ได้มากขึ้น จากนั้นคุณสร้างสองวัตถุของคลาสที่เปิดและเมนู
ฟิลด์ที่อยู่เป็นแบบผสม (ประกอบด้วยฟิลด์ย่อย) ดังนั้นหากคุณต้องการแสดงองค์ประกอบย่อยเฉพาะ คุณต้องระบุองค์ประกอบย่อย ตัวอย่างเช่น เช่นนี้ ($ addr = $ wa-> user ("address")) เมือง: ($ addr.data.city) ชี้ไปที่ที่อยู่แรกในอาร์เรย์ของที่อยู่ติดต่อ (อาจมีได้หลายที่อยู่: ที่อยู่สำหรับจัดส่ง , ที่อยู่ของผู้ชำระเงิน, งาน, ส่วนตัว, ฯลฯ) เอกสารประกอบ: http://www.webasyst.ru/developers/docs/features/contacts-app-integration/
+9
สหาย! เมื่อเร็ว ๆ นี้ประสบปัญหาการทำงานแบบรวมศูนย์ของปลั๊กอินด้วยเทมเพลตในธีมการออกแบบ เหล่านั้น. ไม่มี มีปลั๊กอินบางตัวที่เขียนไว้: สร้างเทมเพลตในธีมการออกแบบ จากนั้นจะใช้งานและอื่นๆ ... ปรากฎว่า ...
มีทางแก้
ฉันสังเกตว่าบนไซต์ (ไซต์แอปพลิเคชัน) เพื่อไม่ให้สับสนกับร้านค้า มาร์กอัปจะไม่ปรากฏบนหน้า ฉันไปที่เว็บไซต์ webasyst พวกเขาทั้งหมด ตกลง ใช้งานอย่างไร ใส่รหัสใด และเหตุใดจึงไม่เป็นค่าเริ่มต้น
ไซต์ - เพจ - เลือกเพจ และที่การตั้งค่าเพจด้านบน - ส่วนเครือข่ายสังคมออนไลน์ เอาต์พุตโค้ด Php มีไฟล์หลัก 3 ไฟล์ (index.php) ไฟล์ที่มี javascript และไฟล์ php ไฟล์ php เชื่อมต่อกับไฟล์ javascript เช่น var JSONReviewsGeneratorReference = "path to the php file"; แต่ปรากฎว่ารหัส php ใน shopscript ไม่สามารถใช้ได้ (บน ... ช่วยบอกทีครับผู้รู้ ฉันมีธีมการออกแบบที่มีรสนิยม 2 จำเป็นในแคตตาล็อกสินค้าซึ่งแสดงสินค้าทั้งหมดที่มีชื่อและราคาเพื่อแสดงราคาด้านบนและบทความของผลิตภัณฑ์ที่กำหนด ฉันติดต่อผู้พัฒนาธีมโดยบอกว่าฉันไม่รู้จักตัวแปร ยังไง... 12 ปีที่แล้ว Gotcha เล็กน้อยที่ต้องระวัง: หากคุณปิด RegisterGlobals และรายการที่เกี่ยวข้อง ให้ใช้ get_defined_vars () คุณอาจเห็นสิ่งต่อไปนี้: Array [_POST] => อาร์เรย์ () ) พิมพ์ "
[GLOBALS] => Array
[GLOBALS] => Array
* ทบทวน *
[_POST] => อาร์เรย์ ()
[_GET] => อาร์เรย์ ()
[_COOKIE] => อาร์เรย์ ()
[_FILES] => อาร์เรย์ ()
)
[_GET] => อาร์เรย์ ()
[_COOKIE] => อาร์เรย์ ()
[_FILES] => อาร์เรย์ ()
?>
สังเกตว่า $ _SERVER ไม่ได้อยู่ที่นั่น ดูเหมือนว่า php จะโหลด superglobal $ _SERVER หากใช้ที่ไหนสักแห่งเท่านั้น คุณสามารถทำได้:". htmlspecialchars (print_r (get_defined_vars (), true))"
"
;
พิมพ์ " ". htmlspecialchars (print_r ($ _SERVER, จริง))"
"
;
?>
จากนั้น $ _SERVER จะปรากฏในทั้งสองรายการ ฉันเดาว่ามัน "ไม่ใช่ gotcha จริงๆ เพราะไม่มีอะไรเลวร้ายเกิดขึ้นไม่ว่าจะด้วยวิธีใด แต่มันก็เป็นความอยากรู้อยากเห็นที่น่าสนใจ
6 ปีที่แล้ว
เนื่องจาก get_defined_vars () รับเฉพาะตัวแปร ณ จุดที่คุณเรียกใช้ฟังก์ชัน มีวิธีง่ายๆ ในการรับตัวแปรที่กำหนดภายในขอบเขตปัจจุบัน
// ส่วนบนสุดของสคริปต์ php ของคุณ
$ vars = get_defined_vars ();
// เก็บของเดี๋ยวนี้
$ foo = "foo";
$ bar = "บาร์";
// รับตัวแปรทั้งหมดที่กำหนดไว้ในขอบเขตปัจจุบัน
$ vars = array_diff (get_defined_vars (), $ vars);
เสียงสะท้อน "
" ;" ;
print_r ($ vars);
เสียงสะท้อน "
?>
15 ปีที่แล้ว
นี่คือฟังก์ชันที่สร้างรายงานการดีบักสำหรับการแสดงผลหรืออีเมล
โดยใช้ get_defined_vars เหมาะอย่างยิ่งสำหรับการถ่ายภาพสแนปชอตแบบละเอียดโดยไม่ต้อง
ขึ้นอยู่กับอินพุตของผู้ใช้
ฟังก์ชัน generateDebugReport (วิธี $, $ define_vars, $ email = "undefined") (
// ฟังก์ชันสร้างรายงานการดีบักเพื่อแสดงหรือส่งอีเมล
// การใช้งาน: generateDebugReport (เมธอด, get_defined_vars (), อีเมล);
// โดยที่เมธอดคือ "เบราว์เซอร์" หรือ "อีเมล"
// สร้างรายการละเว้นสำหรับคีย์ที่ส่งคืนโดย "get_defined_vars"
// ตัวอย่างเช่น HTTP_POST_VARS, HTTP_GET_VARS และอื่นๆ เป็น
// ซ้ำซ้อน (เหมือนกับ _POST, _GET)
// รวมถึง vars ที่คุณต้องการละเว้นด้วยเหตุผลด้านความปลอดภัย - เช่น PHPSESSID.
$ ละเว้น = อาร์เรย์ ("HTTP_POST_VARS", "HTTP_GET_VARS",
"HTTP_COOKIE_VARS", "HTTP_SERVER_VARS",
"HTTP_ENV_VARS", "HTTP_SESSION_VARS",
"_ENV", "PHPSESSID", "SESS_DBUSER",
"SESS_DBPASS", "HTTP_COOKIE");
$ timestamp = วันที่ ("m / d / y h: m: s");
$ message = "รายงานการดีบักสร้าง $ timestamp \ n";
// รับข้อผิดพลาด SQL ล่าสุดสำหรับการวัดที่ดี โดยที่ลิงก์ $ เป็นตัวระบุทรัพยากร
// สำหรับ mysql_connect แสดงความคิดเห็นหรือแก้ไขการตั้งค่าฐานข้อมูลหรือนามธรรมของคุณ
ลิงค์ $ ทั่วโลก;
$ sql_error = mysql_error ($ ลิงค์);
ถ้า ($ sql_error) (
$ message. = "\ nข้อความ Mysql: \ n" mysql_error ($ ลิงก์);
}
// สิ้นสุด MySQL
// สามารถใช้ฟังก์ชันเรียกซ้ำได้ที่นี่ คุณได้รับความคิด ;-)
foreach ($ define_vars เป็น $ คีย์ => $ val) (
ถ้า (is_array ($ val) &&! in_array ($ คีย์ $ ละเว้น) && นับ ($ val)> 0) (
$ message. = "\ n $ key array (คีย์ = ค่า): \ n";
foreach ($ val เป็น $ subkey => $ subval) (
if (! in_array ($ คีย์ย่อย, $ ละเว้น) &&! is_array ($ subval)) (
$ ข้อความ = $ คีย์ย่อย "=" $ ย่อย "\ NS";
}
elseif (! in_array ($ คีย์ย่อย $ ละเว้น) && is_array ($ subval)) (
foreach ($ subval เป็น $ subsubkey => $ subsubval) (
if (! in_array ($ คีย์ย่อย, $ ละเว้น)) (
$ ข้อความ = $ คีย์ย่อย "=" $ subsubval. "\ NS" ;
}
}
}
}
}
อื่น (! is_array ($ val) &&! in_array (คีย์ $, $ ละเว้น) && $ val) (
$ message. = "\ nVariable". คีย์ $ "=" ราคา $ "\ NS";
}
}
ถ้า ($ method == "เบราว์เซอร์") (
echo nl2br ($ ข้อความ);
}
elseif ($ method == "อีเมล") (
ถ้า ($ email == "undefined") (
$ อีเมล = $ _SERVER ["SERVER_ADMIN"];
}
$ mresult = mail ($ email, "Debug Report for". $ _ENV ["HOSTNAME"]. "", $ message);
ถ้า ($ mresult == 1) (
เสียงก้อง "ส่งรายงานการดีบักเรียบร้อยแล้ว \ N";
}
อื่น (
เสียงก้อง "ไม่สามารถส่งรายงานการดีบัก \ N";
}
}
}
?>
17 ปีที่แล้ว
รูทีนง่าย ๆ ในการแปลงอ็อบเจ็กต์ get_defined_vars เป็น XML
ฟังก์ชั่น obj2xml ($ v, $ เยื้อง = "") (
ในขณะที่ (รายการ ($ คีย์, $ val) = แต่ละ ($ v)) (
ถ้า ($ key == "__attr") ดำเนินการต่อ;
// ตรวจสอบ __attr
ถ้า (is_object ($ val -> __attr)) (
ในขณะที่ (รายการ ($ key2, $ val2) = แต่ละ ($ val -> __attr)) (
$ attr. = "$ key2 = \" $ val2 \ "";
}
}
อื่น $ attr = "";
if (is_array ($ val) || is_object ($ val)) (
พิมพ์ ("$ indent<
$key$attr
>\ NS ");
obj2xml ($ val, $ เยื้อง "");
พิมพ์ ("$ indent
$key
>\ NS ");
}
อื่น พิมพ์ ("$ indent<
$key$attr
>$ val
$key
>\ NS ");
}
}
// ตัวอย่างวัตถุ
$ x -> ชื่อ -> แรก = "จอห์น";
$ x -> ชื่อ -> สุดท้าย = "สมิธ";
$ x -> arr ["ผลไม้"] = "กล้วย";
$ x -> arr ["Veg"] = "แครอท";
$ y -> ลูกค้า = $ x;
$ y -> ลูกค้า -> __attr -> id = "176C4";
$ z = get_defined_vars ();
obj2xml ($ z ["y"]);
?>
จะส่งออก:
10 ปีที่แล้ว
ตามหมายเหตุแล้ว get_defined_vars () จะไม่ส่งคืนชุดของการอ้างอิงตัวแปร (ตามที่ฉันหวังว่า) ตัวอย่างเช่น:
//กำหนดตัวแปร
$ my_var = "foo";
// รับรายการตัวแปรที่กำหนดของเรา
$ define_vars = get_defined_vars ();
// ตอนนี้ลองเปลี่ยนค่าผ่านอาร์เรย์ที่ส่งคืน
$ define_vars ["my_var"] = "บาร์";
echo $ my_var, "\ n";
?>
จะส่งออก "foo" (ค่าเดิม) คงจะดีถ้า get_defined_vars () มีอาร์กิวเมนต์ที่เป็นทางเลือกเพื่ออ้างอิง แต่ฉันคิดว่ามันเป็นคำขอที่ค่อนข้างพิเศษ คุณสามารถทำเองได้ (สะดวกน้อยกว่า) ด้วยสิ่งต่อไปนี้
$ define_vars = อาร์เรย์ ();
$ var_names = array_keys (get_defined_vars ());
foreach ($ var_names เป็น $ var_name)
{
$ define_vars [$ var_name] = & $ $ var_name;
}
?>
1 ปีที่แล้ว
ฉันโพสต์ที่นี่ก่อนหน้านี้เกี่ยวกับ "สิ่งนี้" ที่อยู่ใน get_defined_vars
ปรากฎว่า "ไม่ได้อยู่ที่นั่นเสมอไป แต่ในบางกรณีก็จะปรากฏขึ้นอย่างลึกลับ
Php -r "
การทดสอบระดับ (
ฟังก์ชั่นสาธารณะ a () (var_dump (array_keys (get_defined_vars ())); $ a = 123;)
ฟังก์ชั่นสาธารณะ b () (var_dump (array_keys (get_defined_vars ())); $ this;)
}
$ t = การทดสอบใหม่ ();
$ t-> a ();
$ t-> b ();
"
อาร์เรย์ ()
อาร์เรย์ ("นี่")
สิ่งนี้ไม่ได้เกิดขึ้นใน PHP 7.2 แต่จะเกิดขึ้นใน PHP 5.6
1 ปีที่แล้ว
ความคิดเห็นบางส่วนชี้ให้เห็นว่าฟังก์ชันนี้จะไม่ส่งคืนการอ้างอิง อย่างไรก็ตามมันส่งคืนชื่อและชื่อเป็น "ข้อมูลอ้างอิง"
ฉันจะไม่แนะนำคำแนะนำที่นี่ที่แปลงเป็นข้อมูลอ้างอิง
ฟังก์ชั่นสาธารณะ x ($ a, $ b, $ c) (
foreach (array_keys (get_defined_vars ()) เป็นคีย์ $)
if ($ key! == "นี่")
$ this-> y ($ (คีย์ $));
}
ฟังก์ชั่นสาธารณะ y (& $ อินพุต) (
$ อินพุต ++;
}
แทนที่จะใช้ $ () คุณสามารถใช้ $$ ได้เช่นกัน
ฉันได้ทำสิ่งแปลกประหลาดบางอย่างในช่วงเวลาของฉันเพื่อสร้างรหัสทั่วไป แต่ฉันไม่เคยต้องทำสิ่งนี้มาก่อน มันอาจใช้งานไม่ได้ด้วยซ้ำ (แต่ควรเพราะมัน" ไม่ต่างจาก $ a [$ คีย์])
คุณยังสามารถทำ $$ key ++ ได้ แต่ฉัน "ไม่เคยเห็นโค้ดแบบนั้นมาก่อน" ที่ไม่เลวอย่างน่ากลัว (การใช้ไดนามิกโดยที่ไดนามิกไม่มีประโยชน์)
หากคุณกำลังทำสิ่งนั้นอยู่ให้ตรวจสอบเพิ่มเติม
ตัวแปรสภาพแวดล้อม (สภาพแวดล้อม) ใน Windows มีข้อมูลต่างๆ เกี่ยวกับการตั้งค่าระบบและสภาพแวดล้อมของผู้ใช้ แยกแยะระหว่างผู้ใช้ ระบบ และตัวแปรสภาพแวดล้อมกระบวนการ
วิธีที่ง่ายที่สุดในการดูเนื้อหาของตัวแปรสภาพแวดล้อมบน Windows คือการเปิดคุณสมบัติของระบบ ( sysdm.cpl) -> ขั้นสูง -> ตัวแปรสภาพแวดล้อมอย่างที่คุณเห็น ในส่วนที่เปิดอยู่ มีสองส่วน: ส่วนบนประกอบด้วยตัวแปรสภาพแวดล้อมของผู้ใช้ ส่วนล่างประกอบด้วยส่วนระบบ
นอกจากนี้ ตัวแปรสภาพแวดล้อมจะถูกเก็บไว้ในรีจิสทรีของระบบ ตัวแปรที่กำหนดเองจะถูกเก็บไว้ในส่วน ระบบ - ใน HKLM \ SYSTEM \ CurrentControlSet \ Control \ Session Manager \ Environment.
คุณสามารถแสดงค่าของตัวแปรสภาพแวดล้อมทั้งหมดในบรรทัดคำสั่งของ Windows คำสั่งนั้นง่าย:
คำสั่งจะแสดงรายการตัวแปรสภาพแวดล้อมและค่าของพวกมัน
ใน PowerShell คุณสามารถใช้คำสั่งเพื่อแสดงตัวแปรสภาพแวดล้อมทั้งหมดได้:
หากคุณต้องการพิมพ์ค่าของตัวแปรเพียงตัวเดียว คุณต้องใช้คำสั่ง echo และชื่อของตัวแปรจะต้องอยู่ในเครื่องหมายเปอร์เซ็นต์ ตัวอย่างเช่น,
เสียงสะท้อน% systemroot%
set> c: \ tmp \ env_var.txt
สามารถรับตัวแปรสภาพแวดล้อมเฉพาะกระบวนการได้โดยใช้ free ยูทิลิตี้ประมวลผล Explorer(จาก Sysinternals) ก็เพียงพอที่จะเปิดคุณสมบัติของกระบวนการและไปที่แท็บ สิ่งแวดล้อม.
บทเรียนนี้สำรวจขอบเขตของตัวแปร PHP อธิบายความแตกต่างระหว่างขอบเขตท้องถิ่นและระดับโลก แสดงวิธีเข้าถึงตัวแปรส่วนกลางภายในฟังก์ชัน วิธีทำงานกับ superglobals และวิธีการสร้างตัวแปรคงที่
เมื่อคุณเริ่มเรียนรู้ PHP และเริ่มทำงานกับฟังก์ชันและอ็อบเจ็กต์ ขอบเขตของตัวแปรจะค่อนข้างสับสน โชคดีที่กฎของ PHP ในเรื่องนี้เข้าใจได้ง่ายมาก (เมื่อเทียบกับภาษาโปรแกรมอื่นๆ)
ขอบเขตคืออะไร?
ขอบเขตของตัวแปรคือบริบทที่มีการกำหนดตัวแปรและตำแหน่งที่สามารถเข้าถึงได้ PHP มีสองขอบเขตตัวแปร:
- ทั่วโลก- ตัวแปรสามารถเข้าถึงได้ทุกที่ในสคริปต์
- ท้องถิ่น- ตัวแปรสามารถเข้าถึงได้ภายในฟังก์ชันที่กำหนดไว้เท่านั้น
ขอบเขตของตัวแปร และโดยเฉพาะอย่างยิ่งขอบเขตในเครื่อง ทำให้การจัดการโค้ดของคุณง่ายขึ้นมาก หากตัวแปรทั้งหมดเป็นแบบโกลบอล ก็สามารถเปลี่ยนได้ทุกที่ในสคริปต์ สิ่งนี้จะนำไปสู่ความโกลาหลและสคริปต์ขนาดใหญ่ เนื่องจากส่วนต่าง ๆ ของสคริปต์มักใช้ตัวแปรที่มีชื่อเดียวกัน การกำหนดขอบเขตบริบทในเครื่องจะเป็นการกำหนดขอบเขตของโค้ดที่สามารถเข้าถึงตัวแปรได้ ทำให้โค้ดมีประสิทธิภาพมากขึ้น เป็นโมดูล และแก้ปัญหาได้ง่ายขึ้น
ตัวแปรที่มีการกำหนดขอบเขตแบบโกลบอลเรียกว่าโกลบอล และตัวแปรที่มีขอบเขตภายในเรียกว่าโลคัล
นี่คือตัวอย่างวิธีการทำงานของตัวแปรโกลบอลและโลคัล
";) กล่าวสวัสดี (); echo" ค่า \ $ globalName: "$ globalName"
"; echo" ค่า \ $ localName: "$ localName"
";
?>
สวัสดีแฮร์รี่! $ GlobalName ค่า: "Zoe" $ localName ค่า: ""
ในสคริปต์นี้ เราได้สร้างสองตัวแปร:
- $ globalName- นี่คือ โลกตัวแปร
- $ localName- นี่คือ ท้องถิ่นตัวแปรที่สร้างขึ้นภายในฟังก์ชัน sayHello ()
หลังจากสร้างตัวแปรและฟังก์ชันแล้ว สคริปต์จะเรียก sayHello () ซึ่งส่งเอาต์พุตว่า "Hello Harry!" ... สคริปต์จะพยายามสะท้อนค่าของตัวแปรทั้งสอง นี่คือสิ่งที่เกิดขึ้น:
- เพราะ $ globalNameถูกสร้างขึ้นนอกฟังก์ชัน ซึ่งสามารถใช้ได้ทุกที่ในสคริปต์ ดังนั้น "Zoya" จะแสดงขึ้น
- $ localNameจะใช้ได้เฉพาะในฟังก์ชัน sayHello () เนื่องจากการแสดงออกของ echo อยู่นอกฟังก์ชัน PHP จึงไม่อนุญาตการเข้าถึงตัวแปรในเครื่อง แต่ PHP ถือว่าโค้ดจะสร้างตัวแปรใหม่ชื่อ $ localName ซึ่งจะได้รับค่าดีฟอลต์ของสตริงว่าง นี่คือสาเหตุที่การเรียก echo ครั้งที่สองพิมพ์ค่า "" สำหรับตัวแปร $ localName
การเข้าถึงตัวแปรส่วนกลางภายในฟังก์ชัน
ในการเข้าถึงตัวแปรส่วนกลาง ตกงานแค่เขียนชื่อเธอ แต่การเข้าถึงตัวแปรโกลบอล ฟังก์ชั่นภายในคุณต้องประกาศตัวแปรเป็น global ในฟังก์ชันก่อนโดยใช้คำสำคัญ global:
ฟังก์ชัน myFunction () (global $ globalVariable; // เข้าถึงตัวแปรส่วนกลาง $ globalVariable)
หากคุณไม่ทำเช่นนั้น PHP จะถือว่าคุณกำลังสร้างหรือใช้ตัวแปรในเครื่อง
นี่คือตัวอย่างสคริปต์ที่ใช้ตัวแปรส่วนกลางภายในฟังก์ชัน:
"; global $ globalName; echo" สวัสดี $ globalName!
";) พูดสวัสดี ();?>
เมื่อดำเนินการ สคริปต์จะแสดงผล:
สวัสดีแฮร์รี่! สวัสดี Zoya!
ฟังก์ชัน sayHello () ใช้คำสำคัญสากลเพื่อประกาศตัวแปร $ globalName เป็น global จากนั้นเธอก็สามารถเข้าถึงตัวแปรและแสดงค่าของมันได้ ("Zoya")
ซุปเปอร์โกลบอลคืออะไร?
PHP มีชุดพิเศษของอาร์เรย์ส่วนกลางที่กำหนดไว้ล่วงหน้าซึ่งมีข้อมูลต่างๆ อาร์เรย์ดังกล่าวเรียกว่า ซุปเปอร์โกลบอล,เนื่องจากสามารถเข้าถึงได้จากทุกที่ในสคริปต์ รวมถึงพื้นที่ฟังก์ชันภายใน และไม่จำเป็นต้องกำหนดโดยใช้คำหลักสากล
นี่คือรายการของ superglobals ที่มีอยู่ใน PHP 5.3:
- $ GLOBALS - รายการตัวแปรส่วนกลางทั้งหมดในสคริปต์ (ยกเว้น superglobals)
- $ _GET - มีรายการช่องแบบฟอร์มทั้งหมดที่ส่งโดยเบราว์เซอร์โดยใช้คำขอ GET
- $ _POST - มีรายการช่องแบบฟอร์มทั้งหมดที่ส่งโดยเบราว์เซอร์โดยใช้คำขอ POST
- $ _COOKIE - มีรายการคุกกี้ทั้งหมดที่ส่งโดยเบราว์เซอร์
- $ _REQUEST - มีคีย์ / ค่าผสมทั้งหมดที่มีอยู่ในอาร์เรย์ $ _GET, $ _POST, $ _COOKIE
- $ _FILES - มีรายการไฟล์ทั้งหมดที่โหลดโดยเบราว์เซอร์
- $ _SESSION - ให้คุณจัดเก็บและใช้ตัวแปรเซสชันสำหรับเบราว์เซอร์ปัจจุบัน
- $ _SERVER - มีข้อมูลเกี่ยวกับเซิร์ฟเวอร์ เช่น ชื่อไฟล์ของสคริปต์ที่กำลังดำเนินการและที่อยู่ IP ของเบราว์เซอร์
- $ _ENV - ประกอบด้วยรายการตัวแปรสภาพแวดล้อมที่ส่งผ่านไปยัง PHP เช่นตัวแปร CGI
หากคุณเรียกใช้สคริปต์ด้านบนด้วยสตริง URL http://www.example.com/script.php?yourName=Fred สคริปต์จะแสดงผล:
สวัสดีเฟร็ด!
คำเตือน!ในสคริปต์จริง คุณไม่ควรใช้การถ่ายโอนข้อมูลดังกล่าวเนื่องจากความปลอดภัยที่อ่อนแอ คุณควรตรวจสอบหรือกรองข้อมูลของคุณเสมอ
$ GLOBALS superglobal ใช้งานได้สะดวกมาก เนื่องจากช่วยให้คุณสามารถจัดระเบียบการเข้าถึงตัวแปรส่วนกลางในฟังก์ชันโดยไม่ต้องใช้คำหลักสากล ตัวอย่างเช่น:
";) พูดสวัสดี (); // พิมพ์" สวัสดี Zoe! "?>
ตัวแปรคงที่: พวกมันอยู่ใกล้ ๆ
เมื่อคุณสร้างตัวแปรโลคัลภายในฟังก์ชัน ตัวแปรนั้นจะมีอยู่ในขณะที่ฟังก์ชันกำลังทำงานอยู่เท่านั้น เมื่อฟังก์ชันสิ้นสุดลง ตัวแปรโลคัลจะหายไป เมื่อฟังก์ชันถูกเรียกอีกครั้ง ตัวแปรโลคัลใหม่จะถูกสร้างขึ้น
วิธีนี้ใช้ได้ผลดีในกรณีส่วนใหญ่ วิธีนี้จะทำให้ฟังก์ชันต่างๆ มีอยู่ในตัวและทำงานเหมือนเดิมทุกครั้งที่มีการเรียกใช้
อย่างไรก็ตาม มีบางสถานการณ์ที่สะดวกในการสร้างตัวแปรท้องถิ่นที่ "จดจำ" ค่าของมันระหว่างการเรียกใช้ฟังก์ชัน ตัวแปรดังกล่าวเรียกว่าคงที่
ในการสร้างตัวแปรสแตติกในฟังก์ชัน คุณต้องใช้คีย์เวิร์ดสแตติกหน้าชื่อตัวแปรและต้องแน่ใจว่าได้กำหนดค่าเริ่มต้นให้กับตัวแปรดังกล่าว ตัวอย่างเช่น:
ฟังก์ชัน myFunction () (คงที่ $ myVariable = 0;)
ลองพิจารณาสถานการณ์เมื่อสะดวกที่จะใช้ตัวแปรคงที่ สมมติว่าคุณสร้างฟังก์ชันที่เมื่อถูกเรียก จะสร้างวิดเจ็ตและแสดงจำนวนวิดเจ็ตที่สร้างไว้แล้ว คุณสามารถลองเขียนโค้ดแบบนี้โดยใช้ตัวแปรในเครื่อง:
"; echo createWidget ()" เราได้สร้างไว้แล้ว
"; echo createWidget ()" เราได้สร้างไว้แล้ว>
";
?>
แต่เนื่องจากตัวแปร $ numWidgets ถูกสร้างขึ้นทุกครั้งที่มีการเรียกใช้ฟังก์ชัน เราจะได้รับผลลัพธ์ดังต่อไปนี้:
เราสร้างวิดเจ็ตบางส่วน ... 1 เราได้สร้างไว้แล้ว 1 เราได้สร้างไว้แล้ว 1 เราได้สร้างไว้แล้ว
แต่ด้วยการใช้ตัวแปรสแตติก เราสามารถเก็บค่าจากการเรียกใช้ฟังก์ชันหนึ่งไปยังฟังก์ชันถัดไป:
"; echo createWidget ()" เราได้สร้างไว้แล้ว
"; echo createWidget ()" เราได้สร้างไว้แล้ว
"; echo createWidget ()."> เราได้สร้างไว้แล้ว
";
?>
สคริปต์จะสร้างผลลัพธ์ที่คาดหวัง:
เราสร้างวิดเจ็ตบางส่วน ... 1 เราได้สร้างไว้แล้ว 2 เราได้สร้างไว้แล้ว 3 เราได้สร้างไว้แล้ว
แม้ว่าตัวแปรสแตติกจะคงค่าไว้ระหว่างการเรียกใช้ฟังก์ชัน แต่จะใช้ได้เฉพาะในเวลาที่สคริปต์ทำงานเท่านั้น ทันทีที่สคริปต์ดำเนินการเสร็จสิ้น ตัวแปรสแตติกทั้งหมดจะถูกทำลาย เช่นเดียวกับตัวแปรท้องถิ่นและตัวแปรส่วนกลาง
นั่นคือทั้งหมด! ตรวจสอบเอกสาร PHP บ่อยๆ