How can I do the opposite of property_exists(), maybe a creat_property() in PHP5?

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

 



Is there a way to create a new property via PHP 5.2.4?

I get a hash back from an authentication server. I'm not guaranteed that
someone in another department won't add new key/values to the returned
hash/array. I'm trying to work around that part gracefully so that the
code doesn't blow up on a customer in such an event. The main try/catch
will suppress errors already, but I thought it would be nice to be able
to handle this stuff automatically rather than constantly updating a
User.class.php file all the time.

    "creating new property this->oraclecustomerid with 1122"

but when I try to set the value with the $this->$pkey = $value; 

It triggers __call() which then triggers __set() which throws my
BadProperty exception.

How come $this->$pkey = $value isn't creating/setting a property? 
Or how do I do something like create_property($this, $pkey);
so that I can then set it via $this->oraclecustomerid = 1122 or
$this->set_oraclecustomerid(1122) ???

<?php
function load_from_user_data($user_data)
{
	//now loop through the rest of the user_data array and assign via a
set_foo() method
	foreach ($user_data as $key => $value)
	{
			//try
			{
				$pkey = strtolower($key);
				//[dv] this is sort of a hack to "automatically" create a new
property/variable
				//	   for 'new' hashes key/values we may not know about.
				//	   It's really designed to supress errors and they really should
be added to this User.class.php properly.
				if ( !property_exists($this, $pkey) )
				{
					echo "creating new property this->$pkey with $value<br>\n";
					$this->$pkey = $value; //THIS BLOWS UP ON THE __set()
					echo "this->$pkey = ".$this->$pkey;
				}
				else
				{
					$class_variable = 'set_'.$pkey;
					$this->$class_variable($value);
					unset($user_data[$key]);
				}
			}
			//catch (Exception $e)
			{
				//echo $e->getMessage()."\n";
			}
	}

		//should new fields be returned in the $user_data that are not
accounted for above...
		if ($_SESSION['DEVELOPMENT'] && count($user_data))
		{
			echo "<!-- Unaccounted for user_data hashes. Please add these into
User.class.php:\n";
			var_dump($user_data);
			echo "-->";
		}

        //THESE TWO LINES FATAL ERROR ON THE __get():
	echo "this->oraclecustomerid = ".$this->oraclecustomerid;
	echo "this->get_oraclecustomerid() = ".$this->get_oraclecustomerid();
}
?>

[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