Re: accessing variables within objects

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Here's the PHP doc page.
Let us know if you have more questions:
http://us3.php.net/manual/en/language.oop5.overloading.php

Thank you,
Micah Gersten
onShore Networks
Internal Developer
http://www.onshore.com



Philip Thompson wrote:
> On Jul 30, 2008, at 1:29 PM, Jim Lucas wrote:
>
>> Marten Lehmann wrote:
>>> Hello,
>>> I'm using some php-classes which worked fine with php-5.0.4. Now I
>>> tried to upgrade to php-5.2.6, but the classes give a lot of errors.
>>> If I set
>>> error_reporting(E_ALL);
>>> I see messages like
>>> Notice: Undefined property: FastTemplate::$main in
>>> /whereever/inc.template.php on line 293
>>> Notice: Undefined property: current_session::$cust_id in
>>> /whereever/inc.init.php on line 117
>>> In inc.template.php there are a lot of calls like $this->$key. In
>>> inc.init.php there are calls like $session->cust_id.
>>
>> to fix these errors, you would need to modify the code so it does
>> something like this.
>>
>> where it calls $this->$key you need to check and make sure that $key
>> exists before you trying call for it.
>>
>> So something like this would work.
>>
>> if ( isset( $this->$key ) ) {
>>     $this->$key;
>> } else {
>>     $this->$key = null;
>> }
>>
>> You didn't show any context in which you are using the above code. So
>> I don't know what will actually work in your situation.  Show a
>> little more code that includes the method in which $this->$key is
>> called.
>>
>> You will want to look at using the Overloading feature of PHP5. 
>> Check out this page for overloading examples
>>
>> http://us2.php.net/manual/en/language.oop5.overloading.php
>>
>> Take note of the __get() and __set() methods.  The __get method
>> checks to see if the key exists before it tries working with it.
>
> Ok, I'm trying to understand the point to using these overloading
> methods.
>
> <?php
> $obj = new ClassThatUsesOverloading ();
> $obj->hi = 'Hi';
> $obj->bye = 'Bye';
>
> echo $obj->hi, ' ', $obj->bye;
> // Output: Hi Bye
> ?>
>
> You could have done that or you could do the following.....
>
> <?php
> $obj = new ClassThatDoesntUseOverloading ();
> $obj->setHi('Hello');
> $obj->setBye('Bye Bye!');
>
> echo $obj->hi(), ' ', $obj->bye();
> // Output: Hello Bye Bye!
> ?>
>
> The 2nd way seems more *OOP* than the first - weird to explain. I
> guess what I'm wanting to know is.... why would you use overloading
> (in PHP)? The only reason I can think of is to avoid having to
> create/use accessors. Please help me understand! But please be nice! =D
>
> Thanks,
> ~Philip
>
>
>>> What has changed in php-5.2.x so that these calls don't work any
>>> more? What is the new, required form to use objects in a similar
>>> manner (unfortunately I have no ressources to code these classes
>>> from scratch)? Thanks.
>>> Kind regards
>>> Marten
>

-- 
PHP General Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php


[Index of Archives]     [PHP Home]     [Apache Users]     [PHP on Windows]     [Kernel Newbies]     [PHP Install]     [PHP Classes]     [Pear]     [Postgresql]     [Postgresql PHP]     [PHP on Windows]     [PHP Database Programming]     [PHP SOAP]

  Powered by Linux