[nycphp-talk] OOP Newbie Building arrays in extended classes
Darryle Steplight
dsteplight at gmail.com
Fri Jan 25 19:06:19 EST 2013
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
--
----------------------------------------------
"May the source be with you."
More information about the talk
mailing list