[nycphp-talk] OOP Newbie Building arrays in extended classes
Leam Hall
leamhall at gmail.com
Fri Jan 25 19:34:14 EST 2013
Will do. Right now I'm trying to figure out how to override a variable
set in the parent class.
On 01/25/2013 07:06 PM, Darryle Steplight wrote:
> Take a look at PHP traits, its a PHP 5.4 feature and PHP's solution to
> multi-inheritance.
>
> On Fri, Jan 25, 2013 at 6:57 PM, Leam Hall <leamhall at gmail.com> wrote:
>> 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
>>>>
>> _______________________________________________
>> 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