PHP有一个自动生成类变量的方法吗?我想我以前见过这样的东西,但我不确定.
public class TestClass { private $data = array(); public function TestClass() { $this->data['firstValue'] = "cheese"; } }
该$this->data
数组始终是一个关联数组,但它们的键从一个类更改为类.有没有访问任何可行的方法, $this->data['firstValue']
从$this->firstValue
而无需定义的联系?
如果是的话,它有什么缺点吗?
或者是否存在一种静态方法来定义链接,如果$this->data
数组不包含该键,则不会爆炸?
见这里:http://www.php.net/manual/en/language.oop5.overloading.php
你想要的是"__get"方法.您可以在链接上找到所需的示例.
使用PHP5"魔术" __get()
方法.它会像这样工作:
public class TestClass { private $data = array(); // Since you're using PHP5, you should be using PHP5 style constructors. public function __construct() { $this->data['firstValue'] = "cheese"; } /** * This is the magic get function. Any class variable you try to access from * outside the class that is not public will go through this method. The variable * name will be passed in to the $param parameter. For this example, all * will be retrieved from the private $data array. If the variable doesn't exist * in the array, then the method will return null. * * @param string $param Class variable name * * @return mixed */ public function __get($param) { if (isset($this->data[$param])) { return $this->data[$param]; } else { return null; } } /** * This is the "magic" isset method. It is very important to implement this * method when using __get to change or retrieve data members from private or * protected members. If it is not implemented, code that checks to see if a * particular variable has been set will fail even though you'll be able to * retrieve a value for that variable. * * @param string $param Variable name to check * * @return boolean */ public function __isset($param) { return isset($this->data[$param]); } /** * This method is required if you want to be able to set variables from outside * your class without providing explicit setter options. Similar to accessing * a variable using $foo = $object->firstValue, this method allows you to set * the value of a variable (any variable in this case, but it can be limited * by modifying this method) by doing something like: * $this->secondValue = 'foo'; * * @param string $param Class variable name to set * @param mixed $value Value to set * * @return null */ public function __set($param, $value) { $this->data[$param] = $value; } }
使用magic __get
,__set
和__isset
构造函数将允许您控制在类上设置变量的方式,同时仍将所有值存储在单个数组中.
希望这可以帮助 :)