Attualmente gestisco una libreria che ha molto utilizzo pubblico e avevo una domanda sul controllo delle versioni semantico . Voglio riformattare una parte abbastanza importante della libreria che è implementata in modo errato - ed è sempre stata implementata in modo errato. Ma fare questo significherebbe modifiche all'API pubblica, che è una decisione importante.
Il cambiamento che voglio apportare ruota attorno al modo in cui gli iteratori vengono utilizzati. Attualmente, gli utenti devono fare questo:
while ($element = $iterator->next()) {
// ...
}
Il che non è corretto, almeno nell'interfaccia Iterator nativa di PHP . Voglio sostituire con questo:
while ($iterator->valid()) {
$element = $iterator->current();
// ...
$iterator->next();
}
che è analogo a:
foreach ($iterator as $element) {
// ...
}
Se guardi la guida di Tom al controllo delle versioni semantico, afferma chiaramente che qualsiasi modifica all'API pubblica (vale a dire quelli che lo sono non compatibili con le versioni precedenti), dovrebbe giustificare una versione importante. Quindi la libreria passerebbe dall'1.7.3 alla 2.0.0 che, per me, è un passo troppo avanti. Stiamo solo parlando di una funzionalità che viene risolta.
Ho intenzione di rilasciare finalmente la 2.0.0, ma pensavo che fosse quando hai riscritto completamente la libreria e implementato numerose modifiche all'API pubblica. L'introduzione di questo refactoring garantisce una versione principale? Non riesco davvero a vedere come va - mi sento più a mio agio nel rilasciarlo come 1.8.0 o 1.7.4. Qualcuno ha qualche consiglio?
next()
metodo viene utilizzato per recuperare l'elemento corrente E spostare il puntatore interno in avanti. Che è sbagliato next()
dovrebbe spostare il puntatore e current()
viene utilizzato per recuperare ...
next()
solo ciò che sposta il puntatore, questo non rompe la compatibilità