调用 PHP 类的不同方式


Different ways of calling a PHP class

当你调用一个PHP类时 - 为了举例起见,我将调用该类myClass并给它一个叫做someMethod()的方法以下称呼方式有什么区别。

$AAA = new myClass();
$AAA->someMethod();

myClass::someMethod();

$AAA = 'myClass';
$AAA::someMethod();

首先,让我们澄清一下白话。类被实例化,方法被调用,所以你会说"调用方法的方式",而不是"调用类的方式"。

现在,您的问题的答案在于上面的澄清:类被实例化,当你这样做时,你得到的是一个对象(或对象实例,或实例)。此实例同时具有方法和数据。

(不是类的实例化)具有方法。其中一些方法要求仅在实例上调用它们(即,它们需要或使用实例数据,例如在方法主体中使用$this)。某些方法可能没有这样的要求,因此可以声明为静态方法。静态方法(其他语言可能称它们为"类方法")可以直接从类调用,并且与"实例"没有关系,这在PHP中意味着它们在调用它们时没有$this变量。但它们确实有一个 self 关键字,该关键字引用调用该方法的类。

PHP 中的语法在调用实例方法和静态方法之间有所不同:

$obj->instanceMethod();
ObjClass::staticMethod();

您可能会发现有趣的是,这只是 PHP 的样式决定,并且其他语言在调用类方法和实例方法时具有相同的语法。下面是一个 Objective-C 示例:

[myInstance setFoo:bar];
[MyClass fooMethodWithArg:bar];