【问题标题】:PHP, $this->{$var} -- what does that mean?PHP,$this->{$var}——这是什么意思?
【发布时间】:2013-05-06 22:04:32
【问题描述】:

我遇到了访问/更改变量的需要:

$this->{$var}

上下文与 CI 数据映射器获取规则有关。我似乎找不到这种语法的实际作用。 { 在这种情况下做了什么?

你为什么不能直接使用:

$this->var

【问题讨论】:

    标签: php


    【解决方案1】:

    这是一个变量,因此您最终会得到$this->{value-of-$val}

    见:http://php.net/manual/en/language.variables.variable.php

    例如:

    $this->a = "hello";
    $this->b = "hi";
    $this->val = "howdy";
    
    $val = "a";
    echo $this->{$val}; // outputs "hello"
    
    $val = "b";
    echo $this->{$val}; // outputs "hi"
    
    echo $this->val; // outputs "howdy"
    
    echo $this->{"val"}; // also outputs "howdy"
    

    工作示例:http://3v4l.org/QNds9

    这当然是在类上下文中工作的。您可以像这样在本地上下文中轻松使用变量变量:

    $a = "hello";
    $b = "hi";
    
    $val = "a";
    echo $$val; // outputs "hello"
    
    $val = "b";
    echo $$val; // outputs "hi"
    

    工作示例:http://3v4l.org/n16sk

    【讨论】:

    • $object->attr = $object->{"attr"} :)
    • 我记得刚开始的时候,我尝试做类似$this->$val 的事情,但惨遭失败。很高兴看到这个答案。
    • 还有一点值得一提的是多个$。给定以下代码$foo=1; $bar="foo"$$bar 为 1。
    • 卷发真的有必要吗?我有省略花括号的情况
    • @Fuseteam 对于简单的变量名,它们并不总是必需的,不。但是你可能会遇到更复杂的变量名的麻烦,我发现这是一个很好的做法。来自 PHP 文档:“也可以使用花括号来明确分隔属性名称。当访问包含数组的属性中的值、属性名称由多个部分组成时,或者当属性名称包含其他无效的字符(例如来自 json_decode() 或 SimpleXML)。"
    【解决方案2】:

    首先$this->{$var}$this->var 是两个非常不同的东西。后者将请求var 类变量,而另一个将请求包含在$var 字符串中的变量的名称。如果$var 是字符串'foo' 那么它将请求$this->foo 等等。

    这对于动态编程很有用(当您只在运行时知道变量的名称时)。但是字符串上下文中的经典{} 表示法非常强大,尤其是当你有奇怪的变量名时:

    ${'y - x'} = 'Ok';
    $var = 'y - x';
    echo ${$var};  
    

    将打印 Ok,即使变量名称 y - x 由于空格和 - 字符而无效。

    【讨论】:

    • 也为你+1!我从来不知道变量名会这么复杂。那么,您可以将数组/对象作为变量名吗?
    • @DaveChen,他们的字符串表示是的。虽然我认为变量名有长度限制。我认为这不是一个好的做法,因此我会避免它。
    猜你喜欢
    • 2011-06-20
    • 2018-10-29
    • 2012-05-04
    • 1970-01-01
    • 1970-01-01
    • 2014-01-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多