动态调用php对象属性

动态调用php对象属性,php,object,Php,Object,在PHP7文档中,有。 我正试图用它来动态调用属性。此代码仅打印v1。我想让它打印v1pqrxyz 我该怎么做?我使用的是PHP版本7.0 class test{ public $v1 = "v1"; public function f1($a){ return $a; } public function f2($b){ return $b; } } $test1 = new test(); $arr = ['v

在PHP7文档中,有。 我正试图用它来动态调用属性。此代码仅打印
v1
。我想让它打印
v1pqrxyz

我该怎么做?我使用的是PHP版本7.0


class test{

    public $v1 = "v1";

    public function f1($a){
        return $a;
    }

    public function f2($b){
        return $b;
    }
}

$test1 = new test();

$arr = ['v1', 'f1("pqr")', 'f2("xyz")'];

foreach ($arr as $value) {
    echo $test1->{$value};
}

尝试使用
call\u user\u func()


你构建它的方式是不可能的,即使它看起来很有希望。但是,对于方法,您可以执行以下操作

$arr = [
   ['f1', ['pqr']],
   ['f2', ['xyz']],
   # or some multi argument function
   #['f3', ['a', 'b']],
];

foreach ($arr as $value) {
    list($method, $args) = $value;
    echo $test1->$method(...$args);
}
成员可以这样访问

$arr = [
   'v1'
];

foreach ($arr as $member) {
    echo $test1->$member;
}

您需要
eval
或正则表达式来处理字符串表达式,如
'f1(“pqr”)
。两者都不安全和/或容易出错。你不应该这样做。只要可能,请使用
['v1',['f1',['arg1','arg2']],'v2']
来代替。这样做时我会出错
警告:call\u user\u func()希望参数1是有效的回调,类“test”没有方法“f1()”
$arr = [
   'v1'
];

foreach ($arr as $member) {
    echo $test1->$member;
}