[英]Arrow operator in PHP vs C
我是一名PHP程序員,試圖了解更多PHP背后的理論,但是在PHP和C之間連接點時遇到了麻煩。例如,在PHP和C中,箭頭運算符是完全相同的嗎?
這是我研究它時的結果:
->
只是一個別名 , a->b
與(*a).b
。 箭頭操作符只是取消引用指針,因此您可以與地址變量進行交互。 ->
是一個引用 。 它“引用實例化對象的屬性”(未知)。 但是和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.