[nycphp-talk] OOP Newbie Building arrays in extended classes
Rob Marscher
rmarscher at beaffinitive.com
Fri Jan 25 17:57:12 EST 2013
Here's where the info is for that in the php docs:
http://php.net/manual/en/language.oop5.decon.php
On Jan 25, 2013, at 5:51 PM, Jeff Slutz <jeff at jeffslutz.com> wrote:
> I think you're looking for parent::__construct();
>
> The child's __construct() will replace the parent's. So if you want to run the parent's you have to call it explicitly.
>
> JS
>
> --
> Jeff Slutz
> JSLEUTH LLC
> 3242 44th ST APT 3F
> Astoria, NY 11103
> c. 970.443.9390
> jeff at jeffslutz.com
>
>
> On Fri, Jan 25, 2013 at 5:47 PM, Leam Hall <leamhall at gmail.com> wrote:
>> 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 ?>
>>
>>
>> _______________________________________________
>> New York PHP User Group Community Talk Mailing List
>> http://lists.nyphp.org/mailman/listinfo/talk
>>
>> http://www.nyphp.org/show-participation
>
> _______________________________________________
> New York PHP User Group Community Talk Mailing List
> http://lists.nyphp.org/mailman/listinfo/talk
>
> http://www.nyphp.org/show-participation
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.nyphp.org/pipermail/talk/attachments/20130125/e6264b90/attachment.html>
More information about the talk
mailing list