我是一名PHP程序员,试图学习更多PHP背后的理论,但是在连接PHP和C之间的点时遇到麻烦。例如,箭头运算符在PHP和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
相同。箭头运算符只是取消引用指针,因此您可以与地址变量进行交互。(*a).b
是参考。它“引用实例化对象的属性”(未知)。但这和C一样吗?注意:今天,我了解了C中的指针。
答案 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语言中执行类似的操作。