**一.魔术方法属性和返回值类型声明必须严格执行** ~~~ public function __toString(): string {} public function __isset(string $name): bool {} public function __get(string $name): mixed {} public function __set(string $name, mixed $value): void {} public function __unset(string $name): void {} public function __set_state(array $properties): object {} public function __call(string $name, array $arguments): mixed {} public function __callStatic(string $name, array $arguments): mixed {} public function __invoke(mixed $arguments): mixed {} public function __clone(): void {} public function __serialize(): array {} public function __unserialize(array $data): void {} public function __sleep(): array {} public function __wakeup(): void {} public function __debugInfo(): ?array {} ~~~ **二.实例** 1.\_\_toString魔术方法 ~~~ class Person { public function __toString():int{ return 'my name is php8'; } } echo new Person; ~~~ 2.\_\_clone魔术方法 ~~~ class Person { public function __clone():string{ echo 123; return 'hello'; } } $obj=new Person; $a=clone $obj; ~~~ 3.\_\_isset魔术方法 ~~~ class Person{ private $name='user1'; public function __isset(string $key):bool{ return isset($this->$key); } } $obj=new Person; var_dump(isset($obj->name)); ~~~