[英]Should Helper Functions be in a Class?
在考虑到OOP的情况下重写我过去的项目时,我已将代码分解为设备,设施等类。
在转向一种更加面向对象的方法之前,我只是将我的所有辅助函数粘贴在一个包含的“ functions.php”文件中。 以设备为例,是否最好为我的对象特定的属性/方法创建一个Devices类,然后再使用一个DeviceManager类来存储诸如getDeviceByName,getDeviceByID之类的函数?
根据我的理解,OOP比任何其他内容都更具有可读性/可管理性,为什么我认为这样做的目的只是用DeviceManager :: GetDevice(“ Computer1”)之类的东西代替GetDeviceByName(“ Computer1”)
如果您想将类用作命名空间,则可以使用实际的命名空间:
namespace MyCollectionOfFunctions;
function printMyName($name) {
echo $name;
}
然后,您可以使用如下功能:
use MyCollectionOfFunctions as fn;
echo fn\printMyName('Brett Powell');
功能没有错。 不要让任何人告诉您他们属于一个类,就像静态方法一样。 可以通过这种方式完成,但是由于我们有了名称空间,因此确实没有理由。
在C#或Java之类的OOP语言中,您根本无法在类之外使用函数,因此没有问题。 这并不意味着您正在做OOP,这是一种心态。
在PHP中,您可以将相关函数放入nampespace中,也可以放入类中(在命名空间内)。 这取决于您,没有正确或错误的方法。 就我个人而言,我将它们放在一个类中,因为这就是我在C#中所做的方式,它将对生产率有所帮助:我将相关功能分组在一个地方(类)。 更容易管理。
但是严格来说,从编程的角度来看,这没有什么区别,因为将函数放入类或命名空间中,您的代码不会更干净/解耦或更多的OOP。
将命名空间或类用于静态函数时的一些优点。
命名空间和类名称有助于区分功能。 您可以避免命名冲突。
当您想利用IDE的自动建议功能时,DPDate :: FirstDayOfMonth()比FirstDayOfMonth()更好。
您必须遵循以下规则:
记住这一点,您将可以编写清晰的代码。 =)
回答有关项目4的Eric:此代码将使用静态方法:
public function myFunction() {
$deviceId = DeviceManger::getDeviceId('computer 1');
// Rest of code using the device id
}
这样,我无法模拟设备ID的返回,从而可以:
public function myFunction(deviceManger) {
$deviceId = deviceManager->getDeviceId('computer 1');
// Rest of code using the device id
}
测试功能中带有模拟的代码:
$deviceManager = $this->getMock('DeviceManager');
$deviceManager->method('getDeviceId')->returnValue(1);
myFuncion($deviceManager);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.