[nycphp-talk] OOP Newbie Building arrays in extended classes
Leam Hall
leamhall at gmail.com
Fri Jan 25 18:57:40 EST 2013
Err...until I remember to put parent::__construct() in B. :)
Leam
On 01/25/2013 06:51 PM, Leam Hall wrote:
> 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