我试图弄清楚bless
在perl中做什么-在阅读了他们的文档后-我不是很清楚。如果我错了,请纠正我,它允许在类或对象中创建属性?
有人编写了这段代码
package Main::Call;
sub new
{
my ($class, $call) = @_;
my $self = $call;
bless($self, $class);
return $self;
}
例如:
if (($statement = $db->prepare($sql)) && $statement->execute())
{
while (my $rt = $statement->fetchrow_hashref())
{
my $obj = Main::Call->new($rt);
push @reserv_call_objs, $obj;
}
return \@reserv_call_objs;
}
我正在尝试将其转换为PHP。
所以我想应该是这样的吧?
class Call {
public function __construct($arr) {
foreach($arr as $key => $value)
{
$this->$value = '';
}
}
public function __set($key, $value) {
$this->$key = $value;
}
}
2条答案
按热度按时间ykejflvf1#
Perl有一个不寻常的对象模型:一个对象是一个被"祝福"到类中的引用。
bless
只是注解了引用,以便可以在引用上调用方法。但是通常引用只在类的构造函数中被祝福。
Perl并没有规定一个对象应该如何存储它的数据。最常见的方法是使用一个哈希引用。这个
new
类似于PHP的__construct
:其可以被称为
Foo->new(key => $value, ...)
。Perl
new
所做的事情相当不寻常:它将给定的参数赋给适当的类。这假定$call
已经是一个引用。如果$call
已经被赋给某个包,那么它将被重新赋给这个$class
。将其转换为PHP的最明智的方法是将
$call
填充到示例的属性中,大致与您所做的一样。kqlmhetl2#
bless
函数将一个类与一个引用相关联。也就是说,只要你传递给new
函数的是引用类型,它就会成为Main::Call
类的一个对象。你可以传递一个列表引用,它就会成为一个对象。你可以传递一个标量引用,它就会成为一个对象。在PHP中没有办法做到完全相同的事情,但是当您将一个哈希引用传递给
new
时,您的尝试接近于模拟这种情况。