从变量中调用PHP对象属性名称

时间:2016-09-23 12:28:09

标签: php variables

有一个名为'locale'的会话变量,其值为:en。

DateTime Object
(
    [date] => 2016-12-21 14:19:44.000000
    [timezone_type] => 3
    [timezone] => UTC
)

string(10) "2016-12-21"

并且有一个对象$locale = session()->get('locale'); // value = 'en'; 包含属性:$pagecontent_encontent_ru

我需要的只是回复content_de$page->content_en$page->content_ru,但要视地点而定。

$page->content_de

4 个答案:

答案 0 :(得分:4)

这是一个更完整的解决方案,您甚至可以在phpfiddle.org上运行

$page = new stdClass();
$page->content_en = 'Testcontent';
$page->content_de = 'Testinhalt';

$property = 'content_' . locale("en");

if(property_exists($page, $property)) {
    // The property exists, print it!
    echo $page->$property;
} else {
    // Fallback to some default
}


function locale($loc)
{
    return $loc;
}

答案 1 :(得分:0)

Fabian的答案更灵活,通常更好。但是,如果您只接受特定值,这里有另一种方法

使用if

$locale = session()->get('locale'); // value = 'en';

if ($locale == "en") {
  echo $page->content_en;
} elseif ($locale == "ru") {
  echo $page->content_ru;
} elseif ($locale == "de") {
  echo $page->content_de;
}

使用switch

$locale = session()->get('locale'); // value = 'en';

switch ($locale) {
  case "en":
    echo $page->content_en;
    break;
  case "ru":
    echo $page->content_ru;
    break;
  case "de":
    echo $page->content_de;
    break;
}

答案 2 :(得分:0)

您将无法通过组合字符串访问属性。 您唯一的选择是首先将其放在一个字符串中,并将该变量用作属性访问。

$property = 'content_' . session()->get('locale');
if( isset($page->$property) ) {
    echo $page->$property;
}

答案 3 :(得分:0)

这应该这样做:

echo $page->{'content_' . session()->get('locale')};