[PHP-DEV] Re: Fwd: [RFC] Deprecations for PHP 8.6

[email protected] (Robert Humphries)
Newsgroups php.internals
Message-ID <CADjdLZKCEZiBk=vuAk4JQgEZqC2AuKFQKSpi9KDOtzE+1o+Myw@mail.gmail.com>
> First, the RFC does not say what existing code should migrate to. I often
> use
> SplFileObject::fputcsv() for generating CSV files. The procedural fputcsv()
> is
> not affected by this proposal, but it takes a stream resource, so it is not
> a drop-in replacement for code that is structured around SplFileObject.
> Is there an intended migration path that I have missed? If so, I think it
> would
> help to have it stated in the RFC, as the other sections in this RFC do.
>
> Second, SplFileObject::READ_CSV is not part of the proposal, which I think
> leaves
> the outcome in an inconsistent state. setCsvControl() is the only way to
> configure the delimiter, enclosure and escape character used by READ_CSV;
> the
> constructor does not accept them. If setCsvControl() is removed in PHP 9
> while
> READ_CSV remains, READ_CSV is permanently locked to its defaults and
> tab-separated files can no longer be read through it. The default value of
> $escape is also already deprecated and scheduled to change, so what would
> survive
> is a flag that cannot be configured and whose defaults are still unsettled.
>
> Either READ_CSV should be deprecated alongside the four methods, or
> setCsvControl() should be retained until a replacement API is available.

Just as a note here - the issues raised by Takuya don't appear to have
been responded to from what I can see - the deprecation as it stands
would mean that you still have the ability to read files and parse
them as CSVs via setting the `READ_CSV` flag in `setFlags`. This
outcome does resolve the issue in the linked PR (as following the
depreciation period, when the deprecated functions are removed then
there are no longer any arguments to set); but it also doesn't achieve
Girgias's aim of deprecating and removing the CSV functionality from
SPL; and if I am reading the code correctly then when the default for
`$escape` on `\fgetcsv` is changed, any code using `READ_CSV` will
behave differently on different versions of PHP with no ability to
manually make it consistent.

I think given the vote has passed, the `READ_CSV` flag also needs to
be deprecated. Ideally a similar migration from the deprecated
functions would have been provided (as I don't currently see any
simple way to pass a `SPLFileInfo` object to `fgetcsv` or similar),
but it is too late for that now I suspect.
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.