Zamanında adıyla PHP erişim alt özellik

2 Cevap php

Dinamik bir nesnenin bir alt özelliği erişmek mümkün mü? Ben bir nesnenin özelliklerine erişmek için bunu başardı, ancak bir alt nesne değil özellikleri.

İşte yapmak istediğim şeylerin bir örnek:

class SubTest
{
    public $age;

    public function __construct($age)
    {
        $this->age = $age;
    }
}

class Test
{
    public $name;
    public $sub;

    public function __construct($name, $age)
    {
        $this->name = $name;
        $this->sub = new SubTest($age);
    }
}

$test = new Test("Mike", 43);

// NOTE works fine
$access_property1 = "name";
echo $test->$access_property1;

// NOTE doesn't work, returns null
$access_property2 = "sub->age";
echo $test->$access_property2;

2 Cevap

Sen bir işlevi gibi kullanabilirsiniz

function foo($obj, array $aProps) {
  // might want to add more error handling here
  foreach($aProps as $p) {
    $obj = $obj->$p;
  }
  return $obj;
}

$o = new StdClass;
$o->prop1 = new StdClass;
$o->prop1->x = 'ABC';

echo foo($o, array('prop1', 'x'));

Bence öyle değil ... Ama bunu yapabilirsiniz:

$access_property1 = "sub";
$access_property2 = "age";

echo $test->$access_property1->$access_property2;