[nycphp-talk] OOP Newbie Building arrays in extended classes
Leam Hall
leamhall at gmail.com
Fri Jan 25 18:51:37 EST 2013
Interesting. The parent isn't multi-generational, far as I can see. That
is, if C extends B which extends A, parent::__construct() in C does not
have access to stuff constructed in A.
I can make it work by making C extend A, but need to google a way to
inherit further up the chain.
Thanks!
Leam
On 01/25/2013 06:42 PM, Joey Derrico wrote:
> As Jeff said you have to call it explicitly
>
> class Trooper extends Person
> {
> public function _construct($parms)
> {
> parent::_construct();
> //Whatever else is here
> }
> }
>
> Joey Derrico
>
> On Fri, Jan 25, 2013 at 5:57 PM, Rob Marscher
> <rmarscher at beaffinitive.com <mailto:rmarscher at beaffinitive.com>> wrote:
>
> 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
> <mailto: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 <tel:970.443.9390>
>> jeff at jeffslutz.com <mailto:jeff at jeffslutz.com>
>>
>>
>> On Fri, Jan 25, 2013 at 5:47 PM, Leam Hall <leamhall at gmail.com
>> <mailto: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>
>>
>>
>> _______________________________________________
>> 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
>
>
>
>
> _______________________________________________
> New York PHP User Group Community Talk Mailing List
> http://lists.nyphp.org/mailman/listinfo/talk
>
> http://www.nyphp.org/show-participation
>
More information about the talk
mailing list