PHP静态方法与单例设计

PHP静态方法与单例设计 PHP静态方法与单例设计静态方法在不实例化对象的情况下直接调用。单例模式确保一个类只有一个实例。今天说说静态方法和单例模式的使用。静态方法用static关键字声明。静态方法不能使用$this。phpclass MathHelper{public static function square(int $n): int{return $n * $n;}public static function sumSquares(int $a, int $b): int{return self::square($a) self::square($b);}public static function factorial(int $n): int{if ($n 1) return 1;return $n * self::factorial($n - 1);}}echo MathHelper::square(5) . \n;echo MathHelper::sumSquares(3, 4) . \n;echo MathHelper::factorial(5) . \n;?静态属性在类所有实例之间共享。phpclass Counter{private static int $count 0;public static function increment(): void{self::$count;}public static function getCount(): int{return self::$count;}public static function reset(): void{self::$count 0;}}Counter::increment();Counter::increment();Counter::increment();echo Counter::getCount() . \n;Counter::reset();?静态方法也叫后期静态绑定。phpclass Base{public static function who(): void{echo Base\n;}public static function test(): void{self::who();static::who();}}class Child extends Base{public static function who(): void{echo Child\n;}}Child::test();?单例模式确保一个类只有一个实例。phpclass Database{private static ?PDO $instance null;private static int $queryCount 0;public static function getConnection(): PDO{if (self::$instance null) {self::$instance new PDO(mysql:hostlocalhost;dbnametest;charsetutf8mb4,root, ,[PDO::ATTR_ERRMODE PDO::ERRMODE_EXCEPTION]);}return self::$instance;}public static function query(string $sql, array $params []): array{self::$queryCount;$stmt self::getConnection()-prepare($sql);$stmt-execute($params);return $stmt-fetchAll();}public static function getQueryCount(): int{return self::$queryCount;}}$users Database::query(SELECT * FROM users);echo 查询次数: . Database::getQueryCount() . \n;?static关键字在PHP中的几种用法。静态方法可以不用实例化直接调用适合工具函数。静态属性在类所有实例之间共享。后期静态绑定在继承场景中很有用。单例模式用一个静态属性存储实例确保全局唯一。