NYCPHP Meetup

[nycphp-talk] OOP Newbie Building arrays in extended classes

Jeff Slutz jeff at jeffslutz.com
Fri Jan 25 17:51:14 EST 2013


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://lists.nyphp.org/mailman/listinfo/talk>
>
> http://www.nyphp.org/show-**participation<http://www.nyphp.org/show-participation>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.nyphp.org/pipermail/talk/attachments/20130125/cbede467/attachment.html>


More information about the talk mailing list