在PHP中,::符号主要用于访问类的静态成员(静态属性或静态方法)以及使用限定名称空间。以下是::的一些常见用法示例:

访问静态方法和静态属性

当你需要在不实例化类的情况下调用类的静态方法或访问静态属性时,可以使用::操作符。

class MyClass {
    public static $staticProperty = 'Hello, World!';
    
    public static function staticMethod() {
        return 'Called static method.';
    }
}

// 访问静态属性
echo MyClass::$staticProperty; // 输出: Hello, World!

// 调用静态方法
echo MyClass::staticMethod(); // 输出: Called static method.
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
类常量

类常量也是静态的,因此也需要使用::来访问。

class MyClass {
    const MY_CONSTANT = 42;
}

echo MyClass::MY_CONSTANT; // 输出: 42
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
命名空间的限定名称

当你的代码中使用了多个命名空间,或者需要明确指出类的完整命名空间路径时,可以使用::

namespace MyNamespace;

class MyClass {
    public static function hello() {
        return 'Hello from MyNamespace\MyClass';
    }
}

// 在同一个命名空间内调用
echo MyClass::hello(); // 输出: Hello from MyNamespace\MyClass

// 在不同的命名空间内调用,需要完全限定名称
use MyNamespace\MyClass as MyNamespaceClass;

echo MyNamespaceClass::hello(); // 输出: Hello from MyNamespace\MyClass
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
晚绑定静态调用

在子类中重写父类的静态方法时,有时需要在子类中调用父类的静态方法。这时可以使用parent::来明确地调用父类的静态方法或属性。

class ParentClass {
    public static function hello() {
        return 'Hello from ParentClass';
    }
}

class ChildClass extends ParentClass {
    public static function hello() {
        return 'Hello from ChildClass - ' . parent::hello();
    }
}

echo ChildClass::hello(); // 输出: Hello from ChildClass - Hello from ParentClass
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.

以上就是在PHP中使用::操作符的一些常见场景和示例。