NYCPHP Meetup

NYPHP.org

[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