在 PHP 開發中,有時需要將物件(Object)轉換為陣列(Array)的操作,以便於進行資料傳遞和處理等操作。本文介紹了 PHP 中將物件轉換為陣列的方法。
一、使用get_object_vars 函數進行轉換
PHP 內建函數get_object_vars 可以取得物件中所有可見屬性的陣列表示形式(鍵是屬性名,值是屬性值),我們可以將其傳回的陣列直接作為需要的陣列。
範例程式碼:
class Car { public $brand = 'Audi'; public $model = 'A6'; private $price = 80000; public function __construct() { # code... } } $car = new Car(); $arr = get_object_vars($car); print_r($arr);
執行結果:
Array ( [brand] => Audi [model] => A6 )
可見,由於 $price 屬性是 private 的,因此不會出現在傳回的陣列中。
二、使用 json_decode 函數轉換
我們可以使用 PHP 內建函數 json_decode 將物件轉換為 JSON 格式的字串,再轉換為陣列。
範例程式碼:
class Car { public $brand = 'Audi'; public $model = 'A6'; private $price = 80000; public function __construct() { # code... } } $car = new Car(); $jsonStr = json_encode($car); $arr = json_decode($jsonStr, true); print_r($arr);
執行結果:
Array ( [brand] => Audi [model] => A6 )
同樣地,由於 $price 屬性是 private 的,因此不會出現在轉換後的陣列中。
三、使用類型強制轉換進行轉換
在 PHP 中,除了使用 get_object_vars 函數和 json_decode 函數進行物件轉換成陣列之外,還可以使用強制型別轉換進行轉換。我們可以將物件強制轉換為陣列類型,傳回的陣列中的鍵是屬性名,值是屬性值。
範例程式碼:
class Car { public $brand = 'Audi'; public $model = 'A6'; private $price = 80000; public function __construct() { # code... } } $car = new Car(); $arr = (array) $car; print_r($arr);
執行結果:
Array ( [brand] => Audi [model] => A6 [*price] => 80000 )
可以看到,與get_object_vars 函數和json_decode 函數進行轉換的結果不同,強制型別轉換後的陣列中,除了公有屬性之外,還會包含私有屬性,並以* 開頭的標記來表示私有屬性。
要注意的是,如果物件中有__toString 方法,則強制類型轉換為陣列時會將__toString 方法的傳回值作為陣列的第一個元素(鍵為0,值為傳回值)。
四、使用反射進行轉化
PHP 的反射機制可以對類別、物件和方法進行分析和調用,反射提供獲取物件的屬性和方法的功能,透過反射類,我們可以取得物件的屬性和存取等級(public、private 或protected)。
範例程式碼:
class Car { public $brand = 'Audi'; public $model = 'A6'; private $price = 80000; public function __construct() { # code... } } $car = new Car(); $reflection = new ReflectionObject($car); $arr = []; foreach ($reflection->getProperties() as $property) { $property->setAccessible(true); $arr[$property->getName()] = $property->getValue($car); } print_r($arr);
執行結果:
Array ( [brand] => Audi [model] => A6 [price] => 80000 )
可以看到,透過反射取得物件屬性時,不受存取等級(public、private 或protected)的限制,同時,取得到的屬性名稱和屬性值均包含在陣列中。
綜上所述,本文介紹了 PHP 將物件轉換為陣列的多種方法。在實際開發中,選擇哪種方法應根據需求和程式碼的實際情況而定。
以上是php obj怎麼轉換為數組的詳細內容。更多資訊請關注PHP中文網其他相關文章!