|
Server IP : 10.2.73.233 / Your IP : 216.73.216.223 Web Server : Apache/2.4.59 (Debian) System : Linux polon 4.19.0-27-amd64 #1 SMP Debian 4.19.316-1 (2024-06-25) x86_64 User : www-data ( 33) PHP Version : 5.6.40-64+0~20230107.71+debian10~1.gbp673146 Disable Function : pcntl_alarm,pcntl_fork,pcntl_waitpid,pcntl_wait,pcntl_wifexited,pcntl_wifstopped,pcntl_wifsignaled,pcntl_wexitstatus,pcntl_wtermsig,pcntl_wstopsig,pcntl_signal,pcntl_signal_dispatch,pcntl_get_last_error,pcntl_strerror,pcntl_sigprocmask,pcntl_sigwaitinfo,pcntl_sigtimedwait,pcntl_exec,pcntl_getpriority,pcntl_setpriority, MySQL : ON | cURL : ON | WGET : ON | Perl : ON | Python : ON Directory (0755) : /home/ilpnowa/../ifk/web.back/framework/Data/SqlMap/DataMapper/ |
| [ Home ] | [ C0mmand ] | [ Upload File ] |
|---|
<?php
/**
* TPropertyAccess class file.
*
* @author Wei Zhuo <weizhuo[at]gmail[dot]com>
* @link http://www.pradosoft.com/
* @copyright Copyright © 2005-2014 PradoSoft
* @license http://www.pradosoft.com/license/
* @package System.Data.SqlMap
*/
/**
* TPropertyAccess class provides dot notation stype property access and setting.
*
* Access object's properties (and subproperties) using dot path notation.
* The following are equivalent.
* <code>
* echo $obj->property1;
* echo $obj->getProperty1();
* echo $obj['property1']; //$obj may be an array or object
* echo TPropertyAccess($obj, 'property1');
* </code>
*
* Setting a property value.
* <code>
* $obj1->propert1 = 'hello';
* $obj->setProperty('hello');
* $obj['property1'] = 'hello'; //$obj may be an array or object
* TPropertyAccess($obj, 'property1', 'hello');
* </code>
*
* Subproperties are supported using the dot notation. E.g.
* <code>
* echo $obj->property1->property2->property3
* echo TPropertyAccess::get($obj, 'property1.property2.property3');
* </code>
*
* @author Wei Zhuo <weizho[at]gmail[dot]com>
* @package System.Data.SqlMap
* @since 3.1
*/
class TPropertyAccess
{
/**
* Gets the property value.
* @param mixed object or path.
* @param string property path.
* @return mixed property value.
* @throws TInvalidDataValueException if property path is invalid.
*/
public static function get($object,$path)
{
if(!is_array($object) && !is_object($object))
return $object;
$properties = explode('.', $path);
foreach($properties as $prop)
{
if(is_array($object) || $object instanceof ArrayAccess)
{
if(array_key_exists($prop, $object))
$object = $object[$prop];
else
throw new TInvalidPropertyException('sqlmap_invalid_property',$path);
}
else if(is_object($object))
{
$getter = 'get'.$prop;
if(method_exists($object, $getter) && is_callable(array($object, $getter)))
$object = $object->{$getter}();
else if(in_array($prop, array_keys(get_object_vars($object))))
$object = $object->{$prop};
elseif(method_exists($object, '__get') && is_callable(array($object, '__get')))
$object = $object->{$prop};
else
throw new TInvalidPropertyException('sqlmap_invalid_property',$path);
}
else
throw new TInvalidPropertyException('sqlmap_invalid_property',$path);
}
return $object;
}
/**
* @param mixed object or array
* @param string property path.
* @return boolean true if property path is valid
*/
public static function has($object, $path)
{
if(!is_array($object) && !is_object($object))
return false;
$properties = explode('.', $path);
foreach($properties as $prop)
{
if(is_array($object) || $object instanceof ArrayAccess)
{
if(array_key_exists($prop, $object))
$object = $object[$prop];
else
return false;
}
else if(is_object($object))
{
$getter = 'get'.$prop;
if(method_exists($object, $getter) && is_callable(array($object, $getter)))
$object = $object->{$getter}();
else if(in_array($prop, array_keys(get_object_vars($object))))
$object = $object->{$prop};
elseif(method_exists($object, '__get') && is_callable(array($object, '__get')))
$object = $object->{$prop};
else
return false;
}
else
return false;
}
return true;
}
/**
* Sets the property value.
* @param mixed object or array
* @param string property path.
* @param mixed new property value.
* @throws TInvalidDataValueException if property path is invalid.
*/
public static function set(&$originalObject, $path, $value)
{
$properties = explode('.', $path);
$prop = array_pop($properties);
if(count($properties) > 0)
$object = self::get($originalObject, implode('.',$properties));
else
$object = &$originalObject;
if(is_array($object) || $object instanceof ArrayAccess)
{
$object[$prop] = $value;
}
else if(is_object($object))
{
$setter = 'set'.$prop;
if (method_exists($object, $setter) && is_callable(array($object, $setter)))
$object->{$setter}($value);
else
$object->{$prop} = $value;
}
else
throw new TInvalidPropertyException('sqlmap_invalid_property_type',$path);
}
}