PHP에서 객체를 배열로 변환하는 방법

PHPz
풀어 주다: 2023-04-24 16:03:57
원래의
462명이 탐색했습니다.

PHP에서는 객체와 배열이 매우 일반적으로 사용되는 데이터 유형입니다. 객체는 속성과 메서드를 캡슐화하는 구조인 반면 배열은 순서가 지정된 키-값 쌍 집합입니다. 일부 시나리오에서는 데이터 작업을 용이하게 하기 위해 객체를 배열 객체로 변환해야 할 수도 있습니다.

PHP에서 강제 유형 변환 연산자는 객체를 배열로 변환하는 데 사용됩니다. 연산자는 "()"(괄호)입니다. 동시에 대괄호 안에 접두사 "배열"을 추가하여 지정할 수 있습니다. 배열 키 이름:

$array = (array) $object;        //强制类型转换,使用默认键名
$array = (array)($object);       //同上
$array = (array) $object_arrray; //强制类型转换并指定键名数组
로그인 후 복사

키 이름을 지정하지 않으면 형변환 연산자는 기본 방법을 사용하여 객체를 배열로 변환합니다. 특히 각 객체 속성은 키-값 쌍으로 배열에 추가됩니다. 은 속성 이름이고 키 값은 속성 값입니다. 객체에 다른 객체가 포함되어 있으면 이러한 객체는 재귀적으로 배열로 변환됩니다. 다음 코드:

class Person
{
    public $name = "David";
    public $age = 32;
    public $profession = "Software Engineer";
}

class Company
{
    public $name = "ABC Company";
    public $employees;
    
    public function __construct() {
        $this->employees = array(
            new Person(),
            new Person(),
            new Person()
        );
    }
}

$company = new Company();
$array = (array)($company);

print_r($array);
로그인 후 복사

출력 결과는 다음과 같습니다.

Array
(
    [name] => ABC Company
    [employees] => Array
        (
            [0] => Person Object
                (
                    [name] => David
                    [age] => 32
                    [profession] => Software Engineer
                )

            [1] => Person Object
                (
                    [name] => David
                    [age] => 32
                    [profession] => Software Engineer
                )

            [2] => Person Object
                (
                    [name] => David
                    [age] => 32
                    [profession] => Software Engineer
                )

        )

)
로그인 후 복사

보시다시피 $company 개체는 강제로 $array 배열로 변환됩니다. 이며 $company 개체의 모든 속성도 포함합니다. $company 被强制类型转换成了数组 $array ,同时包含了 $company 对象的所有属性。

在上面的例子中,我们可以发现强制类型转换只是将对象的属性转换成数组的键值对,而对象的方法不会被转换。如果需要将对象的方法也转换成数组,我们需要通过类中的魔术方法 __sleep()__wakeup() 来实现。其中,__sleep() 方法用于将对象的所有属性保存到数组中,而 __wakeup() 方法则用于将保存的数组转换回对象。

class Person
{
    public $name = "David";
    public $age = 32;
    public $profession = "Software Engineer";
    
    public function run() {
        echo "I am running...";
    }
    
    public function sleep() {
        echo "I am sleeping...";
    }
    
    public function __sleep() {
        return array(
            "name",
            "age",
            "profession"
        );
    }
    
    public function __wakeup() {
    }
}

$person = new Person();
$array = (array)($person);

print_r($array);
로그인 후 복사

输出结果如下:

Array
(
    [name] => David
    [age] => 32
    [profession] => Software Engineer
)
로그인 후 복사

可以发现此时输出结果只包含了 $person 对象的属性,而方法被忽略了。

综上,在PHP中,利用强制类型转换操作符和 __sleep()__wakeup()

위의 예에서 캐스트는 객체의 속성을 배열의 키-값 쌍으로 변환만 하고 객체의 메서드는 변환하지 않는다는 것을 알 수 있습니다. 객체의 메서드를 배열로 변환해야 하는 경우 클래스의 매직 메서드 __sleep()__wakeup()을 통해 이를 구현해야 합니다. 그 중 __sleep() 메서드는 객체의 모든 속성을 배열로 저장하는 데 사용되고, __wakeup() 메서드는 저장된 배열을 다시 배열로 변환하는 데 사용됩니다. 객체. 🎜rrreee🎜출력 결과는 다음과 같습니다. 🎜rrreee🎜출력 결과에는 $person 객체의 속성만 포함되고 메서드는 무시되는 것을 확인할 수 있습니다. 🎜🎜요약하자면, PHP에서는 형변환 연산자와 __sleep()__wakeup() 메서드를 사용하여 객체를 배열 객체로 변환하여 더 많은 기능을 활성화할 수 있습니다. 유연한 데이터 조작. 🎜

위 내용은 PHP에서 객체를 배열로 변환하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿