gpt4 book ai didi

php - 对象运算符中的变量

转载 作者:可可西里 更新时间:2023-11-01 13:36:37 28 4
gpt4 key购买 nike

我试图在 PHP 中设置一个基于变量的对象运算符,但我只能在有限的范围内完成我正在寻找的东西。例如,以下代码允许进行变量选择:

$var1 = 'available_from';
$keyValuePairs[$key] = $item->parent()->{$var1};

但是,如果我想让父选择器也成为一个变量,我似乎就做不到了。以下两种方法均失败:

$var1 = 'parent()->available_from';
$keyValuePairs[$key] = $item->{$var1};

$var1 = 'parent()';
$var2 = 'available_from';
$keyValuePairs[$key] = $item->{$var1}->{$var2};

所以问题是是否有办法做到这一点。

最佳答案

你基本上可以这样做,但是你必须把括号放在外面。

$var1 = 'parent';
$var2 = 'available_from';
$keyValuePairs[$key] = $item->{$var1}()->{$var2};
// or $keyValuePairs[$key] = $item->$var1()->{$var2};

如果不使用 eval,基本上就没有办法解决这个问题:

// escape the first $
$keyValuePairs[$key] = eval( "\$item->$var1->$var2" );

但是,如果您首先可以访问潜在的变量集,那么实际上没有理由使用 eval。

你可以做这样的事情来绕过它:

function call_or_return( $obj, $prop )
{
// test to see if it is a method (you'll need to remove the parens first)
$arr = array( $obj, $prop );
// if so call it.
if( is_callable( $arr ) ) return call_user_func( $arr );
// otherwise return it as a property
return $obj->$prop;
}

call_or_return( $item, $var1 )->{$var2};

关于php - 对象运算符中的变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6804328/

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