> On Mar 13, 2020, at 4:25 PM, Stephen Reay <php-li...@koalephant.com> wrote:
> 
>> 
>> On 14 Mar 2020, at 02:59, Mike Schinkel <m...@newclarity.net> wrote:
>> 
>>> On Mar 13, 2020, at 3:23 PM, Stephen Reay <php-li...@koalephant.com> wrote:
>>> 
>>> Hi Mike,
>>> 
>>> (I realise some of these points are possibly more addressed to Paul than 
>>> yourself, this is just where my brain went when I dug into what you were 
>>> mentioning)
>> 
>> (after responding to your reply I think I was commenting on the RFC and I 
>> think it is possible that you may have missed as few aspects of the RFC such 
>> as a 'server' property on the ServerRequest variable. If that is the case 
>> then we might be saying the same things. See 
>> https://github.com/pmjones/ext-request#superglobal-related) 
>> 
>> Yes, I should have made it more explicit. As author of the RFC I was 
>> speaking to Paul in suggesting that if we are going to name the proposed 
>> objects to be more specific to requests and response that we move the 
>> server-specific aspects out and into their own object.  
>> 
>> Otherwise I feel that dropping the "Server" from the name the object 
>> clarifies one aspect and obfuscates another, albeit clarifying the larger 
>> part.  Better to make it all clear with another object named for what it 
>> represents; server information.
>> 
>>> I apologise if I’ve missed part of the discussion but what do you mean by 
>>> “make sure it matches *exactly*.
>> 
>> I was referencing your comments where my takeaway from reading what you 
>> wrote is that you were asking that the naming match exactly what you were 
>> viewing the objects to be doing, and that is to work with HTTP:
>> 
>>     "This extension and the classes it provides are inherently about HTTP 
>> requests made to a php ‘server’, and the response it sends back - and yet 
>> it’s called Server{Request,Response,Buffer} etc…. The “server” part is 
>> superfluous in the context of a php web application, because it’s all 
>> “server” side, and while uncommon it’s not impossible to write *other* types 
>> of network server using PHP."
>> 
>>     "TLDR: if you aren’t concerned about the concept of php-initiated 
>> outgoing HTTP requests, I think `HTTP{Request,Response,Buffer}` is quite 
>> clear in terms of naming. If you wanted to be more explicit about their 
>> purpose (and/or prevent possible confusion with either user land or 
>> potential future extensions handling outgoing requests), 
>> `IncomingHTTPRequest` and `OutgoingHTTPResponse` are very explicit, if a bit 
>> verbose."
>> 
>> My point is simply that the server-specific aspects have nothing to do with 
>> HTTP requests or HTTP responses, and if Paul was to rename his classes to 
>> more closely align with HTTP requests and HTTP responses then he should 
>> extract the server aspects out into their own class.
> 
> I think we’re probably talking about different ’server specific’ parts of the 
> $_SERVER super global array.. I’m talking about the stuff that’s documented 
> (on https://www.php.net/manual/en/reserved.variables.server.php) and much of 
> which comes from/seems inspired by the CGI spec, which is inherently related 
> to a http request. I.e. the SERVER_* keys, the REMOTE_* keys, the doc root, 
> etc.
> 
>> 
>> 
>>> Do you mean how `->server` is listed as being a copy of the `$_SERVER` 
>>> super global? If so, can someone point me to the specific logic behind 
>>> that, given how many parts of it are already exposed via ‘dedicated’ 
>>> properties of the proposed class?  From what I can see (and I may have 
>>> missed some) the parts of $_SERVER not exposed in some way “directly” on 
>>> ServerRequest (nee CurrentRequest) are the actual “server” parts: the 
>>> `SERVER_*` keys, doc root, PHP_SELF; and the ‘client’ parts: REMOTE_*; plus 
>>> few random stragglers like PATH_INFO, and for some reason 
>>> REQUEST_TIME[_FLOAT]?
>> 
>> I don't think direct exposure is required; indirect exposure via an array 
>> still means that aspects not related to HTTP requests and HTTP responses are 
>> currently contained in the ServerRequest->server which to me is okay if it 
>> is called "ServerRequest" but not okay if it is called "HttpRequest," 
>> "WebRequest," "IncomingRequest," or "CurrentRequest."
>> 
>>> Can those two things not be organised as a hash of those values, under 
>>> `server` and `client` (or `remote` if you want to keep the terminology - 
>>> yes I know it will be the originating TCP connection host not necessarily 
>>> the browser host)? As I said, I’ve missed some of the discussion but I fail 
>>> to see the benefit of a class to make all the details of a web request and 
>>> it’s response available…. And then just stick the existing superglobals in 
>>> it untouched.
>> 
>> Your response is confusing me.  
>> 
>> You may actually be saying the same thing I am saying.  I am referring to 
>> the current state of the RFC where this would be possible:
>> 
>> $request = new ServerRequest();
>> echo $request->server['HOME'];  // Output the server's home directory.
>> 
> 
> This is a very weird thing to me. I realise it’s exposed currently via 
> $_SERVER but what you’re accessing there is an environment variable - it’s 
> also available via $_ENV, or getenv(). This is another reason why I find it 
> weird to put the current  ‘goody bag’ of $_SERVER into an object intended to 
> in some way represent a web request and response.
> 
> That information (environment vars) is very useful, undoubtedly - but 
> accessing it from an object essentially maps to the current, incoming 
> http/web request (regardless of what it’s called), is bizarre IMO.
> 
>> I am saying that it might be better to have those properties in a different 
>> object:
>> 
>> $info = new ServerInfo();
>> echo $info->home;  // Output the server's home directory.
>> print_r( $info->properties );   // Output everything found in $_SERVER object
>> 
> 
> Without clarifying which things specifically (and that’ll be hard as your 
> other reference is to an env var, few of which are standardised) I’m not sure 
> what I think about this. But I agree (maybe more strongly, I think naming is 
> irrelevant) that things like HOME (i.e. environment variables) have little 
> place in the object Paul is proposing, if it’s meant to be related to “the 
> active request”. 
> 
>>> Things like the query params and body params make sense to be accessible 
>>> essentially (albeit with better names) as-is, because they’re a hash of 
>>> unknown shape by their very nature - but the keys in _SERVER (barring http 
>>> headers, which are already special cased) are known, and have pretty clear 
>>> definition of their meaning.
>> 
>> Agreed.
>> 
>>> Is the proposal really suggesting that a developer would still need to do 
>>> `if(!empty($request->server[‘HTTPS’]) && $request->server[‘HTTPS’] !== 
>>> ‘off’) {…}` rather than just providing a `secureTransport` property (or 
>>> `https` if you prefer)? 
>> 
>> Not sure. Paul needs to answer that.
>> 
>>> One last point, regarding the ‘break out a server specific class’ part. I 
>>> don’t think it’s “wrong” to access these properties from something that is 
>>> ostensibly related to the “current request”, but it feels quite ‘wonky’ to 
>>> me, the way it’s proposed with the full ->server array just copied as-is, 
>>> AND exposed via dedicated properties
>>> Cheers
>> 
>> Yes, I was saying that it is wrong *if* we are going to fine-tune the name 
>> to a as closely as possible mirror what is contained within it. As I said 
>> above having `server' in ServerRequest class does not both me but it would 
>> bother me if  `server' were in a HttpRequest class.
>> 
>> Does this clarify?
> 
> Yes, mostly, with the caveat of the part about which entries from $_SERVER 
> (and I think you’re referring to env vars, not the cgi specific vars?) 

Larry just clarified it in his reply to this thread.  Basically calling it 
"CgiRequest/CGIRequest (ignoring capitalization)" would probably be the right 
fit from a naming perspective, at least with respect to Paul's RFC.

-Mike
--
PHP Internals - PHP Runtime Development Mailing List
To unsubscribe, visit: http://www.php.net/unsub.php

Reply via email to