ตัวแปรใน PHP ขอบเขตของตัวแปร PHP ทุกสิ่งที่คุณอยากรู้แต่ไม่กล้าถาม จะแสดงตัวแปร php ทั้งหมดได้อย่างไร
ตัวแปรใน php.ini- นี่คือที่เก็บข้อมูลชนิดหนึ่งที่สามารถบรรจุได้ ประเภทต่างๆข้อมูล (ข้อความ ตัวเลข อาร์เรย์ ฯลฯ) โดยทั่วไป ตัวแปรช่วยให้คุณสร้าง จัดเก็บ เปลี่ยนแปลง และเข้าถึงข้อมูลที่ระบุในตัวแปรได้อย่างรวดเร็วในภายหลัง
วิธีสร้างตัวแปรใน PHP
เริ่มแรกตัวแปรจะมีเครื่องหมาย $ (ดอลลาร์) - การกำหนดการใช้ตัวแปรตามด้วยตัวอักษร ตัวอักษรละติน(จาก a ถึง z และเล็กและใหญ่) ในตอนท้ายฉันสามารถมีได้ ตัวเลข- นอกจากนี้ยังสามารถใช้ขีดล่างในชื่อเรื่องได้ (ไม่ใช่ที่ส่วนท้าย)คุณจะตั้งชื่อตัวแปรได้อย่างไร:
$var
$ตัวแปร
$ปี1945
$_ตัวแปร
จะไม่ตั้งชื่อตัวแปรได้อย่างไร:
$1 - ประกอบด้วยตัวเลขเท่านั้น
$1var - คุณไม่สามารถเริ่มชื่อตัวแปรด้วยตัวเลขได้
$/var - สำหรับอักขระเพิ่มเติม อนุญาตให้ใช้เฉพาะขีดล่างเท่านั้น _
$variable - เอกสาร PHP อนุญาตให้ใช้ Cyrillic ได้ แต่ไม่แนะนำ
$var iable - ไม่สามารถใช้ช่องว่างได้
ตัวแปรแต่ละตัวจะได้รับการกำหนดค่า เครื่องหมายนี้ใช้เพื่อกำหนดค่า =
(เท่ากับ) ในระหว่างการประมวลผลสคริปต์ ค่าของตัวแปรสามารถเปลี่ยนแปลงซ้ำๆ ขึ้นอยู่กับเงื่อนไขต่างๆ
$เมือง = "มอสโก"; // ตัวแปร $city ได้รับการกำหนดสตริง (ในเครื่องหมายคำพูด) ค่า Moscow
$ ปี = 1147; // และตัวแปร $year ถูกกำหนดให้เป็นค่าตัวเลข 1147
?>
$name = "อเล็กซานเดอร์";
$Name = "อเล็กซ์";
echo "$ชื่อ, $ชื่อ"; // จะพิมพ์ว่า "Alexander, Alexey"
?>
การพิมพ์ตัวแปร PHP
แยกกันคุณควรดูวิธีการแสดงตัวแปรโดยใช้ คำสั่งเอาท์พุทซึ่งเราได้ตรวจสอบผลงานในบทเรียนที่แล้วการสร้างหน้า PHP ตัวดำเนินการอนุมาน - ด้านล่างนี้ฉันจะยกตัวอย่างพร้อมความคิดเห็นจำนวนหนึ่ง// นี่คือวิธีที่เรากำหนดค่าของตัวแปร
$name1 = "อเล็กซ์";
$name2 = "อเล็กซานเดอร์";
// ตัวแปรเอาท์พุต
เสียงสะท้อน $name2; // เอาท์พุต: อเล็กซานเดอร์
echo "name1 คือ $name1"; // name1 คือ Alexey
// เมื่อใช้เครื่องหมายคำพูดเดี่ยว เอาต์พุต
// ชื่อตัวแปร ไม่ใช่ค่า
echo "name1 คือ $name1"; // จะส่งออก: name1 คือ $name1
// คุณสามารถแสดงค่าของตัวแปรได้อย่างง่ายดาย
เสียงสะท้อน $name1; //อเล็กซี่
เสียงสะท้อน $name1,$name2; //อเล็กซี่อเล็กซานเดอร์
เสียงสะท้อน $name1" ".$name2; // อเล็กเซย์ อเล็กซานเดอร์
เสียงสะท้อน "$name1, $name2"; // อเล็กเซย์, อเล็กซานเดอร์
เอคโค่<<
หลายบรรทัดที่มีการทดแทนตัวแปร $variable
จบ;
การดำเนินการกับตัวแปร PHP
การดำเนินการทางคณิตศาสตร์ใน PHPในกรณีของค่าตัวเลข คุณสามารถดำเนินการทางคณิตศาสตร์ได้ เช่น การบวก ลบ การคูณ และอื่นๆ
-$ก(ปฏิเสธ) เปลี่ยนเครื่องหมายของ $a
$ก + $ข(เพิ่มเติม) ผลรวมของ $a และ $b
$ก - $ข(ลบ) ผลต่างของ $a และ $b
$ก * $ข(การคูณ) ผลคูณของ $a และ $b
$ก / $ข(หาร) ผลหารของ $a หารด้วย $b
$a % $b(การหารแบบโมดูโล) เศษจำนวนเต็มเมื่อ $a หารด้วย $b
ลองดูตัวอย่าง
$a = 2; // โปรดทราบว่าในกรณีของตัวเลข จะไม่มีการใช้เครื่องหมายคำพูด
$ข = 3; // โปรดทราบว่าในกรณีของตัวเลข จะไม่มีการใช้เครื่องหมายคำพูด
$ผลลัพธ์ = $a + $b; // เพิ่มตัวแปร
สะท้อน $ ผลลัพธ์; // จะพิมพ์ 5
$ผลลัพธ์ = $b - $a; // เพิ่มตัวแปร
สะท้อน $ ผลลัพธ์; // จะพิมพ์ 1
การดำเนินการเพิ่มและลดค่าใน PHP
การดำเนินการเหล่านี้จะมีประโยชน์เป็นหลักในการสร้างวงจร ซึ่งเราจะพูดถึงในภายหลัง
คำนำหน้า- ตัวดำเนินการที่เขียนก่อนตัวแปร ( --$ก; +$ก- ส่งคืนค่าของตัวแปรก่อนการเปลี่ยนแปลง
โพสต์ฟิกซ์- ตัวดำเนินการที่เขียนหลังตัวแปร ( $a--; $a--- ส่งกลับค่าของตัวแปรที่มีการเปลี่ยนแปลง
เพิ่มขึ้น- การเพิ่มมูลค่า
ลดลง- มูลค่าลดลง
+$กเพิ่มคำนำหน้า เพิ่มค่า $a ทีละค่าและส่งกลับค่า $a
$a++การเพิ่มขึ้นภายหลัง ส่งกลับค่า $a แล้วเพิ่ม $a ทีละหนึ่ง
--$กคำนำหน้าลดลง ลดค่า $a ลงหนึ่งและส่งกลับค่า $a
$a--การลดลงภายหลัง ส่งคืนค่า $a แล้วลดค่า $a ทีละค่า
เสียงสะท้อน "
การเพิ่มขึ้นภายหลัง
";$a = 5;
echo "ต้องเป็น 5: " . $a++ . "\n";
เอคโค่"
เพิ่มคำนำหน้า
";$a = 5;
echo "ต้องเป็น 6: " . +$ก. "\n";
echo "ต้องเป็น 6: " . $ก. "\n";
เอคโค่"
การลดลงภายหลัง
";$a = 5;
echo "ต้องเป็น 5: " . $ก-- . "\n";
เอคโค่"
คำนำหน้าลดลง
";$a = 5;
echo "ต้องเป็น 4: " . --$ก. "\n";
echo "ต้องเป็น 4: " . $a "\n";
?>
การดำเนินการมอบหมายใน 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 "ที่นั่น!";
นอกจากนี้ยังมี การดำเนินการเปรียบเทียบและ ตรรกะแต่เราจะพูดถึงสิ่งเหล่านี้ในบทเรียนต่อไปนี้ ฉันจะพยายามไม่ทำให้คุณกลัวด้วยข้อมูลจำนวนมากทันที!)
13 ปีที่แล้ว
Gotcha เล็กน้อยที่ต้องระวัง:
ถ้าคุณ ปิด RegisterGlobals และที่เกี่ยวข้อง จากนั้นใช้ get_defin_vars() คุณอาจเห็นสิ่งต่อไปนี้:
อาร์เรย์
[ GLOBALS ] => อาร์เรย์
[ GLOBALS ] => อาร์เรย์
*การเรียกซ้ำ*
[ _POST ] => อาร์เรย์()
[ _GET ] => อาร์เรย์()
[ _คุกกี้ ] => อาร์เรย์()
[ _FILES ] => อาร์เรย์()
)
[ _POST ] => อาร์เรย์()
[ _GET ] => อาร์เรย์()
[ _คุกกี้ ] => อาร์เรย์()
[ _FILES ] => อาร์เรย์()
)
?>
โปรดสังเกตว่า $_SERVER ไม่อยู่ที่นั่น ดูเหมือนว่า php จะโหลด superglobal $_SERVER เท่านั้นหากนำไปใช้ที่ไหนสักแห่ง:
พิมพ์ "
" . htmlspecialchars(print_r(get_defin_vars(), true))"" ;
พิมพ์ "
" . htmlspecialchars (print_r ($_SERVER , true )) . "" ;
?>
จากนั้น $_SERVER จะปรากฏในทั้งสองรายการ ฉันเดาว่ามันไม่ใช่ gotcha จริงๆ เพราะจะไม่มีอะไรเลวร้ายเกิดขึ้นไม่ว่าจะด้วยวิธีใดก็ตาม แต่มันก็เป็นความอยากรู้อยากเห็นที่น่าสนใจ
6 ปีที่แล้ว
เนื่องจาก get_defin_vars() รับเฉพาะตัวแปร ณ จุดที่คุณเรียกใช้ฟังก์ชัน จึงมีวิธีง่ายๆ ในการรับตัวแปรที่กำหนดภายในขอบเขตปัจจุบัน
// ด้านบนสุดของสคริปต์ php ของคุณ
$vars = get_defin_vars();
// ตอนนี้ทำธุระของคุณซะ
$foo = "ฟู" ;
$บาร์ = "บาร์" ;
// รับตัวแปรทั้งหมดที่กำหนดไว้ในขอบเขตปัจจุบัน
$vars = array_diff(get_defin_vars(), $vars);
เสียงสะท้อน "
" ;" ;
print_r($วาร์ส);
เสียงสะท้อน "
?>
15 ปีที่แล้ว
นี่คือฟังก์ชันที่สร้างรายงานการแก้ปัญหาสำหรับการแสดงผลหรืออีเมล
ใช้ get_defin_vars เหมาะสำหรับการถ่ายภาพสแนปชอตที่มีรายละเอียดโดยไม่ต้อง
ขึ้นอยู่กับการป้อนข้อมูลของผู้ใช้
ฟังก์ชัน GenerateDebugReport ($method, $definition_vars, $email = "unknown" )(
// ฟังก์ชั่นสร้างรายงานการแก้ปัญหาเพื่อแสดงหรือส่งอีเมล
// การใช้งาน: GenerateDebugReport(method,get_defin_vars(),email);
// โดยที่วิธีการคือ "เบราว์เซอร์" หรือ "อีเมล"
// สร้างรายการละเว้นสำหรับคีย์ที่ส่งคืนโดย "get_defin_vars"
// ตัวอย่างเช่น HTTP_POST_VARS, HTTP_GET_VARS และอื่นๆ
// ซ้ำซ้อน (เหมือนกับ _POST, _GET)
// รวมถึง vars ที่คุณต้องการละเว้นด้วยเหตุผลด้านความปลอดภัย - เช่น PHPSSID.
$ignorelist =array("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 = date ("ด/วัน/ปี ชม:m:s" );
$message = "สร้างรายงานดีบั๊กแล้ว $timestamp \n" ;
// รับข้อผิดพลาด SQL สุดท้ายเพื่อการวัดผลที่ดี โดยที่ $link คือตัวระบุทรัพยากร
// สำหรับ mysql_connect แสดงความคิดเห็นหรือแก้ไขฐานข้อมูลหรือการตั้งค่านามธรรมของคุณ
$ ลิงค์ทั่วโลก ;
$sql_error = mysql_error($ลิงค์);
ถ้า($sql_error )(
$message .= "\nข้อความ Mysql:\n" mysql_error($ลิงค์);
}
//จบ MySQL
// สามารถใช้ฟังก์ชันแบบเรียกซ้ำได้ที่นี่ คุณได้รับความคิด ;-)
foreach($define_vars เป็น $key => $val )(
if(is_array ($val ) && ! in_array ($key , $ignorelist ) && นับ ($val ) > 0 )(
$message .= "\n $key array (key=value):\n" ;
foreach($val เป็น $subkey => $subval )(
if(! in_array ($subkey , $ignorelist ) && ! is_array ($subval ))(
$message .= $คีย์ย่อย - $ย่อย. "\n" ;
}
elseif(! in_array ($คีย์ย่อย, $ignorelist) && is_array ($subval ))(
foreach($subval เป็น $subsubkey => $subsubval )(
if(! in_array ($คีย์ย่อย, $ignorelist))(
$ข้อความ .= $คีย์ย่อย - $ย่อยย่อย "\n" ;
}
}
}
}
}
อย่างอื่น(! is_array ($วาล) && ! in_array ($คีย์ , $ignorelist ) && $val )(
$message .= "\nตัวแปร" $คีย์ - $วาล "\n" ;
}
}
ถ้า($method == "เบราว์เซอร์" )(
echo nl2br($ข้อความ);
}
elseif($method == "อีเมล" )(
ถ้า($อีเมล์ == "ไม่ได้กำหนด" )(
$อีเมล์ = $_SERVER [ "SERVER_ADMIN" ];
}
$mresult = mail ($email , "รายงานการแก้ปัญหาสำหรับ" . $_ENV [ "HOSTNAME" ]. "" , $message );
ถ้า($mresult == 1 )(
เสียงสะท้อน "ส่งรายงานการแก้ไขเรียบร้อยแล้ว\n";
}
อื่น(
เสียงสะท้อน "ไม่สามารถส่งรายงานการแก้ไขข้อบกพร่อง\n";
}
}
}
?>
17 ปีที่แล้ว
รูทีนง่ายๆ ในการแปลงอ็อบเจ็กต์ get_defin_vars เป็น XML
ฟังก์ชั่น obj2xml ($v, $indent = "" ) (
ในขณะที่ (รายการ($key , $val ) = แต่ละ ($v )) (
ถ้า ($key == "__attr" ) ดำเนินการต่อ;
// ตรวจสอบ __attr
ถ้า (is_object ($val -> __attr )) (
ในขณะที่ (list($key2 , $val2 ) = แต่ละ ($val -> __attr )) (
$attr .= " $key2 =\" $val2 \"" ;
}
}
อย่างอื่น $attr = "" ;
ถ้า (is_array ($val ) || is_object ($val )) (
พิมพ์(" $indent<
$key$attr
>\n" );
obj2xml($val, $indent. "");
พิมพ์(" $indent
$key
>\n" );
}
อย่างอื่นพิมพ์(" $indent<
$key$attr
>$วาล
$key
>\n" );
}
}
// ตัวอย่างวัตถุ
$x -> ชื่อ -> แรก = "จอห์น" ;
$x -> ชื่อ -> สุดท้าย = "สมิธ" ;
$x -> arr [ "ผลไม้" ] = "กล้วย" ;
$x -> arr [ "ผัก" ] = "แครอท" ;
$y -> ลูกค้า = $x ;
$y -> ลูกค้า -> __attr -> id = "176C4" ;
$z = get_defin_vars();
obj2xml($z["y"]);
?>
จะส่งออก:
11 ปีที่แล้ว
ตามหมายเหตุ get_defin_vars() จะไม่ส่งคืนชุดของการอ้างอิงตัวแปร (ตามที่ฉันหวังไว้) ตัวอย่างเช่น:
//กำหนดตัวแปร
$my_var = "ฟู" ;
// รับรายการตัวแปรที่กำหนดของเรา
$define_vars = get_defin_vars();
// ตอนนี้ลองเปลี่ยนค่าผ่านอาร์เรย์ที่ส่งคืน
$define_vars [ "my_var" ] = "bar" ;
เสียงสะท้อน $my_var , "\n" ;
?>
จะส่งออก "foo" (ค่าดั้งเดิม) คงจะดีไม่น้อยถ้า get_define_vars() มีอาร์กิวเมนต์ที่เป็นทางเลือกเพื่อให้เป็นข้อมูลอ้างอิง แต่ฉันคิดว่ามันเป็นคำขอที่ค่อนข้างพิเศษ คุณสามารถทำได้ด้วยตัวเอง (สะดวกน้อยกว่า) ด้วยสิ่งที่ชอบ:
$define_vars = array();
$var_names = array_keys(get_defin_vars());
foreach ($var_names เป็น $var_name)
{
$define_vars [ $var_name ] =& $ $var_name ;
}
?>
1 ปีที่ผ่านมา
ฉันโพสต์ที่นี่ก่อนหน้านี้เกี่ยวกับ "สิ่งนี้" ที่อยู่ใน get_defin_vars
ปรากฎว่าไม่ได้อยู่ที่นั่นเสมอไป แต่ในบางกรณีก็จะปรากฏขึ้นอย่างอธิบายไม่ได้
Php -r "
การทดสอบชั้นเรียน(
ฟังก์ชั่นสาธารณะ a() (var_dump(array_keys(get_defin_vars()));$a = 123;)
ฟังก์ชั่นสาธารณะ b() (var_dump(array_keys(get_defin_vars()));$this;)
}
$t = การทดสอบใหม่();
$t->a();
$t->b();
"
อาร์เรย์()
อาร์เรย์ ("นี้")
สิ่งนี้ไม่ได้เกิดขึ้นใน PHP 7.2 แต่จะเกิดขึ้นใน PHP 5.6
1 ปีที่ผ่านมา
ความคิดเห็นบางส่วนที่นี่ชี้ให้เห็นว่าฟังก์ชันนี้จะไม่ส่งคืนการอ้างอิง อย่างไรก็ตามมันจะส่งคืนชื่อและชื่อเป็น "ข้อมูลอ้างอิง"
ฉันจะไม่แนะนำคำแนะนำที่นี่ที่แปลงเป็นข้อมูลอ้างอิง
ฟังก์ชั่นสาธารณะ x($a, $b, $c) (
foreach(array_keys(get_defin_vars()) เป็น $key)
if($key !== "สิ่งนี้")
$นี่->y($($คีย์));
}
ฟังก์ชั่นสาธารณะ y(&$input) (
$อินพุต++;
}
แทนที่จะใช้ $() คุณสามารถใช้ $$ ได้
ฉันได้ทำสิ่งที่แปลกประหลาดในช่วงเวลาของฉันเพื่อสร้างโค้ดที่ธรรมดามาก แต่ฉันไม่เคยต้องทำอะไรเลยเหมือนที่กล่าวมาข้างต้น มันอาจจะไม่ได้ผลด้วยซ้ำ (แต่ควรจะเพราะมันไม่ต่างกับ $a[$key])
คุณสามารถทำ $$key++ ได้ แต่ฉันไม่เคยเห็นโค้ดแบบนั้นซึ่งไม่ได้แย่ขนาดนั้นมาก่อน (ใช้ไดนามิกโดยที่ไดนามิกไม่มีประโยชน์)
หากคุณกำลังทำอะไรแบบนั้นก็ให้ตรวจสอบเพิ่มเติม
13 ปีที่แล้ว
Gotcha เล็กน้อยที่ต้องระวัง:
หากคุณปิด RegisterGlobals และที่เกี่ยวข้อง ให้ใช้ get_defin_vars() คุณอาจเห็นสิ่งต่อไปนี้:
อาร์เรย์
[ GLOBALS ] => อาร์เรย์
[ GLOBALS ] => อาร์เรย์
*การเรียกซ้ำ*
[ _POST ] => อาร์เรย์()
[ _GET ] => อาร์เรย์()
[ _คุกกี้ ] => อาร์เรย์()
[ _FILES ] => อาร์เรย์()
)
[ _POST ] => อาร์เรย์()
[ _GET ] => อาร์เรย์()
[ _คุกกี้ ] => อาร์เรย์()
[ _FILES ] => อาร์เรย์()
)
?>
โปรดสังเกตว่า $_SERVER ไม่อยู่ที่นั่น ดูเหมือนว่า php จะโหลด superglobal $_SERVER เท่านั้นหากนำไปใช้ที่ไหนสักแห่ง:
พิมพ์ "
" . htmlspecialchars(print_r(get_defin_vars(), true))"" ;
พิมพ์ "
" . htmlspecialchars (print_r ($_SERVER , true )) . "" ;
?>
จากนั้น $_SERVER จะปรากฏในทั้งสองรายการ ฉันเดาว่ามันไม่ใช่ gotcha จริงๆ เพราะจะไม่มีอะไรเลวร้ายเกิดขึ้นไม่ว่าจะด้วยวิธีใดก็ตาม แต่มันก็เป็นความอยากรู้อยากเห็นที่น่าสนใจ
6 ปีที่แล้ว
เนื่องจาก get_defin_vars() รับเฉพาะตัวแปร ณ จุดที่คุณเรียกใช้ฟังก์ชัน จึงมีวิธีง่ายๆ ในการรับตัวแปรที่กำหนดภายในขอบเขตปัจจุบัน
// ด้านบนสุดของสคริปต์ php ของคุณ
$vars = get_defin_vars();
// ตอนนี้ทำธุระของคุณซะ
$foo = "ฟู" ;
$บาร์ = "บาร์" ;
// รับตัวแปรทั้งหมดที่กำหนดไว้ในขอบเขตปัจจุบัน
$vars = array_diff(get_defin_vars(), $vars);
เสียงสะท้อน "
" ;" ;
print_r($วาร์ส);
เสียงสะท้อน "
?>
15 ปีที่แล้ว
นี่คือฟังก์ชันที่สร้างรายงานการแก้ปัญหาสำหรับการแสดงผลหรืออีเมล
ใช้ get_defin_vars เหมาะสำหรับการถ่ายภาพสแนปชอตที่มีรายละเอียดโดยไม่ต้อง
ขึ้นอยู่กับการป้อนข้อมูลของผู้ใช้
ฟังก์ชัน GenerateDebugReport ($method, $definition_vars, $email = "unknown" )(
// ฟังก์ชั่นสร้างรายงานการแก้ปัญหาเพื่อแสดงหรือส่งอีเมล
// การใช้งาน: GenerateDebugReport(method,get_defin_vars(),email);
// โดยที่วิธีการคือ "เบราว์เซอร์" หรือ "อีเมล"
// สร้างรายการละเว้นสำหรับคีย์ที่ส่งคืนโดย "get_defin_vars"
// ตัวอย่างเช่น HTTP_POST_VARS, HTTP_GET_VARS และอื่นๆ
// ซ้ำซ้อน (เหมือนกับ _POST, _GET)
// รวมถึง vars ที่คุณต้องการละเว้นด้วยเหตุผลด้านความปลอดภัย - เช่น PHPSSID.
$ignorelist =array("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 = date ("ด/วัน/ปี ชม:m:s" );
$message = "สร้างรายงานดีบั๊กแล้ว $timestamp \n" ;
// รับข้อผิดพลาด SQL สุดท้ายเพื่อการวัดผลที่ดี โดยที่ $link คือตัวระบุทรัพยากร
// สำหรับ mysql_connect แสดงความคิดเห็นหรือแก้ไขฐานข้อมูลหรือการตั้งค่านามธรรมของคุณ
$ ลิงค์ทั่วโลก ;
$sql_error = mysql_error($ลิงค์);
ถ้า($sql_error )(
$message .= "\nข้อความ Mysql:\n" mysql_error($ลิงค์);
}
//จบ MySQL
// สามารถใช้ฟังก์ชันแบบเรียกซ้ำได้ที่นี่ คุณได้รับความคิด ;-)
foreach($define_vars เป็น $key => $val )(
if(is_array ($val ) && ! in_array ($key , $ignorelist ) && นับ ($val ) > 0 )(
$message .= "\n $key array (key=value):\n" ;
foreach($val เป็น $subkey => $subval )(
if(! in_array ($subkey , $ignorelist ) && ! is_array ($subval ))(
$message .= $คีย์ย่อย - $ย่อย. "\n" ;
}
elseif(! in_array ($คีย์ย่อย, $ignorelist) && is_array ($subval ))(
foreach($subval เป็น $subsubkey => $subsubval )(
if(! in_array ($คีย์ย่อย, $ignorelist))(
$ข้อความ .= $คีย์ย่อย - $ย่อยย่อย "\n" ;
}
}
}
}
}
อย่างอื่น(! is_array ($วาล) && ! in_array ($คีย์ , $ignorelist ) && $val )(
$message .= "\nตัวแปร" $คีย์ - $วาล "\n" ;
}
}
ถ้า($method == "เบราว์เซอร์" )(
echo nl2br($ข้อความ);
}
elseif($method == "อีเมล" )(
ถ้า($อีเมล์ == "ไม่ได้กำหนด" )(
$อีเมล์ = $_SERVER [ "SERVER_ADMIN" ];
}
$mresult = mail ($email , "รายงานการแก้ปัญหาสำหรับ" . $_ENV [ "HOSTNAME" ]. "" , $message );
ถ้า($mresult == 1 )(
เสียงสะท้อน "ส่งรายงานการแก้ไขเรียบร้อยแล้ว\n";
}
อื่น(
เสียงสะท้อน "ไม่สามารถส่งรายงานการแก้ไขข้อบกพร่อง\n";
}
}
}
?>
17 ปีที่แล้ว
รูทีนง่ายๆ ในการแปลงอ็อบเจ็กต์ get_defin_vars เป็น XML
ฟังก์ชั่น obj2xml ($v, $indent = "" ) (
ในขณะที่ (รายการ($key , $val ) = แต่ละ ($v )) (
ถ้า ($key == "__attr" ) ดำเนินการต่อ;
// ตรวจสอบ __attr
ถ้า (is_object ($val -> __attr )) (
ในขณะที่ (list($key2 , $val2 ) = แต่ละ ($val -> __attr )) (
$attr .= " $key2 =\" $val2 \"" ;
}
}
อย่างอื่น $attr = "" ;
ถ้า (is_array ($val ) || is_object ($val )) (
พิมพ์(" $indent<
$key$attr
>\n" );
obj2xml($val, $indent. "");
พิมพ์(" $indent
$key
>\n" );
}
อย่างอื่นพิมพ์(" $indent<
$key$attr
>$วาล
$key
>\n" );
}
}
// ตัวอย่างวัตถุ
$x -> ชื่อ -> แรก = "จอห์น" ;
$x -> ชื่อ -> สุดท้าย = "สมิธ" ;
$x -> arr [ "ผลไม้" ] = "กล้วย" ;
$x -> arr [ "ผัก" ] = "แครอท" ;
$y -> ลูกค้า = $x ;
$y -> ลูกค้า -> __attr -> id = "176C4" ;
$z = get_defin_vars();
obj2xml($z["y"]);
?>
จะส่งออก:
11 ปีที่แล้ว
ตามหมายเหตุ get_defin_vars() จะไม่ส่งคืนชุดของการอ้างอิงตัวแปร (ตามที่ฉันหวังไว้) ตัวอย่างเช่น:
//กำหนดตัวแปร
$my_var = "ฟู" ;
// รับรายการตัวแปรที่กำหนดของเรา
$define_vars = get_defin_vars();
// ตอนนี้ลองเปลี่ยนค่าผ่านอาร์เรย์ที่ส่งคืน
$define_vars [ "my_var" ] = "bar" ;
เสียงสะท้อน $my_var , "\n" ;
?>
จะส่งออก "foo" (ค่าดั้งเดิม) คงจะดีไม่น้อยถ้า get_define_vars() มีอาร์กิวเมนต์ที่เป็นทางเลือกเพื่อให้เป็นข้อมูลอ้างอิง แต่ฉันคิดว่ามันเป็นคำขอที่ค่อนข้างพิเศษ คุณสามารถทำได้ด้วยตัวเอง (สะดวกน้อยกว่า) ด้วยสิ่งที่ชอบ:
$define_vars = array();
$var_names = array_keys(get_defin_vars());
foreach ($var_names เป็น $var_name)
{
$define_vars [ $var_name ] =& $ $var_name ;
}
?>
1 ปีที่ผ่านมา
ฉันโพสต์ที่นี่ก่อนหน้านี้เกี่ยวกับ "สิ่งนี้" ที่อยู่ใน get_defin_vars
ปรากฎว่าไม่ได้อยู่ที่นั่นเสมอไป แต่ในบางกรณีก็จะปรากฏขึ้นอย่างอธิบายไม่ได้
Php -r "
การทดสอบชั้นเรียน(
ฟังก์ชั่นสาธารณะ a() (var_dump(array_keys(get_defin_vars()));$a = 123;)
ฟังก์ชั่นสาธารณะ b() (var_dump(array_keys(get_defin_vars()));$this;)
}
$t = การทดสอบใหม่();
$t->a();
$t->b();
"
อาร์เรย์()
อาร์เรย์ ("นี้")
สิ่งนี้ไม่ได้เกิดขึ้นใน PHP 7.2 แต่จะเกิดขึ้นใน PHP 5.6
1 ปีที่ผ่านมา
ความคิดเห็นบางส่วนที่นี่ชี้ให้เห็นว่าฟังก์ชันนี้จะไม่ส่งคืนการอ้างอิง อย่างไรก็ตามมันจะส่งคืนชื่อและชื่อเป็น "ข้อมูลอ้างอิง"
ฉันจะไม่แนะนำคำแนะนำที่นี่ที่แปลงเป็นข้อมูลอ้างอิง
ฟังก์ชั่นสาธารณะ x($a, $b, $c) (
foreach(array_keys(get_defin_vars()) เป็น $key)
if($key !== "สิ่งนี้")
$นี่->y($($คีย์));
}
ฟังก์ชั่นสาธารณะ y(&$input) (
$อินพุต++;
}
แทนที่จะใช้ $() คุณสามารถใช้ $$ ได้
ฉันได้ทำสิ่งที่แปลกประหลาดในช่วงเวลาของฉันเพื่อสร้างโค้ดที่ธรรมดามาก แต่ฉันไม่เคยต้องทำอะไรเลยเหมือนที่กล่าวมาข้างต้น มันอาจจะไม่ได้ผลด้วยซ้ำ (แต่ควรจะเพราะมันไม่ต่างกับ $a[$key])
คุณสามารถทำ $$key++ ได้ แต่ฉันไม่เคยเห็นโค้ดแบบนั้นซึ่งไม่ได้แย่ขนาดนั้นมาก่อน (ใช้ไดนามิกโดยที่ไดนามิกไม่มีประโยชน์)
หากคุณกำลังทำอะไรแบบนั้นก็ให้ตรวจสอบเพิ่มเติม
แน่นอนว่าคุณมีตู้เสื้อผ้าหรือตู้ลิ้นชักที่บ้าน หลักการใช้งานนั้นเรียบง่าย: เราใส่สิ่งต่าง ๆ ที่เราไม่ต้องการไว้ที่นั่นในตอนนี้ แต่อาจจำเป็นต้องใช้อีกระยะหนึ่ง
ตัวแปรจะถูกจัดเรียงเหมือนกันทุกประการ คุณสามารถใส่คุณค่าลงไปและเก็บไว้ที่นั่นจนกว่าคุณจะต้องการ
การสร้างตัวแปร
คุณสามารถใส่ค่าลงในตัวแปรได้ดังนี้:
ในโค้ดด้านบน เราสร้างตัวแปร $name และใส่ค่า Ivan ลงไป จากนั้นเราสร้างตัวแปร $age และกำหนดค่าให้เป็น 20
ชื่อ "ตัวแปร" หมายความว่าค่าสามารถเปลี่ยนแปลงได้ระหว่างการเรียกใช้สคริปต์:
ในบางภาษา ตัวแปรจะต้อง "ประกาศ" ก่อนจึงจะใช้ ไม่มีการประกาศใน PHP - ตัวแปรจะถูกสร้างขึ้นทันทีที่คุณใส่ค่าลงไป
อย่างไรก็ตาม โปรแกรมเมอร์ PHP มักจะพูดว่า "ประกาศตัวแปร" แทนที่จะเป็น "สร้างตัวแปร"
นอกจากนี้ แทนที่จะ "ใส่ค่าลงในตัวแปร" พวกเขามักจะพูดว่า "กำหนดค่า"
เหตุผลนั้นง่ายมาก - สัญลักษณ์ = ที่เราเก็บค่าไว้ในตัวแปรนั้นเรียกว่า "ตัวดำเนินการกำหนด" จึงเป็นที่มาของคำว่า "เหมาะสม"
กฎการตั้งชื่อตัวแปร
1. ชื่อตัวแปรขึ้นต้นด้วยสัญลักษณ์ $
2. อักขระตัวที่สองอาจเป็นตัวอักษรหรือขีดล่าง _
ชื่อตัวแปรต้องตรงตามตัวพิมพ์ใหญ่-เล็ก $name และ $Name เป็นตัวแปรที่แตกต่างกัน
การแสดงค่าตัวแปรบนหน้าจอ
คุณสามารถแสดงตัวแปรโดยใช้คำสั่ง echo ที่เราทราบอยู่แล้ว:
คำสั่ง echo ช่วยให้คุณสามารถแสดงค่าหลายค่าพร้อมกัน:
โปรดสังเกตว่าเราส่งค่า 2 ค่าเพื่อสะท้อนโดยคั่นด้วยเครื่องหมายจุลภาค ด้วยวิธีนี้เราสามารถส่งผ่านค่าได้มากเท่าที่เราต้องการ สองตัวอย่างต่อไปนี้จะให้ผลลัพธ์ที่เหมือนกัน:
นอกจากนี้ยังมีไวยากรณ์ชวเลขสำหรับการแสดงตัวแปรใน PHP แทน
= $f_name, " ", $s_name ?>
ก่อนหน้า PHP 5.4 ไวยากรณ์ชวเลขจะทำงานเฉพาะเมื่อมีการเปิดใช้งานคำสั่ง short_open_tag ในการตั้งค่า PHP ซึ่งยังอนุญาตให้ใช้แท็กเปิดที่สั้นลง наравне с
การตรวจสอบค่าของตัวแปร
คำสั่ง echo ไม่สะดวกเสมอไปในการตรวจสอบค่าปัจจุบันของตัวแปร ตัวอย่างเช่น หากคุณพยายามแสดงสตริงว่าง "" จะไม่มีอะไรปรากฏบนหน้าจอเลย และยังไม่ชัดเจนว่าสาเหตุคืออะไร - ตัวแปรว่างหรือโค้ดที่ใช้งานไม่ได้
ดังนั้น ในการตรวจสอบค่าของตัวแปร ฟังก์ชัน var_dump() จึงถูกนำมาใช้:
ผลลัพธ์ของการดำเนินการสคริปต์:
สตริง(5) "วาสยา" สตริง(0) ""
อย่างที่คุณเห็น PHP ไม่เพียงแต่แสดงเนื้อหาของตัวแปรเท่านั้น แต่ยังแสดงจำนวนอักขระ และแม้แต่ประเภทของตัวแปร (สตริง) เราจะดูรายละเอียดประเภทข้อมูลในบทเรียนต่อไปนี้
การลบตัวแปร
คุณสามารถลบตัวแปรที่มีอยู่ได้โดยใช้ฟังก์ชัน unset():
ตอนนี้ก็ถึงเวลาที่จะฝึกฝนสักหน่อย
โปรดจำไว้ว่าปัญหา PHP เกือบทุกปัญหาสามารถมีวิธีแก้ปัญหาได้หลายวิธี ดังนั้น หากวิธีแก้ปัญหาของคุณแตกต่างจากที่เขียนไว้ในไซต์นี้ ไม่ได้หมายความว่าคุณทำอะไรผิดเลย
เขียนสคริปต์ว่า:
1. สร้างตัวแปรด้วยชื่อ ชื่อ เนื้อหา และค่าบางค่า
2. แสดงค่าของตัวแปรหัวเรื่องภายในแท็ก h1 และค่าของตัวแปรเนื้อหาภายในแท็ก div
แสดงวิธีแก้ปัญหา
", $หัวข้อ""; เอคโค่"
ฉันอยากจะดึงความสนใจของคุณอีกครั้งถึงความจริงที่ว่าการตัดสินใจครั้งนี้ไม่ใช่การตัดสินใจที่ถูกต้องเท่านั้น ตัวอย่างเช่น รหัสต่อไปนี้จะให้ผลลัพธ์เดียวกัน: