php返回提示,PHP 7返回类型提示

问题是您的对象不遵循OOP规则.

首先,getters and setters are evil因为它们暴露了对象的内部结构.您只需介绍依赖于系统其余部分的内部用户对象结构的无限可能性.虽然该对象的目的是隐藏实现细节并提供操作此隐藏数据的接口.

而null is evil(或a billion dollar mistake)因为它使代码更不可靠.

它介绍了特殊情况(null返回值),并且必须在使用您的对象的代码中处理这种特殊情况.

更糟糕的是,如果你忘记处理这个“空”特殊情况(或者如果你不知道有特殊情况),你将不会立即得到错误.

因此,您将获得隐藏的错误,这可能非常耗时,无法找到并修复.

实际上,我看到以下选项(在所有情况下 – 删除getter):

选项1)以统一的形式获取配置文件数据的快照

$user->getProfileData() {

return [

'username': $this->username,

'realName': $this->realName ? $this->realName : '',

'address': $this->address ? $this->address : 'Not specified'

...

];

}

这仍然是一种吸气剂,但您将所有数据转换为统一形式(字符串).即使数据库中有一些浮点字段的整数(如年龄或高度),您仍然会在此处返回字符串,因此系统的其余部分不依赖于对象的实际内部.

可选字段的空字符串(或类似“未指定”的特殊值)也充当一种“空对象”.也可以将返回的值包装到小字段对象中,并实际使用空对象模式作为可选字段.

在使用该类的代码中,您不应该处理特殊的“null”情况,只需循环遍历字段并显示字符串(包括那些空字符串).

选项2)使对象本身负责演示

$user->showProfile($profileView) {

$profileView->addLabel('First Name');

$profileView->addString($this->username);

...

}

在这里你保留对象内部的细节,但现在它做了太多,所以有人可能会说它现在违反了SRP.

选项3)创建负责演示的特殊对象

$userPresentation = $user->createPresentation()

// internally it will return new UserPresentation($this->username, this->realName, $this->address, ...);

// now display it - generate the template and insert it into the view

echo $userPresentation->getHtml(); ?>

在这里,您将表示逻辑移动到单独的对象中.用户对象和它的表示是紧密耦合的,但系统的其余部分现在对用户对象内部结构一无所知(并且没有机会知道).

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值