Re: accessing variables within objects

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

 



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