PHP中类的静态函数和函数有什么区别?

Hac*_*die 5 php oop

我需要有从数据库中获取内容的方法,但我不理解PHP中静态函数和普通函数之间的区别.

示例代码

class Item {
    public static function getDetail($arg) {
        $detail = $this->findProductId($arg);   
        return $detail;
    }

    private function findProductId($id) {
        //find product_id in database where id = $arg
        //return detail of product
    }
}
Run Code Online (Sandbox Code Playgroud)

和课外的功能

function getDetail($arg) {
    $detail = findProductId($arg);
    return $detail;
}
Run Code Online (Sandbox Code Playgroud)

如果我使用$item = Item::getDetail(15);$item = getDetail(15);- 他们是一样的.

  1. 一个类之外的静态和函数有什么区别?
  2. 如果它们不同,如​​何在类之外使用静态函数和函数?(我很欣赏一个非常简单的例子.)
  3. 类之外的静态和函数之间的性能属性是什么?哪个更好?

joh*_*nny 11

1)静态功能和正常功能有什么区别

虽然它们是函数,但我更喜欢将它们称为给定类的方法.一个是静态方法,另一个是实例方法.

静态方法: $item = Item::getDetail(15);

实例方法: $item = getDetail(15);

(但是,请参阅上面评论中的FuzzyTree的正确语法.)

2)如何使用静态函数和正常函数(如果你简单的例子是好的)

静态意味着您不必实例化(声明对象引用).也就是说,您可以简单地使用该方法.因此,在您的示例中,虽然答案可能相同,但您调用该方法/函数的方式也不同,如上所述.

例如,在Java中,您拥有Math类.它不需要实例化使用,事实上你不能我所知道的,因为它的构造函数是私有的.您可以通过引用要使用的类和方法名称来简单地使用方法,

Math.pow(d1, d2);  //no instantiation needed
Run Code Online (Sandbox Code Playgroud)

在PHP中这可能是,

MyClass::pow(d1,d2); //no instantiation needed
Run Code Online (Sandbox Code Playgroud)

Java:何时使用静态方法

3)询问静态功能和正常功能之间的性能.哪个更好?

更好的是你的设计问题.如果你每次想要使用一个数字的力量来创建一个对象,那么就会产生更多的内存,而不是直接使用该类.我没有基准证明,但它似乎合乎逻辑,因为你没有在内存中以相同的方式处理方法.除非你做了很多复杂的动作,否则我认为它在现实世界中并不重要.

静态方法与实例方法的性能

也许你会感兴趣.