NYCPHP Meetup

[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