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();
}
?>