在 php 中的 class 中动态声明变量
Dynamically declaring Variable inside a class in php
我在 PHP 中的 class/object 中动态声明变量时遇到问题。
我有一个名为 Column 的 class,它接收一个未知长度的关联数组(名称 => 值)。
我需要 class 变量与数组中的名称完全相同(并且它们的值明显匹配)。
由于Variable Variables方法有点混乱,当你在它上面添加class/object声明语法时,我觉得我有点迷失了。
我试过这样的事情:
function __construct($array)
{
foreach ($array as $key => $value)
{
$this->$key;
$this->key=$value;
}
}
我通常不会这样做
$this->$key;
我认为 $this->key
符合语法,但显然我错了。如果有人可以帮助纠正我,那将非常有帮助。
只需使用 {} 语法:
function __construct($array)
{
foreach ($array as $key => $value)
{
$this->{$key} = $value;
}
}
而不是
$this->$key;
$this->key=$value;
应该是
$this->$key=$value;
有什么区别?
变量 属性 $this->$key;
作为单个语句访问 属性 中的名称 $key
但不对其执行任何操作。但是如果属性之前没有被声明或者动态赋值,它会触发通知Undefined 属性。
$this->key
访问文字 key
属性,即 public $key;
如果已明确声明。
$this->$key
使用存储在 $key
中的名称访问 属性。所以如果 $key === 'foo'
它与 $this->foo
.
相同
动态分配之前未声明的属性与使用变量属性无关。因此,如果 属性 $foo
不存在,则 $this->foo = 1
与 $this->$key = 1
和 $key === 'foo'
相同。两者都在当前对象上创建 public 属性 $foo
。
特例
如果$key
不是字符串,它会被转换成字符串。如果它是一个无法转换为字符串的对象或资源,您将得到一个 could not be converted to string 错误。
如果 $key
转换为空字符串,您将收到 无法访问空 属性 错误。
如果 $key
以数字开头或包含通常不允许出现在变量名称中的特殊字符(如 $
),无论如何都会创建 属性。如果您使用 {}
将任意表达式用作 属性 名称,则始终可以访问具有这样名称的属性。试试这个:
$o = new stdclass;
$o->{'!"§$%'} = 'it works';
echo $o->{'!"§$%'};
我在 PHP 中的 class/object 中动态声明变量时遇到问题。
我有一个名为 Column 的 class,它接收一个未知长度的关联数组(名称 => 值)。
我需要 class 变量与数组中的名称完全相同(并且它们的值明显匹配)。
由于Variable Variables方法有点混乱,当你在它上面添加class/object声明语法时,我觉得我有点迷失了。
我试过这样的事情:
function __construct($array)
{
foreach ($array as $key => $value)
{
$this->$key;
$this->key=$value;
}
}
我通常不会这样做
$this->$key;
我认为 $this->key
符合语法,但显然我错了。如果有人可以帮助纠正我,那将非常有帮助。
只需使用 {} 语法:
function __construct($array)
{
foreach ($array as $key => $value)
{
$this->{$key} = $value;
}
}
而不是
$this->$key;
$this->key=$value;
应该是
$this->$key=$value;
有什么区别?
变量 属性 $this->$key;
作为单个语句访问 属性 中的名称 $key
但不对其执行任何操作。但是如果属性之前没有被声明或者动态赋值,它会触发通知Undefined 属性。
$this->key
访问文字 key
属性,即 public $key;
如果已明确声明。
$this->$key
使用存储在 $key
中的名称访问 属性。所以如果 $key === 'foo'
它与 $this->foo
.
动态分配之前未声明的属性与使用变量属性无关。因此,如果 属性 $foo
不存在,则 $this->foo = 1
与 $this->$key = 1
和 $key === 'foo'
相同。两者都在当前对象上创建 public 属性 $foo
。
特例
如果$key
不是字符串,它会被转换成字符串。如果它是一个无法转换为字符串的对象或资源,您将得到一个 could not be converted to string 错误。
如果 $key
转换为空字符串,您将收到 无法访问空 属性 错误。
如果 $key
以数字开头或包含通常不允许出现在变量名称中的特殊字符(如 $
),无论如何都会创建 属性。如果您使用 {}
将任意表达式用作 属性 名称,则始终可以访问具有这样名称的属性。试试这个:
$o = new stdclass;
$o->{'!"§$%'} = 'it works';
echo $o->{'!"§$%'};