promoted property in serialized object behaves unexpected
Đang mở
Chưa có ai nhận issue này.
Category: Serialization
Extension: standard
Feature
- Ngôn ngữ chính
- C
- Star
- 40.4k
- Fork
- 8.1k
- Merge trung bình
- 2 ngày 13 giờ
- Pull request đã merge (30 ngày)
- 96
Mô tả
Description
The following code:
<?php
class Foo {
public string $bar = 'a';
public ?string $baz = null;
public function __construct(public readonly ?string $x = null) {
}
}
$fooSerialized = 'O:3:"Foo":1:{s:3:"bar";s:1:"a";}a';
$fooUnserialized = unserialize($fooSerialized);
var_dump($fooUnserialized->bar); // works because exists in serialized string
var_dump($fooUnserialized->baz); // works because regular typed property, even if not existing in serialized string
var_dump($fooUnserialized->x); // Doesn't work
Resulted in this output:
string(1) "a"
NULL
Fatal error: Uncaught Error: Typed property Foo::$x must not be accessed before initialization in /in/4d6XG:18
Stack trace:
#0 {main}
thrown in /in/4d6XG on line 18
Process exited with code 255.
But I expected this output instead:
string(1) "a"
NULL
NULL
See also https://3v4l.org/4d6XG#v8.2.6 (all versions)
PHP Version
PHP 8.2.6
Operating System
No response
Hướng dẫn đóng góp
Bắt đầu từ đâu
- Đọc hết issue, rồi đọc hướng dẫn đóng góp của dự án.
- Bình luận trên issue rằng bạn sẽ nhận — tránh hai người làm cùng một việc.
- Fork repository và làm thay đổi trên một nhánh.
- Mở pull request có tham chiếu số hiệu của issue.
Hướng nghiên cứu
Bắt đầu bằng cách chạy reproducer được cung cấp cho PHP 8.2.6 và so sánh cách xử lý promoted readonly properties với các thuộc tính có kiểu thông thường trong quá trình unserialize(). Theo dõi hành vi serialization liên quan và bổ sung hoặc cập nhật coverage cho trường hợp thuộc tính bị thiếu; được xem là hoàn thành khi lần truy cập được tái hiện cho kết quả NULL mà không có lỗi khởi tạo.
Do mô hình lập chỉ mục viết ra từ nội dung của issue.
Đánh giá
- Công nghệ
- php
- Lĩnh vực
- backend
- Loại issue
- Lỗi
- Độ khó
- 4/5
- Thời gian dự kiến
- 3-5 ngày
- Mức độ hoạt động
- Đình trệ
- Độ rõ ràng
- Khá rõ ràng
- Mức phù hợp với người mới
- 35/100