W doktorach PHP 7, jest http: / /php.net/manual/en/migracja70.Incompatible.php#migracja70.Incompatible.Varible-handling.indeirect. Próbuję dynamicznie korzystać z tego, aby zadzwonić do nieruchomości. Ten kod drukuje tylko v1. Chcę, aby drukować v1pqrxyz

Jak mogę to zrobić? Używam PHP w wersji 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};
}
1
Amitoz Deol 26 luty 2019, 22:08

2 odpowiedzi

Najlepsza odpowiedź

Nie jest możliwe sposób, w jaki go skonstruowałeś, nawet jeśli wygląda obiecująco. Ale możesz wykonać następujące czynności

$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);
}

A członkowie mogą być dostępne w ten sposób

$arr = [
   'v1'
];

foreach ($arr as $member) {
    echo $test1->$member;
}
2
keksnicoh 26 luty 2019, 19:35

Spróbuj użyć call_user_func()

 foreach ($arr as $value) {
   echo call_user_func([$test1,$value]);
 }
0
tokkerbaz 26 luty 2019, 19:17