HttpSocket响应体和body()之间的差异



有两种方法可以获得HttpResponse的body

$http = new HttpSocket();
$response = $http->get('http://www.cakephp.org');
$response->body;

和方法

$http = new HttpSocket();
$response = $http->get('http://www.cakephp.org');
$response->body();

都返回相同的,但属性和方法之间的区别是什么?

我认为该方法是后来添加的,但不确定。在更新的2中处理许多方法。x版本从3向后移植,使API更加一致,以便仍然使用Cake2的人可以更新他们的Cake2。X应用到3。X接口,最终升级时麻烦更少。因此,在两者都存在的情况下,总是使用方法而不是属性。

技术上的原因参见这个问题:直接调用变量属性vs getter/setter——OOP设计使用方法而不是属性的原因在第二个答案中解释,第二个答案有更多的投票。还有一个例子:属性vs方法

TL;博士:

你失去了在特定属性上实现特殊get/set逻辑的能力。对于标量属性(字符串,整数,布尔值),这可能没有问题。但是,如果有一个属性是惰性加载的类实例怎么办?

一个例子是一个API响应,你想要解析并返回其他东西,或者在API返回错误代码时抛出异常。然后扩展HttpSocket并重载body()方法。

但是我建议你看完整个答案,它很不错。

最新更新