我来自.Net 背景,我正试图将我的大脑围绕我习惯但在 PHP 中的编程模式。
我有一个具有关联数组属性的类。我想将一些但不是全部的关联数组键“提升”到类级属性。在 C# 中,我通常会这样做:
//C# Code
class MyClass{
private Dictionary<string, string> attributes = new Dictionary<string,string>();
//Get/Set the ID from the private store
public string ID{
get { return (attributes.ContainsKey("ID") ? attributes["ID"] : "n/a"); }
set { attributes.Add("ID", value); }
}
}
这允许我的对象控制缺失属性的默认值。在 PHP 中,我找不到任何直接执行此操作的方法。我的第一个解决方法是只使用函数:
//PHP Code
class MyClass{
private $attributes = array();
//Get the ID
public function getID(){
return (array_key_exists('ID', $this->attributes) ? $this->attributes['ID'] : 'n/a');
}
//Set the ID
public function setID($value){
$this->attributes['ID'] = $value;
}
}
尽管调用语法略有不同,并且每个属性都有两种方法,但这仍然有效。此外,使用这些对象的代码当前正在检查对象变量,因此找不到函数。
然后我开始沿着对象本身的魔法方法路径,__set
只是__get
在switch case
传入的对象上$name
设置/获取我的局部变量。不幸的是,如果您直接修改底层数组,则不会调用这些方法。
所以我的问题是,在 PHP 中是否有可能有一个在使用之前不会计算的类级属性/变量?