2009/2/3 Daevid Vincent <[email protected]>
> 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;
> }
Hey,
well, $this->$pkey is wrong syntax. Try $this->pkey = $value
-eddy
>
> 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();
> }
> ?>
>