gpt4 book ai didi

php - 是否可以在 PHP 中使用指针?

转载 作者:可可西里 更新时间:2023-10-31 23:06:01 25 4
gpt4 key购买 nike

所以我明白引用不是指针:http://php.net/manual/en/language.references.arent.php

问题是,是否可以在 php 中使用指针?

鉴于以下示例,我猜这就是我们在处理对象时所做的事情:

class Entity
{
public $attr;
}

class Filter
{
public function filter(Entity $entity)
{
$entity->attr = trim($entity->attr);
}
}

$entity = new Entity;
$entity->attr = ' foo ';
$filter = new Filter;
$filter->filter($entity);
echo $entity->attr; // > 'foo', no white space

上面的例子是在幕后使用指针还是它仍在交换内存,就像在使用引用时一样?

编辑

一个不同的例子:

如下:

class Entity
{
public $attr;
}
$entity = new Entity;
$entity->attr = 1;
$entity->attr = 2;

C 中是这样的:

int* attr;
*attr = 1;
*attr = 2;

最佳答案

当您将对象作为参数传递给函数时,变量本身会被复制,但它所具有的属性指向原始对象的属性,即:

function test(Something $bar)
{
$bar->y = 'a'; // will update $foo->y
$bar = 123; // will not update $foo
}

$foo = new Something;
$foo->y = 'b';
test($foo);
// $foo->y == 'a';

在函数内部,内存引用看起来有点像这样:

$bar ---+
+---> (object [ y => string('b') ])
$foo ---+

$bar = 123; 之后看起来像这样:

$bar ---> int(123)

$foo ---> (object [ y => 'b' ])

关于php - 是否可以在 PHP 中使用指针?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20158952/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com