php - PHP:有没有办法设置一个类,这样你就可以修改类的属性而不给它重新赋值?
问题描述
我正在为我正在开发的 MVC 框架设置一个名为 DataMapper 的类。
DataMapper 类将基本上包含一堆将数据模型结构映射到数据库表/列结构的规则 - 它将列出每个规则的标准。
Rule 类的更简单版本如下所示(请记住,这些代码片段是示例):
class DataMapRule {
// required rule properties
public $required = array("modelName", "columnName", "type");
// optional values
public $options = array("minVal", "nullOrempty", "maxCharLength");
public $finalRule = array();
// model property is the prop name in the model
// column name is
public function __construct($modelProperty = "", $columnName = "", $type = "") {
$this->finalRule["modelName"] = $modelProperty;
$this->finalRule["columnName"] = $columnName;
$this->finalRule["type"] = $type;
}
public function addCriteria($option, $val) {
if(in_array($option, $this->options)) {
$this->finalRule[$option] = $val;
}
}
}
扩展 DataMapper 类的更简单版本如下所示:
class UserDataMapper extends DataMapper {
public $map = array();
public function __construct() {
$rule = new DataMapRule("_age", "Age", "int");
$rule->addCriteria("minVal", "1");
$rule->addCriteria("nullOrEmpty", false);
$this->map[] = $rule->finalRule;
$rule = new DataMapRule("_firstName", "FirstName", "string");
$rule->addCriteria("maxCharLength", 50);
$rule->addCriteria("nullOrEmpty", false);
$this->map[] = $rule->finalRule;
}
}
我将为我的所有模型/模块创建这些映射和规则。
我想做的是清理代码/使其更容易编码和遵循。有什么方法可以设置类,以便在 DataMapper 构造函数中我可以执行以下操作:
public function __construct() {
$this->map[] = new DataMapRule("_firstName", "FirstName", "string")
->addCriteria("maxCharLength", 50)
->addCriteria("nullOrEmpty", false)
->finalRule;
}
解决方案
这通常称为“流体”接口,要实现这一点,您真正需要做的就是$this
从您的addCriteria()
函数中返回。
public function addCriteria($option, $val) {
if(in_array($option, $this->options)) {
$this->finalRule[$option] = $val;
}
return $this;
}
返回$this
是意味着您可以addCriteria
再次调用结果addCriteria
推荐阅读
- tensorflow - 为什么不连接到 Keras 模型中的预期层
- arrays - 附加到 curl 对象并使用 jq 添加到文件中的数组?
- python - 需要将列名添加到 numpy 数组
- react-native - undefined 不是函数(评估“firebase.initializeApp(config)”)
- angular - 在 ionic for web 平台中实现推送通知时面临的问题
- visual-studio-code - VS Code 语法高亮支持的最大文件大小是多少?
- javascript - 角 | 订阅多个 observables
- angular - Angular 6 - 输入控件悬停时的验证错误消息
- javascript - 如何使用javascript检测值是否为空?
- php - 当表值为 null Codeigniter 时页面重定向到错误的 url