NYCPHP Meetup

[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