[nycphp-talk] OOP Newbie Building arrays in extended classes
Leam Hall
leamhall at gmail.com
Fri Jan 25 17:47:15 EST 2013
Okay, OOP newbie time again. In line 11 I declare an array. Per IRC
conversations a day or so ago, line 49 has to go into the __construct
function. However, the hope is that line 83 would add to what was done
in line 49. It seems not to.
I think because the extends doesn't actually call the __construct. Is my
understanding correct? How would I achieve the goal of adding line 83 so
that $roles included 'troop' and 'nco' for an object of class NCO?
Thanks!
Leam
####
1 <?php
2
3 require_once 'stat_array.php';
4
5 class Person {
6
7 public $name;
8 public $age;
9 public $gender = "Female";
10 public $skills = array();
11 public $roles = array();
12
13 public function __construct() {
14 $this->age = 10 + rand(1,7);
15 $this->gender = $this->roll_gender(50);
16 return true;
17 }
18
19 protected function roll_age($min, $max) {
20 return 17 + rand($min, $max);
21 }
22
23 protected function roll_gender($trigger) {
24 if (rand(1, 100) < $trigger) {
25 return "Male";
26 } else {
27 return "Female";
28 }
29 }
30
31 protected function add_skill(&$skill_array, $skill) {
32 // Note the array pass by reference, per ##php fluffypony
33 if (array_key_exists($skill, $skill_array)) {
34 $skill_array[$skill] = $skill_array[$skill] + 1;
35 } else {
36 $skill_array[$skill] = 1;
37 }
38 return $skill_array;
39 }
40 }
41
42 class Trooper extends Person {
43
44 private $rank_min = 1;
45 private $rank_max = 2;
46 protected $rank_class = 'rank_enlisted';
47 public $rank;
48 public function __construct($params) {
49 $this->roles[] = 'troop';
50 $this->age = $this->roll_age($this->rank_min, 3 +
$this->rank_max);
51 $this->gender = $this->roll_gender($params['percent_male']);
52 $this->rank =
$params[$this->rank_class][$this->get_rank($this->rank_min,
$this->rank_max)];
53 foreach($this->roles as $role) {
54 $this->add_skill($this->skills,
$params['base_skill'][$role]);
55 }
56
57
58 return true;
59 }
60
61 protected function get_rank($rank_min, $rank_max) {
62 return rand($rank_min, $rank_max);
63 }
64
65 }
66
67 class Corporal extends Trooper {
68 private $rank_min = 3;
69 private $rank_max = 4;
70
71 public function __construct($params) {
72 $this->age = $this->roll_age($this->rank_min , 5 +
$this->rank_max);
73 $this->gender = $this->roll_gender($params['percent_male']);
74 $this->rank =
$params[$this->rank_class][$this->get_rank($this->rank_min,
$this->rank_max)];
75 }
76 }
77
78 class NCO extends Corporal {
79 private $rank_min = 4;
80 private $rank_max = 6;
81
82 public function __construct($params) {
83 $this->roles[] = 'nco';
84 $this->age = $this->roll_age($this->rank_min , 7 +
$this->rank_max);
85 $this->gender = $this->roll_gender($params['percent_male']);
86 $this->rank =
$params[$this->rank_class][$this->get_rank($this->rank_min,
$this->rank_max)];
87 foreach($this->roles as $role) {
88 $this->add_skill($this->skills,
$params['base_skill'][$role]);
89 }
90
91 }
92 }
93
94 class SNCO extends NCO {
95 private $rank_min = 6;
96 private $rank_max = 9;
97
98 public function __construct($params) {
99 $this->age = $this->roll_age($this->rank_min , 10 +
$this->rank_max);
100 $this->gender = $this->roll_gender($params['percent_male']);
101 $this->rank =
$params[$this->rank_class][$this->get_rank($this->rank_min,
$this->rank_max)];
102 }
103 }
105 class Platoon_Officer extends Trooper {
106 private $rank_min = 1;
107 private $rank_max = 2;
108 protected $rank_class = 'rank_officer';
109
110 public function __construct($params) {
111 $this->age = $this->roll_age($this->rank_min , 4 +
$this->rank_max);
112 $this->gender = $this->roll_gender($params['percent_male']);
113 $this->rank =
$params[$this->rank_class][$this->get_rank($this->rank_min,
$this->rank_max)];
114 }
115 }
116
117
118 class Company_Officer extends Platoon_Officer {
119 private $rank_min = 3;
120 private $rank_max = 4;
121
122 public function __construct($params) {
123 $this->age = $this->roll_age($this->rank_min , 7 +
$this->rank_max);
124 $this->gender = $this->roll_gender($params['percent_male']);
125 $this->rank =
$params[$this->rank_class][$this->get_rank($this->rank_min,
$this->rank_max)];
126 }
127 }
128
129
130 ?>
More information about the talk
mailing list