Tôi hiện đang quản lý một thư viện có rất nhiều sử dụng công cộng và tôi đã có một câu hỏi về phiên bản ngữ nghĩa . Tôi muốn cấu trúc lại một phần khá quan trọng của thư viện được triển khai không chính xác - và luôn luôn được thực hiện không chính xác. Nhưng làm điều này có nghĩa là thay đổi API công khai, đây là một quyết định chính.
Thay đổi tôi muốn thực hiện xoay quanh cách sử dụng các trình vòng lặp. Hiện tại, người dùng phải làm điều này:
while ($element = $iterator->next()) {
// ...
}
Điều này là không chính xác, ít nhất là trong giao diện Iterator gốc của PHP . Tôi muốn thay thế bằng cái này:
while ($iterator->valid()) {
$element = $iterator->current();
// ...
$iterator->next();
}
tương tự như:
foreach ($iterator as $element) {
// ...
}
Nếu bạn xem hướng dẫn của Tom về phiên bản ngữ nghĩa, anh ta nói rõ rằng mọi thay đổi đối với API công khai (tức là những thay đổi không tương thích ngược), sẽ chứng minh một bản phát hành chính. Vì vậy, thư viện sẽ nhảy từ 1.7.3 lên 2.0.0, mà đối với tôi, là một bước đi quá xa. Chúng tôi chỉ nói về một tính năng được sửa chữa.
Tôi có kế hoạch cuối cùng sẽ phát hành 2.0.0, nhưng tôi nghĩ rằng đây là khi bạn viết lại hoàn toàn thư viện và thực hiện nhiều thay đổi API công khai. Việc giới thiệu tái cấu trúc này có đảm bảo phát hành phiên bản chính không? Tôi thực sự không thể thấy nó hoạt động như thế nào - tôi cảm thấy thoải mái hơn khi phát hành nó dưới dạng 1.8.0 hoặc 1.7.4. Có ai có lời khuyên nào không?
next()
phương thức được sử dụng để truy xuất phần tử hiện tại VÀ di chuyển con trỏ bên trong về phía trước. Sai chỗ nào. next()
nên di chuyển con trỏ và current()
được sử dụng để truy xuất ...
next()
chỉ di chuyển con trỏ, điều này thực sự không phá vỡ tính tương thích