应该在静态和对象上下文中使用函数

pin*_*aki 2 php programming-languages

在我公司的代码库中,我看到静态和对象上下文中使用的函数.例如,类A具有函数b(),其使用A :: b()和/或object_of_type_A-> b()来调用.我知道如果打开strict,会抛出错误.但我想知道这是不是一种不好的做法,如果是的话,为什么呢?谢谢你的回答.

如果我在任何地方都没有意义,请告诉我.我很乐意澄清.

Jon*_*eet 7

我不是一个php人,但这听起来就像Java,它允许但不鼓励.

如果它是静态的,我强烈建议只以静态方式调用它.否则看起来它取决于你应该调用它的对象的状态.

在Java中,最好的例子是Thread.sleep().这是一个静态方法,它总是让当前线程进入休眠状态.但看看这段代码:

Thread t = new Thread(someTask);
t.start();
t.sleep(1000);
Run Code Online (Sandbox Code Playgroud)

这是什么看起来像代码是干什么的?它似乎是让另一个线程进入休眠状态,而实际上它将是正在休眠的当前线程.当您将其更改为普通静态调用时,它更明显:

Thread.sleep(1000);
Run Code Online (Sandbox Code Playgroud)

这不是指t,所以必须是关于当前的线程.

除非有一些特定的PHP,通过变量调用静态方法给你一些多态,我建议你坚持以静态方式调用它.严格模式告诉你这样做的事实是一个非常强烈的提示,IMO :)