PHP vs C中的箭头运算符

时间:2019-05-17 04:28:18

标签: php c pointers reference

我是一名PHP程序员,试图学习更多PHP背后的理论,但是在连接PHP和C之间的点时遇到麻烦。例如,箭头运算符在PHP和C中是否完全相同?

这是我研究时想到的:

  • 在C中, const router = ( <Provider store={store}> <Router history={history}> <Switch> <Route exact path='/' component={App}> <Route exact component={CardsGrid}> . </Route> <Route exact path='/view/:postId' component= . {Single}></Route> </Route> </Switch> </Router> </Provider> ) 只是一个别名->a->b相同。箭头运算符只是取消引用指针,因此您可以与地址变量进行交互。
  • 在PHP中, (*a).b是参考。它“引用实例化对象的属性”(未知)。但这和C一样吗?

注意:今天,我了解了C中的指针。

3 个答案:

答案 0 :(得分:1)

在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语言中执行类似的操作。涉及更多。

不好意思,我的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参考。这意味着在执行函数调用等操作时它们不会传递实际值。

答案 1 :(得分:1)

不要太努力地寻找两种语言之间的对等关系。它们的语义完全不同,因此将失败。

也就是说,PHP中的取消引用运算符[[0 1 2 3] [0 0 4 5] [0 0 0 6] [0 0 0 0]] 可能看起来类似于C中的成员访问运算符->,并且语义有些相似,因为两者都允许您访问成员取消引用的对象。

我不确定“在C中,->只是别名”是什么意思:C语言具有一种concept of “alias”,但与主题。

确切地说,->运算符,表达式->被定义为与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(或f.i)。决不会在堆上分配(*pf).i

答案 2 :(得分:0)

在php arrow中->用于访问类的功能。

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

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

对象将

  

Hello World

您还可以通过PHP中的箭头运算符访问嵌套对象。

我们将字符串转换为对象。这是我的字符串:

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

如果我将其编码为JSON

$obj = json_decode($json, false);

我可以通过->运算符轻松获得对象值

$obj->msg;

OutPut将是

  

祝你有美好的一天

您可以使用结构在C语言中执行类似的操作。