2012-08-30 89 views
10

可能重复:
Convert Array to Object PHPPHP - 关联数组作为对象

我创建一个简单的PHP应用程序,我想用YAML文件作为数据存储。我将得到的数据作为一个关联数组,通过这种结构,例如:

$user = array('username' => 'martin', 'md5password' => '5d41402abc4b2a76b9719d911017c592') 

不过,我想延长一些功能的关联数组,并使用->运营商,这样我就可以写的东西是这样的:

$user->username = 'martin'; // sets $user['username'] 
$user->setPassword('hello'); // writes md5 of 'hello' to $user['md5password'] 
$user->save();    // saves the data back to the file 

有没有办法做到这一点没有一个类定义的好方法?

基本上,我想在PHP中的JavaScript样式对象:)

+4

应该这些天至少使用sha1。 – wesside

+2

+ wesside 2016更新:BCrypt通过password_hash或PBKDF2与SHA512。 – mjsa

+0

@mjsa方式看看! – wesside

回答

4

字面上只是做一个$class = new stdClass;和迭代,并重新分配。请注意,这只是一个深度,就像类型转换一样。你将不得不写一个递归迭代器来完成这一切。从我记得Kohana 2/3有to_object()你可以使用。

发现:

class Arr extends Kohana_Arr { 

    public static function to_object(array $array, $class = 'stdClass') 
    { 
      $object = new $class; 
      foreach ($array as $key => $value) 
      { 
        if (is_array($value)) 
        { 
        // Convert the array to an object 
          $value = arr::to_object($value, $class); 
        } 
        // Add the value to the object 
        $object->{$key} = $value; 
      } 
      return $object; 
    } 
+2

注意,这也会将顺序(非关联)数组转换为对象。你可能想要结合这个答案:http://stackoverflow.com/a/4254008/1074400 –

27

只投它:

$user = (object)$user; 

当然,也有像创建一个实现类等,更灵活的解决方案ArrayAccess

$user = new User(); // implements ArrayAccess 

echo $user['name']; 
// could be the same as... 
echo $user->name; 
+0

请注意,如果$ user是'null',将其转换为'(object)'将使它非空(它会成为一个空对象)。为了避免这种情况,你可以这样做:'$ user = $ user? (对象)$ user:null' –