final class Singleton{\n private static ?Singleton $instance = null;\n public static function getInstance(): Singleton\n {\n if (static::$instance === null) {\n static::$instance = new static();\n }\n return static::$instance;\n }\n private function __construct(){\n }\n private function __clone(){\n }\n private function __wakeup(){\n }\n}
abstract class BookPrototype\n{\n protected string $title;\n protected string $category;\n abstract public function __clone();\n public function getTitle(): string\n {\n return $this->title;\n }\n public function setTitle(string $title)\n {\n $this->title = $title;\n }\n}\nclass BarBookPrototype extends BookPrototype\n{\n protected string $category = \'Bar\';\n\n public function __clone()\n {\n }\n}
比如有循环创建对象的情况
$fooPrototype = new FooBookPrototype();\n\nfor ($i = 0; $i < 10; $i++) {\n $book = clone $fooPrototype;\n $book->setTitle(\'Foo Book No \' . $i);\n}