重载与过载 php,在PHP中重载属性和方法 – 原因是什么?

Is it a good idea to use overloading for solely cute-function-naming reasons? 🙂

不,我的意思是,这取决于. :)让我们为编程生活添加一些可怕和可爱:

$ordinary = new stdClass();

$ordinary->Caption = 'Hello';

class Awesome

{

private $ordinary;

public function __construct($ordinary) {

$this->ordinary = (array) $ordinary;

}

public function __get($name) {

$value = '';

return $this->ordinary[$name];

}

}

class Lovely extends Awesome

{

public function __get($name)

{

return '<3 ' . parent::__get($name) . ' <3';

}

}

我必须承认,这个例子可能有点超过顶部,但显示了一些东西.

首先,假设API是一个类.所以它从一个非常普通的stdClass开始.

这个例子显示的是那些魔术函数可用于重载或装饰某些东西.可以,但绝不能.看到令人敬畏的API,它本身就很棒:

$awesome = new Awesome($ordinary);

echo $awesome->Caption, "\n"; # This caption is just awesome by itself!

# Hello

然后看看更可爱的API示例:

$lovely = new Lovely($ordinary);

echo $lovely->Caption, "\n"; # This caption is lovely, hughs and kisses everyone!

# <3 Hello <3

所以在这个例子中,对于Lovely来说这是一个好主意,但它对Awesome来说没用,因为Awesome实际上更容易获得:

$awesome = $ordinary;

这让我想到了,API中的重载只能在特定点上有用.作为Lovely节目,它可以用来装饰另一个(没有多少指定的对象),但它也表明这只是一次性的:可爱已经需要知道如何调用Awesome来利用它的功能(现在不再是魔术)__ get方法:

public function __get($name)

{

return '<3 ' . parent::__get($name) . ' <3';

}

当您现在认为Awesome是您的API时,您可以看到它阻止自己轻易地从想要使用它的其他代码中重载.

因此,在具体的代码中,重载可以很好,API不应该阻止它.但是当API本身过载时,事情变得很困难.

不仅仅是编码,添加动态/魔术也使得调试变得困难.因此,最好保持您创建的API,并提供更具体的界面,然后只需[]或 – >.你可以给出具体的名称,并且效果很好;)

然后它更加可爱:

echo $store->getObject('product')->getPrice($currency);

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值