Re: accessing variables within objects

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

 



On Jul 31, 2008, at 11:48 AM, Micah Gersten wrote:

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

Yeah, I got the link the first time and read the page. But I was looking for a little bit more explanation...

Thanks anyway,

~Philip


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


"Personally, most of my web applications do not have to factor 13.7 billion years of space drift in to the calculations, so PHP's rand function has been great for me..." ~S. Johnson


--
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