Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/274.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 大括号是什么意思?_Php - Fatal编程技术网

Php 大括号是什么意思?

Php 大括号是什么意思?,php,Php,$obj->{$prop}我想知道这行的意思,为什么这里有一个大括号?还有为什么{$prop}为空时没有错误。如果您不理解我的问题,请留下一些内容,我会修改它。谢谢 $obj->{$prop}表示$obj试图访问一个属性,该属性的名称出现在变量$prop中。我将用一个例子来解释 class Util_Model { /** * Get model property by property name chain. * Usage: Util_Model::get_prop($order, 'i

$obj->{$prop}我想知道这行的意思,为什么这里有一个大括号?还有为什么{$prop}为空时没有错误。如果您不理解我的问题,请留下一些内容,我会修改它。谢谢

$obj->{$prop}表示
$obj
试图访问一个属性,该属性的名称出现在变量
$prop
中。我将用一个例子来解释

class Util_Model
{
/**
 * Get model property by property name chain.
 * Usage: Util_Model::get_prop($order, 'item', 'name')
 */
public static function get_prop()
{
    $obj  = func_get_arg(0);
    $props = array_slice(func_get_args(), 1);

    if (!is_object($obj)) {
        throw new \InvalidArgumentException('First parameter must be an object');
    }

    foreach ($props as $prop) {
        if (preg_match('/^(.*)\(\)$/', $prop, $matches)) {
            $obj = call_user_func(array($obj, $matches[1]));
        } else {
            $obj = $obj->{$prop};
        }
        if (!is_object($obj)) {
            break;
        }
    }

    return is_object($obj) ? (string)$obj : $obj;
}
}
在上面的代码中,
$prop
包含值“X”,因此将调用函数X,同样,如果函数X包含值“Y”或“Z”,将调用它们。因此,函数的调用可以在运行时根据变量包含的值来决定


至于
$prop
为null时,没有对象被访问,因此返回对象的引用,不会抛出错误。

$obj->{$prop}表示
$obj
正在尝试访问变量
$prop
中存在名称的属性。我将用一个例子来解释

class Util_Model
{
/**
 * Get model property by property name chain.
 * Usage: Util_Model::get_prop($order, 'item', 'name')
 */
public static function get_prop()
{
    $obj  = func_get_arg(0);
    $props = array_slice(func_get_args(), 1);

    if (!is_object($obj)) {
        throw new \InvalidArgumentException('First parameter must be an object');
    }

    foreach ($props as $prop) {
        if (preg_match('/^(.*)\(\)$/', $prop, $matches)) {
            $obj = call_user_func(array($obj, $matches[1]));
        } else {
            $obj = $obj->{$prop};
        }
        if (!is_object($obj)) {
            break;
        }
    }

    return is_object($obj) ? (string)$obj : $obj;
}
}
在上面的代码中,
$prop
包含值“X”,因此将调用函数X,同样,如果函数X包含值“Y”或“Z”,将调用它们。因此,函数的调用可以在运行时根据变量包含的值来决定


至于
$prop
为null时,没有对象被访问,因此返回对象的引用,不会抛出错误。

$obj->{$prop}表示
$obj
正在尝试访问变量
$prop
中存在名称的属性。我将用一个例子来解释

class Util_Model
{
/**
 * Get model property by property name chain.
 * Usage: Util_Model::get_prop($order, 'item', 'name')
 */
public static function get_prop()
{
    $obj  = func_get_arg(0);
    $props = array_slice(func_get_args(), 1);

    if (!is_object($obj)) {
        throw new \InvalidArgumentException('First parameter must be an object');
    }

    foreach ($props as $prop) {
        if (preg_match('/^(.*)\(\)$/', $prop, $matches)) {
            $obj = call_user_func(array($obj, $matches[1]));
        } else {
            $obj = $obj->{$prop};
        }
        if (!is_object($obj)) {
            break;
        }
    }

    return is_object($obj) ? (string)$obj : $obj;
}
}
在上面的代码中,
$prop
包含值“X”,因此将调用函数X,同样,如果函数X包含值“Y”或“Z”,将调用它们。因此,函数的调用可以在运行时根据变量包含的值来决定


至于
$prop
为null时,没有对象被访问,因此返回对象的引用,不会抛出错误。

$obj->{$prop}表示
$obj
正在尝试访问变量
$prop
中存在名称的属性。我将用一个例子来解释

class Util_Model
{
/**
 * Get model property by property name chain.
 * Usage: Util_Model::get_prop($order, 'item', 'name')
 */
public static function get_prop()
{
    $obj  = func_get_arg(0);
    $props = array_slice(func_get_args(), 1);

    if (!is_object($obj)) {
        throw new \InvalidArgumentException('First parameter must be an object');
    }

    foreach ($props as $prop) {
        if (preg_match('/^(.*)\(\)$/', $prop, $matches)) {
            $obj = call_user_func(array($obj, $matches[1]));
        } else {
            $obj = $obj->{$prop};
        }
        if (!is_object($obj)) {
            break;
        }
    }

    return is_object($obj) ? (string)$obj : $obj;
}
}
在上面的代码中,
$prop
包含值“X”,因此将调用函数X,同样,如果函数X包含值“Y”或“Z”,将调用它们。因此,函数的调用可以在运行时根据变量包含的值来决定


对于
$prop
为null的情况,没有对象被访问,因此返回对象的引用,不会抛出错误。

这是访问对象属性时使用的首选语法。但在本例中,不需要括号。其主要目的是避免歧义:

class A {
     public $d;
     public $e;
     public $f;
     function X() {}
     function Y() {}
     function Z() {}
}

$obj = new A();
$prop = 'X';
$propVar = 'f';
$obj->{$prop}();
$obj->{$propVar};
后者是不明确的,因为PHP可能会将语句的意思理解为“将
$access
转换为其字符串值(即数组),使用该名称访问属性,并从该值获取索引
key
”,也可能意味着使用在
$access['key']
下找到的名称访问属性

无论哪种方式,这都是有用的,因为您的代码做得太过分了。您这样调用方法不是一个好主意。
一个有效的用例可能是在处理JSON编码的数据或解析的XML DOM时,其中有数字键,或像
foo bar
这样的键,您不能写入:

$obj = (object) array(
    'foo' => array('key' => 123)
);
$access = array('key' => 'foo');
var_dump($obj->{$access['key']});//will dump array(key => 123)
var_dump($obj->$access['key']);//ambiguous
对于这些情况,使用变量表示法:

$obj->123;
$obj->foo-bar;//- is invalid

这是访问对象属性时使用的首选语法。但在本例中,不需要括号。其主要目的是避免歧义:

class A {
     public $d;
     public $e;
     public $f;
     function X() {}
     function Y() {}
     function Z() {}
}

$obj = new A();
$prop = 'X';
$propVar = 'f';
$obj->{$prop}();
$obj->{$propVar};
后者是不明确的,因为PHP可能会将语句的意思理解为“将
$access
转换为其字符串值(即数组),使用该名称访问属性,并从该值获取索引
key
”,也可能意味着使用在
$access['key']
下找到的名称访问属性

无论哪种方式,这都是有用的,因为您的代码做得太过分了。您这样调用方法不是一个好主意。
一个有效的用例可能是在处理JSON编码的数据或解析的XML DOM时,其中有数字键,或像
foo bar
这样的键,您不能写入:

$obj = (object) array(
    'foo' => array('key' => 123)
);
$access = array('key' => 'foo');
var_dump($obj->{$access['key']});//will dump array(key => 123)
var_dump($obj->$access['key']);//ambiguous
对于这些情况,使用变量表示法:

$obj->123;
$obj->foo-bar;//- is invalid

这是访问对象属性时使用的首选语法。但在本例中,不需要括号。其主要目的是避免歧义:

class A {
     public $d;
     public $e;
     public $f;
     function X() {}
     function Y() {}
     function Z() {}
}

$obj = new A();
$prop = 'X';
$propVar = 'f';
$obj->{$prop}();
$obj->{$propVar};
后者是不明确的,因为PHP可能会将语句的意思理解为“将
$access
转换为其字符串值(即数组),使用该名称访问属性,并从该值获取索引
key
”,也可能意味着使用在
$access['key']
下找到的名称访问属性

无论哪种方式,这都是有用的,因为您的代码做得太过分了。您这样调用方法不是一个好主意。
一个有效的用例可能是在处理JSON编码的数据或解析的XML DOM时,其中有数字键,或像
foo bar
这样的键,您不能写入:

$obj = (object) array(
    'foo' => array('key' => 123)
);
$access = array('key' => 'foo');
var_dump($obj->{$access['key']});//will dump array(key => 123)
var_dump($obj->$access['key']);//ambiguous
对于这些情况,使用变量表示法:

$obj->123;
$obj->foo-bar;//- is invalid

这是访问对象属性时使用的首选语法。但在本例中,不需要括号。其主要目的是避免歧义:

class A {
     public $d;
     public $e;
     public $f;
     function X() {}
     function Y() {}
     function Z() {}
}

$obj = new A();
$prop = 'X';
$propVar = 'f';
$obj->{$prop}();
$obj->{$propVar};
后者是不明确的,因为PHP可能会将语句的意思理解为“将
$access
转换为其字符串值(即数组),使用该名称访问属性,并从该值获取索引
key
”,也可能意味着使用在
$access['key']
下找到的名称访问属性

无论哪种方式,这都是有用的,因为您的代码做得太过分了。您这样调用方法不是一个好主意。
一个有效的用例可以是处理JSON编码的数据时,或者