PHP单例模式面试注意事项 博客分类: vb2005xu自己动手系列FleaPHP/QEEPHP 资料 php
程序员文章站
2024-02-07 19:58:52
...
最近面了不少PHP从业者,有实习生也有5/6年以上的开发者,对于1年以上的从业者我都要求他们来实现一个单例类,通过这个问题评测了不少从业者水平
一般都要求写一个单例模式的类实现,此处有几处考察的点:
- 单例的基本构建代码
- __clone 如何规避克隆问题
- 深浅复制的问题
- 代码规范问题
// php的__clone()方法对一个对象实例进行的浅复制,对象内的基本数值类型进行的是传值复制,而对象内的对象型成员变量,如果不重写__clone方法,显式的clone这个对象成员变量的话,这个成员变量就是传引用复制,而不是生成一个新的对象. class Account { public $balance; public function __construct($balance) { $this->balance = $balance; } } class Person { private $id; private $name; private $age; public $account; public function __construct($name, $age, Account $account) { $this->name = $name; $this->age = $age; $this->account = $account; } public function setId($id) { $this->id = $id; } public function __clone() { #复制方法,可在里面定义再clone是进行的操作 $this->id = 0; $this->account = clone $this->account; #不加这一句,account在clone是会只被复制引用,其中一个account的balance被修改另一个也同样会被修改 } } $person = new Person("peter", 15, new Account(1000)); $person->setId(1); $person2 = clone $person; $person2->account->balance = 250; var_dump($person, $person2);