ตัวแปรใน 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\n" );
}
อย่างอื่นพิมพ์(" $indent< $key$attr >$วาล\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\n" );
}
อย่างอื่นพิมพ์(" $indent< $key$attr >$วาล\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 แทน

ก่อนหน้า PHP 5.4 ไวยากรณ์ชวเลขจะทำงานเฉพาะเมื่อมีการเปิดใช้งานคำสั่ง short_open_tag ในการตั้งค่า PHP ซึ่งยังอนุญาตให้ใช้แท็กเปิดที่สั้นลง

การตรวจสอบค่าของตัวแปร

คำสั่ง echo ไม่สะดวกเสมอไปในการตรวจสอบค่าปัจจุบันของตัวแปร ตัวอย่างเช่น หากคุณพยายามแสดงสตริงว่าง "" จะไม่มีอะไรปรากฏบนหน้าจอเลย และยังไม่ชัดเจนว่าสาเหตุคืออะไร - ตัวแปรว่างหรือโค้ดที่ใช้งานไม่ได้

ดังนั้น ในการตรวจสอบค่าของตัวแปร ฟังก์ชัน var_dump() จึงถูกนำมาใช้:

ผลลัพธ์ของการดำเนินการสคริปต์:

สตริง(5) "วาสยา" สตริง(0) ""

อย่างที่คุณเห็น PHP ไม่เพียงแต่แสดงเนื้อหาของตัวแปรเท่านั้น แต่ยังแสดงจำนวนอักขระ และแม้แต่ประเภทของตัวแปร (สตริง) เราจะดูรายละเอียดประเภทข้อมูลในบทเรียนต่อไปนี้

การลบตัวแปร

คุณสามารถลบตัวแปรที่มีอยู่ได้โดยใช้ฟังก์ชัน unset():

ตอนนี้ก็ถึงเวลาที่จะฝึกฝนสักหน่อย

โปรดจำไว้ว่าปัญหา PHP เกือบทุกปัญหาสามารถมีวิธีแก้ปัญหาได้หลายวิธี ดังนั้น หากวิธีแก้ปัญหาของคุณแตกต่างจากที่เขียนไว้ในไซต์นี้ ไม่ได้หมายความว่าคุณทำอะไรผิดเลย

เขียนสคริปต์ว่า:
1. สร้างตัวแปรด้วยชื่อ ชื่อ เนื้อหา และค่าบางค่า
2. แสดงค่าของตัวแปรหัวเรื่องภายในแท็ก h1 และค่าของตัวแปรเนื้อหาภายในแท็ก div

แสดงวิธีแก้ปัญหา

", $หัวข้อ""; เอคโค่"

", $เนื้อหา"
"; ?>

ฉันอยากจะดึงความสนใจของคุณอีกครั้งถึงความจริงที่ว่าการตัดสินใจครั้งนี้ไม่ใช่การตัดสินใจที่ถูกต้องเท่านั้น ตัวอย่างเช่น รหัสต่อไปนี้จะให้ผลลัพธ์เดียวกัน:



2024 wisemotors.ru. วิธีนี้ทำงานอย่างไร. เหล็ก. การทำเหมืองแร่ สกุลเงินดิจิทัล