有一个名为" locale "的会话变量,其值为:en。
$locale = session()->get('locale'); // value = 'en';
存在一个对象$page
,其属性为:content_en
, content_ru
, content_de
。
所有我需要的是回显$page->content_en
或$page->content_ru
或$page->content_de
,但取决于区域设置。
echo $page->content_'.session()->get('locale').';
这里有一个更完整的解决方案,您甚至可以在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;
}
您将无法通过组合字符串访问属性。唯一的选择是首先把它放在一个字符串中,然后使用该变量作为属性访问。
$property = 'content_' . session()->get('locale');
if( isset($page->$property) ) {
echo $page->$property;
}
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;
}
应该这样做:
echo $page->{'content_' . session()->get('locale')};