PHP有一个自动生成类变量的方法吗?我想我以前见过这样的东西,但我不确定.
public class TestClass {
private $data = array();
public function TestClass() {
$this->data['firstValue'] = "cheese";
}
}
Run Code Online (Sandbox Code Playgroud)
该$this->data数组始终是一个关联数组,但它们的键从一个类更改为类.有没有访问任何可行的方法, $this->data['firstValue']从$this->firstValue而无需定义的联系?
如果是的话,它有什么缺点吗?
或者是否存在一种静态方法来定义链接,如果$this->data数组不包含该键,则不会爆炸?
Jan*_*čič 12
见这里: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;
}
}
Run Code Online (Sandbox Code Playgroud)
使用magic __get,__set和__isset构造函数将允许您控制在类上设置变量的方式,同时仍将所有值存储在单个数组中.
希望这可以帮助 :)
| 归档时间: |
|
| 查看次数: |
8065 次 |
| 最近记录: |