我正在使用PHP中的自定义数据库表映射器。 是否有可能在PHP中使用“虚拟方法”来访问属性?和方法一样,那些并不存在。
例如:类“user”具有属性“$ name”,我不想为此创建“Get”方法,但我想通过虚拟方法访问该属性,如下所示: $用户>的GetName();
我在考虑与公约合作。因此,每次调用“虚拟”方法时,都会捕获它,并检查它是否具有前缀“Get”或“Set”。
如果它具有前缀“Get”,则在“Get”之后剥离部件并将其设为小写,因此您拥有要访问的属性。
我的想法(伪代码):
public function VirtualMethodCalled($method_name)
{
//Get the First 3 Chars to check if Get or Set
$check = substr($method_name, 0, 3);
//Get Everything after the first 3 chars to get the propertyname
$property_name = substr($method_name, 3, 0);
if($check=="Get")
{
return $this->{$property_name};
}
else if($check=="Set")
{
$this->{$property_name};
$this->Update();
}
else
{
//throw exc
}
}
答案 0 :(得分:3)
您可以使用魔术方法来实现此目的,例如:
class A {
private $member;
public function __call($name, $arguments) {
//Get the First 3 Chars to check if Get or Set
$check = substr($method_name, 0, 3);
//Get Everything after the first 3 chars to get the propertyname
$property_name = substr($method_name, 3);
if($check=="Get")
{
return $this->{$property_name};
}
else if($check=="Set")
{
$this->{$property_name} = $arguments[0]; //I'm assuming
}
else
{
//throw method not found exception
}
}
}
我主要使用您为内容提供的代码。显然,您可以将其扩展为处理函数名称别名或任何您需要的内容。