On Mon, Feb 11, 2019 at 11:35 AM Levi Morrison <le...@php.net> wrote:
> >> I recognize that there is one downside, which is that lazy evaluation > >> is lost, but generally don't see it to be an issue in these specific > >> cases. > >> > > Lazy evaluation doesn't have to be lost if the all_of and any_of > functions are written correctly. all_of will return false as soon as one of > them fails, and any_of will return true as soon as one of them passes. > > > > Unless you are talking about cases like this: > > if(is_numeric(reallyFastFunc($foo)) || is_numeric(reallySlowFunc($bar))) > > In that case, you might be able to short circuit the evaluation of > reallySlowFunc($bar), which wouldn't be the case with > > if(any_of('is_numeric',reallyFastFunc($foo),reallySlowFunc($bar))){} > > Yes, this is what I was referring to. As previously stated, I don't > think it's likely to be an issue. If it is, then as you stated the > normal boolean logic can be used in such places. > > ----- > > In other words, nothing needs to be done in PHP itself. Just write or > use someone else's `all_of`, `any_of`, `none_of`, etc, functions. > > I'm sure there would be performance enhancement by having it handled with C vs PHP. I would guess you'd probably need to implement separate functions for each is_* variant though: any_numeric, all_numeric, none_numeric, any_boolean, all_boolean, none_boolean, etc. You could probably still have the any_of, all_of, none_of versions as a shortcut though. I'm speaking from a point of some ignorance though in terms of what is and isn't faster when done in C. Whether it needs to be in core/bundled extension is another debate though. Seems like it might be a good thing for someone wanting to learn to write extensions to get their feet wet with, though. I did something similar when I wanted to try out writing an extension. I implemented a left($str,$len) and right($str,$len) method... which are basically just shortcuts for substr*.. but gave me some experience with all of the boiler plate needed, as well as utilizing existing functions. *left($str,$len) => substr($str,0,$len) right($str,$len) => substr($str,-$len); > -- > PHP Internals - PHP Runtime Development Mailing List > To unsubscribe, visit: http://www.php.net/unsub.php > > -- -- Chase chasepee...@gmail.com