$$ (ดอลล่าร์หรือดอลล่าร์คู่) หมายความว่าอะไรใน PHP?


116

ตัวอย่างคือการประกาศตัวแปรภายในฟังก์ชัน:

global $$link;

อะไร$$หมายถึง?



51
มันแสดงให้คุณเห็นว่าคุณจะได้รับ $$$ จำนวนเท่าใดสำหรับการบำรุงรักษาระบบ)
RCIX


มันเป็น de-reference ตามชื่อ บางอย่างเช่น${$link}ใน Bash
Ondra Žižka

คำตอบ:


183

ไวยากรณ์เช่น$$variableที่เรียกว่าVariable เปลี่ยนแปลง


ตัวอย่างเช่นหากคุณพิจารณาโค้ดส่วนนี้:

$real_variable = 'test';
$name = 'real_variable';
echo $$name;

คุณจะได้รับผลลัพธ์ต่อไปนี้:

test


ที่นี่:

  • $real_variable มีการทดสอบ
  • $name มีชื่อตัวแปรของคุณ: 'real_variable'
  • $$nameหมายความว่า " ตัวแปร thas มีชื่ออยู่ใน$name "
    • ซึ่งเป็น $real_variable
    • และมีค่า 'test'



แก้ไขหลังจากความคิดเห็นของ @ Jhonny:

การทำ$$$?
วิธีที่ดีที่สุดที่จะรู้คือลอง ;-)

ลองใช้โค้ดส่วนนี้:

$real_variable = 'test';
$name = 'real_variable';
$name_of_name = 'name';

echo $name_of_name . '<br />';
echo $$name_of_name . '<br />';
echo $$$name_of_name . '<br />';

และนี่คือผลลัพธ์ที่ฉันได้รับ:

name
real_variable
test

ฉันจะบอกว่าใช่คุณทำได้$$$ ;-)


10
แม้ว่าฉันยอมรับว่ามันมีประโยชน์ แต่ส่วนใหญ่ก็ควรใช้อาร์เรย์อยู่ดี
o0 '

นี่ก็เหมือนกับการทำ $ {$ value} ใช่หรือไม่
Chaim

3
@Chaim: ใช่ค่ะ ;; ยกเว้นว่าในบางกรณีจำเป็น{และ}จำเป็น(มีตัวอย่างในคู่มือเกี่ยวกับเรื่องนี้)
Pascal MARTIN

23

$ ภายในแก้ไขตัวแปรให้เป็นสตริงและด้านนอกจะแก้ไขตัวแปรด้วยสตริงนั้น

ลองพิจารณาตัวอย่างนี้

$inner = "foo";
$outer = "inner";

ตัวแปร:

$$outer

จะเท่ากับสตริง "foo"


แม้ว่า anwser ที่ได้รับการยอมรับจะกว้างกว่ามาก (รวมถึงกรณีทดสอบ) คำอธิบายนี้ทำให้ฉันชัดเจนขึ้น
MariusJP

13

มันเป็นตัวแปรของ

<?php
$a = 'hello';
$$a = 'world'; // now makes $hello a variable that holds 'world'
echo "$a ${$a}"; // "hello world"
echo "$a $hello"; // "hello world"
?>


4

ฉันไม่ต้องการทำซ้ำหลังจากคนอื่น แต่มีความเสี่ยงในการใช้$$:)

$a  = '1';
$$a =  2; // $1 = 2 :)

ดังนั้นใช้มันด้วยหัว :)


1

จะประเมินเนื้อหาของตัวแปรหนึ่งเป็นชื่อของอีกตัวแปรหนึ่ง $linkโดยทั่วไปจะช่วยให้คุณมีตัวแปรที่มีชื่อถูกเก็บไว้ใน


1

สิ่งนี้ได้ผลสำหรับฉัน (ใส่ในวงเล็บเหลี่ยม):

$aInputsAlias = [
        'convocatoria'   => 'even_id',
        'plan'           => 'acev_id',
        'gasto_elegible' => 'nivel1',
        'rubro'          => 'nivel2',
        'grupo'          => 'nivel3',
    ];

    /* Manejo de los filtros */

    foreach(array_keys($aInputsAlias) as $field)
    {
        $key = $aInputsAlias[$field];

        ${$aInputsAlias[$field]} = $this->request->query($field) ? $this->request->query($field) : NULL;
    }
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.