Curly Braces Notation in PHP

前端 未结 3 1790
南笙
南笙 2020-12-01 11:10

I was reading source of OpenCart and I ran into such expression below. Could someone explain it to me:

$quote = $this->{\'model_shipping_\' . $result[\'co         


        
相关标签:
3条回答
  • 2020-12-01 11:22

    The name of the property is computed during runtime from two strings

    Say, $result['code'] is 'abc', the accessed property will be

    $this->model_shipping_abc
    

    This is also helpful, if you have weird characters in your property or method names.

    Otherwise there would be no way to distinguish between the following:

    class A {
      public $f = 'f';
      public $func = 'uiae';
    }
    
    $a = new A();
    echo $a->f . 'unc'; // "func"
    echo $a->{'f' . 'unc'}; // "uiae"
    
    0 讨论(0)
  • 2020-12-01 11:32

    Curly braces are used to denote string or variable interpolation in PHP. It allows you to create 'variable functions', which can allow you to call a function without explicitly knowing what it actually is.

    Using this, you can create a property on an object almost like you would an array:

    $property_name = 'foo';
    $object->{$property_name} = 'bar';
    // same as $object->foo = 'bar';
    

    Or you can call one of a set of methods, if you have some sort of REST API class:

    $allowed_methods = ('get', 'post', 'put', 'delete');
    $method = strtolower($_SERVER['REQUEST_METHOD']); // eg, 'POST'
    
    if (in_array($method, $allowed_methods)) {
        return $this->{$method}();
        // return $this->post();
    }
    

    It's also used in strings to more easily identify interpolation, if you want to:

    $hello = 'Hello';
    $result = "{$hello} world";
    

    Of course these are simplifications. The purpose of your example code is to run one of a number of functions depending on the value of $result['code'].

    0 讨论(0)
  • 2020-12-01 11:32

    Curly braces are used to explicitly specify the end of a variable name.

    https://stackoverflow.com/a/1147942/680578

    http://php.net/manual/en/language.types.string.php#language.types.string.parsing.complex

    0 讨论(0)
提交回复
热议问题