簡體   English   中英

PHP與C中的箭頭運算符

[英]Arrow operator in PHP vs C

我是一名PHP程序員,試圖了解更多PHP背后的理論,但是在PHP和C之間連接點時遇到了麻煩。例如,在PHP和C中,箭頭運算符是完全相同的嗎?

這是我研究它時的結果:

  • 在C中, ->只是一個別名a->b(*a).b 箭頭操作符只是取消引用指針,因此您可以與地址變量進行交互。
  • 在PHP中, ->是一個引用 它“引用實例化對象的屬性”(未知)。 但是和C一樣嗎?

注意:今天,我學到了C中的指針。

在PHP中, ->用於訪問類的成員。 C沒有課程。 最接近的是struct

在PHP中

class Animal {
    public $color;
    public $age;
}
$fido = new Animal;
$fido->color = 'white';
$fido->age = 3;
$kitty = new Animal;
$kitty->color = 'brown';
$kitty->age = 5;

// output
echo 'Fido is ' . $fido->color . "age=". $fido->age .  "\n";
echo 'Kitty is ' . $kitty->color . "age=". $kitty->age .   "\n";

輸出是:

Fido is white age=3
Kitty is brown age=5

您可以使用結構在C中執行類似的操作。 它涉及的更多一點。

請原諒我。這很生疏

struct Animal {
   int age;
   char color[50];
};

int size = sizeof(struct Animal);
struct Animal * fido = malloc(size);
struct Animal * kitty = malloc(size);

fido->age = 3;
strcpy(fido->color, "white");

kitty->age = 5;
strcpy(kitty->color, "brown");

printf("Fido is %s age=%d\n", fido->color, fido->age);
printf("Kitty is %s age=%d\n", kitty->color, fido->age);

除非你真的想深入了解底層細節,否則不要過度思考PHP引用。 這意味着它們在進行函數調用等時不會傳遞實際值。

不要太努力找到兩種語言之間的等價。 他們的語義太不同了,所以這會失敗。

也就是說,PHP中的解引用運算符->可能選擇在視覺上類似於C中的成員訪問運算符-> ,並且語義有些類似,因為它們都允許您訪問解除引用對象的成員。

我不確定你的意思是“在C中, ->只是一個別名”:C語言一個“別名”概念 ,但它與手頭的主題完全無關。

相反, ->是一個運算符 ,正如你所說的那樣,表達式a->b被定義為等於(*a).b 但與你說的不同,對象不需要在堆上分配,它可以在內存中的任何位置。 考慮以下:

struct foo {
    int i;
};

int main(void) {
    struct foo f = {42};
    struct foo *pf = &f;
    printf("f.i = %d\n", pf->i);
}

這里, pf->i相當於fi (或(*pf).i )。 在任何情況下i沒有在堆上分配。

在php箭頭 - >用於訪問類的功能。

   class A{
     function funA(){
        return "Hello World";
     }
   }

   $object1 = new A();
   $object1->funA;

對象將是

你好,世界

您還可以通過PHP中的箭頭操作符訪問嵌套對象。

我們將字符串轉換為對象。 這是我的字符串:

{
   "id":"123456",
   "msg":"Have a Nice Day",
   "is_active":false,
   "total_count":1
}

如果我將其編碼為JSON

$obj = json_decode($json, false);

我可以通過 - >運算符輕松獲取對象值

$obj->msg;

OutPut將是

祝你今天愉快

您可以使用結構在C中執行類似操作。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM