0

我有一个返回对象的函数。如何编写一个字符串来解析该函数​​返回的对象的成员(该函数位于不同的命名空间中)?这就是我想要做的,但在echo上使用的字符串是无效的。

namespace security;
function &get_user() {
    $user = (object) array('email' => 'abcd@abcd.com', 'name' => 'John Doe');
    return $user;
}

echo "<li><p class=\"navbar-text\">Welcome, {${\security\get_user()}->name}</p></li>";
4

2 回答 2

3

嗯,有几件事:

  • 您不能在字符串中插入函数/方法。只允许使用变量。
  • 当你创建一个命名空间时,你只需要在命名空间之外引用它。
  • 除非您了解它们的作用,否则不要使用引用( )。&在 PHP 中,引用的工作方式与大多数其他语言不同。

这就是代码的样子。

// We define the namespace here. We do not need
// to refer to it when inside the namespace.
namespace security;

// Objects and arrays are always passed by
// reference, so you should not use & here
function get_user() {
    return (object) array(
        'email' => 'abcd@abcd.com',
        'name' => 'John Doe',
    );
}
// We need to get the value from the function
// before interpolating it in the string
$user = get_user();

// There are a few ways to interpolate in PHP
// This is for historical and functional reasons
// Interpolating array items is, "{$arr['key']}"
echo "<li><p class=\"navbar-text\">Welcome, $user->name</p></li>";
echo "<li><p class=\"navbar-text\">Welcome, {$user->name}</p></li>";
于 2013-09-01T23:45:32.003 回答
0

您不应该做任何比访问字符串中的对象成员更复杂的事情;它难以阅读且难以维护(例如,您的 IDE 在进行重构时可能会错过它)。也就是说,只是为了好玩:

function get_user() {
    $user = (object) array('email' => 'abcd@abcd.com', 'name' => 'John Doe');
    return $user;
}

echo "<li><p class=\"navbar-text\">Welcome, {${($x = \security\get_user()->name) ? 'x' : 'x'}}</p></li>";

变量赋值在这里是必要的——你可以在字符串的花括号内使用函数和其他任何东西,但它们的结果将被解释为变量名。基本上$str = "{${<some code>}}";相当于$name = eval("<some code>"); $str = $$name;".

于 2013-09-02T00:10:01.267 回答