RE: [PHP-DEV] [RFC][DISCUSSION] Object-oriented curl API v2

From: Date: Fri, 27 Jun 2025 16:37:23 +0000
Subject: RE: [PHP-DEV] [RFC][DISCUSSION] Object-oriented curl API v2
References: 1  Groups: php.internals 
Request: Send a blank email to [email protected] to get a copy of this message
-----Original Message-----
From: Eric Norris <[email protected]> 
Sent: Thursday, June 26, 2025 7:25 PM
To: PHP internals <[email protected]>
Subject: [PHP-DEV] [RFC][DISCUSSION] Object-oriented curl API v2

> I'd like to formally propose a restart of the original object-oriented curl API RFC 

Cool. Calling functions with object as an argument to modify it's state feels very C-ish and
wildly different from how contemporary PHP is usually written. So even a 1:1 translation into a more
familiar API is welcome.

It still feels a bit unfamiliar to me that part of the response (the body) is returned from
execute() while the other stuff (like the status code) is stored in the state of the
Handle instance. Is this statefulness suggested by libcurl and reflects it's object? Or is it a
choice on the PHP side? I'm just wondering, this is probably not something that should be
changed on the Handle class but maybe on some new layer.

The enums that you propose are backed. It seems appropriate in the sense of continuity, but is there
a need for that? I'd argue that option names like AbstractUnixSocket or AutoReferer are values
per se and there is no usable meaning for those integer values behind them. Maybe the translation to
numeric constants (assuming it's necessary) can be done internally (in the Handle) via a
match or switch statement and let's have pure enums?

I see that the option setters return  \Curl\Handle, but it is a bit unclear whether it
will actually return static, self or $this. I assume the
latter but it would be nice to document that we're mutating the same object.

> Should we organize the curl option enumerations by value type? Or have a single enumeration for
> all curl_setopt options and another for all curl_multi_setopt options?

In fact I would expect a single ->setOption() instead of the type specific ones.
Having to specify the argument type in the setter name and/or the enum name doesn't sound very
enjoyable to me.

BR,
Juris


Thread (21 messages)

« previous php.internals (#127775) next »