Re: question about class getters [message #180839 is a reply to message #180738] |
Thu, 21 March 2013 09:31 |
Curtis Dyer
Messages: 34 Registered: January 2011
Karma:
|
Member |
|
|
Jerry Stuckle <jstucklex(at)attglobal(dot)net> wrote:
> On 3/15/2013 1:53 PM, David Heller wrote:
>> On Mar 15, 1:11 pm, Jerry Stuckle <jstuck...@attglobal.net>
>> wrote:
>>> On 3/15/2013 11:42 AM, David Heller wrote:
>>>
>>>> Hello
>>>
>>>> I have the following code snippet:
>>>
>>>> Class myClass
>>>
>>>> {
>>>> public function makeArray()
>>>> {
>>>> $this->my_array = array('Mon', 'Tues', 'Wed', 'Thurs',
>>>> 'Friday', 'Sat', 'Sun');
>>>> }
>>>> pubic function getArray()
>>>> {
>>>> return $this->my_array;
>>>> }
>>>> }
>>>
>>>> and then do the following
>>>
>>>> var $MyVar = new myClass();
>>>> var $mydate = $MyVar->getArray[1];
>>>> echo $mydate;
>>>> => Mon
>>>> will this work? If not how to make it work?
Why not try first and see what happens?
<snip>
>>> Not quite, for a couple of reasons. As Salvatore pointed out,
>>> getArray() is a function, not a variable, so you need to code
>>> it as a function. The other problem is you never called
>>> makeArray() and don't have a constructor, so $my_array doesn't
>>> exist (also it should be declared as a class variable).
>>>
>>> Something like this should works:
<snip code>
>> Even better:
>>
>> class MyClass {
>> private $my_array;
>>
>> public function __construct() { // Constructor
>> $this->my_array = array('Mon', 'Tues', 'Wed', 'Thurs',
>> 'Friday',
>> 'Sat', 'Sun');
Just out of curiosity, why is `Friday' the only day of the week
that's not abbreviated in your list?
>> }
>> public function __get($i) {
>> // if ($i >= 0 && $i < count($this->my_array)) //
>> Verify index if(array_key_exists($i, $this->my_array)){
>> // For keys
>> that are non-numerical
>> return $this->my_array[$i];}
>> else
>> return null; // Out of range or non-existant
>> }
>>
>> }
>>
>> I get it now (no pun intended).
>
> No, __get is a "magic method" and used to access properties for
> which you have no special getter method. You need to pass the
> name of the property you wish.
Magic methods like `__get()' are called when "inaccessible"
properties or methods are invoked, at which point you may handle
the call any way you wish. According to the PHP manual[1],
"inaccessible" methods and properties include those which are not
defined, so you don't need to specify the names of actual class
members for `__get()' to work.
[1]: <http://php.net/__get>
<snip>
> It's also not
> applicable to passing additional parameters, such as the index
> you wish.
Yes, the `__get()' magic method expects a string, and moreover, if
the OP intends to use the class similarly to the code they posted
initially, it would be a syntax error:
echo $obj->2; /* parse error */
Using a custom getter method as you posted above, IMO, seems
easiest.
--
Curtis Dyer
<?$x='<?$x=%c%s%c;printf($x,39,$x,39);?>';printf($x,39,$x,39);?>
|
|
|