2012-08-30 106 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' –