FUDforum
Fast Uncompromising Discussions. FUDforum will get your users talking.

Home » Imported messages » comp.lang.php » question about class getters
Show: Today's Messages :: Polls :: Message Navigator
Return to the default flat view Create a new topic Submit Reply
Re: question about class getters [message #180839 is a reply to message #180738] Thu, 21 March 2013 09:31 Go to previous messageGo to previous message
Curtis Dyer is currently offline  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);?>
[Message index]
 
Read Message
Read Message
Read Message
Read Message
Read Message
Read Message
Read Message
Read Message
Read Message
Read Message
Read Message
Read Message
Previous Topic: Will this set or get a SESSION variable?
Next Topic: Fatal error!
Goto Forum:
  

-=] Back to Top [=-
[ Syndicate this forum (XML) ] [ RSS ]

Current Time: Thu Nov 28 03:45:40 GMT 2024

Total time taken to generate the page: 0.04478 seconds