【问题标题】:What does a variable enclosed in brackets mean?括号中的变量是什么意思?
【发布时间】:2019-01-20 06:38:43
【问题描述】:

今天发现了一段奇怪的php代码:

function wt_render() {
        echo '<div class="wrap theme-options-page clearfix"';
        global $wp_version;
        if(version_compare($wp_version, "3.5", '>')){
            echo ' data-version="gt3_5"';
        }
        echo '>';
        echo '<form method="post" action="">';

        foreach($this->options as $option) {
            if (method_exists($this, $option['type'])) {
                $this->{$option['type']}($option);
            }

        }
        echo '</form>';
        echo '</div>';
    }

这是什么意思?

我相信标有 $option['type'] 的括号是解释器应该使用的变量。没有它们,我得到一个错误:“数组到字符串的转换”。

我说的对吗?

【问题讨论】:

标签: php


【解决方案1】:

这就是您请求数组键值的方式。 所以 $option 是一个带键的数组。其中一个键是“类型”。

要获取 array $option 的值,您可以像这样在括号之间添加键

$options['type']

如果 $options 是一个 object 你可以得到这样的值:

$options->type

使用大括号是因为在脚本中你使用$options['type']的值来调用当前对象中的函数。

如果 $options['type'] 的值为 example,则下面的代码是相等的

$this->{$options['type']}($options);

等于

$this->example($options);

【讨论】:

    【解决方案2】:

    此语法可用于使用方法指针

    例子

    $dateTime = new DateTime();
    $dateTime->{"add"}(new DateInterval("P3D"));
    
    $methods = array("getTimezone", "getTimestamp", "getOffset");
    foreach($methods as $method) var_dump($dateTime->{$method}());
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2010-09-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-05-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多