1 <?php
2
3 abstract class Person
4 {
5 protected $_name;
6
7 abstract public function getName();
8 }
9
10 class RealPerson extends Person
11 {
12 function __construct($name)
13 {
14 $this->_name = $name;
15 }
16
17 public function getName()
18 {
19 echo "我的名字是:{$this->_name}";
20 }
21 }
22
23 class NullPerson extends Person
24 {
25 public function getName()
26 {
27 echo "<br/>我不是人类哦";
28 }
29 }
30
31
32
33
34 class Factory
35 {
36 private $_names = ['A', 'B', 'C'];
37
38 public function produce($personName)
39 {
40 if (array_search($personName, $this->_names) !== false) {
41 return new RealPerson($personName);
42 }
43
44 return new NullPerson();
45 }
46 }
47
48
49
50 $f = new Factory();
51 $p1 = $f->produce('A');
52 $p1->getName();
53
54 $p2 = $f->produce('G');
55 $p2->getName();