首頁  >  文章  >  後端開發  >  php  obj怎麼轉換為數組

php  obj怎麼轉換為數組

PHPz
PHPz原創
2023-04-27 09:07:31726瀏覽

在 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中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn