PHP 中是否可以通过引用传递存储在数组中的变量?

发布于 2024-09-07 16:19:48 字数 613 浏览 5 评论 0原文

如果我希望 myFunction 获取 $myVariable 并为其分配一个 SomeClass 的实例,我知道我可以这样做:

class SomeClass { }

function myFunction(&$myVariable) {
    $myVariable = new SomeClass();
}

myFunction($myVariable);

var_dump($myVariable);

但是,我想能够让 myFunction 像这样操作:

class SomeClass { }

function myFunction($args = array()) {
    if(isset($args['something'])) {
        $$args['something'] = new SomeClass();
    }
}

myFunction(array(
    'something' => $myVariable
));

var_dump($myVariable);

有什么方法可以实现这一点吗?

If I want myFunction to take $myVariable and assign to it an instance of SomeClass, I know I can do this:

class SomeClass { }

function myFunction(&$myVariable) {
    $myVariable = new SomeClass();
}

myFunction($myVariable);

var_dump($myVariable);

However, I would like to be able to have myFunction operate like this:

class SomeClass { }

function myFunction($args = array()) {
    if(isset($args['something'])) {
        $args['something'] = new SomeClass();
    }
}

myFunction(array(
    'something' => $myVariable
));

var_dump($myVariable);

Is there any way to achieve this?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

春夜浅 2024-09-14 16:19:48

这是一个丑陋的黑客,但可以工作:

 global $args['something'];
 $args['something'] = new SomeClass();

但你不应该引入这样的副作用。

it's an ugly hack but could work:

 global $args['something'];
 $args['something'] = new SomeClass();

But you should never introduce such side effects.

何以心动 2024-09-14 16:19:48

您只能通过引用传递变量,因此

myFunction(array()) 

在这两种情况下都不起作用。

我不确定你在做什么,但可以说

$myVariable = 'Mary';
$array['something'] = $myVariable;

“Then

$array['something'] === $Mary

Which”不存在。

我还没有测试过它,但我认为即使使用全局变量,它也不会按照您想要的方式工作。

You can only pass variables by reference, so

myFunction(array()) 

will not work in either case.

Im not sure what your doing, but lets say

$myVariable = 'Mary';
$array['something'] = $myVariable;

Then

$array['something'] === $Mary

Which doesnt exist.

I havent tested it, but I dont think that will work the way you want it to, even with global variables.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文