NYCPHP Meetup

NYPHP.org

[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