Newsgroups: php.internals Path: news.php.net Xref: news.php.net php.internals:129597 X-Original-To: internals@lists.php.net Delivered-To: internals@lists.php.net Received: from php-smtp4.php.net (php-smtp4.php.net [45.112.84.5]) by lists.php.net (Postfix) with ESMTPS id B0F941A00BC for ; Fri, 12 Dec 2025 17:47:35 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=php.net; s=mail; t=1765561660; bh=hCILD39qpy4/6tk1XcH1vnAXsrUC1R5iUGS1HZsPkxA=; h=References:In-Reply-To:From:Date:Subject:To:Cc:From; b=itr3MuWmT0Peq4OhgMnsXhdN2VjQa6Rhnd6/TMJILHCpkENu0r0PUuENXDQ271KPh L+zIFvWItjKKTgnVmAPOX66AmE+AntDpHWSawy2JWirMTrKTpV8AtDO+RMDkRg4JZV jkuOV7zifhH/gDw9PQydZG5Wz2MpaOVX5PV31ie/RGAJK64DBsvm+mG0fPYSj/BZj2 F6BTUyPxPRdZSpAU3FtQNlJkMVILLTRxzc+vYBcfHvtv0XtDx1L0/XwQ50zTV9sxC5 dFEUYDvGw2ekyFuIPw61+OiMwOpBWSN58asnVrP7X3CZggRoJkDfxPl/pcimWPF39l nUlOGw6Okl+uw== Received: from php-smtp4.php.net (localhost [127.0.0.1]) by php-smtp4.php.net (Postfix) with ESMTP id A936B1805D3 for ; Fri, 12 Dec 2025 17:47:39 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 4.0.1 (2024-03-25) on php-smtp4.php.net X-Spam-Level: X-Spam-Status: No, score=0.9 required=5.0 tests=BAYES_50,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,DMARC_PASS, FREEMAIL_ENVFROM_END_DIGIT,FREEMAIL_FROM,HTML_MESSAGE, RCVD_IN_DNSWL_NONE,RCVD_IN_MSPIKE_H3,RCVD_IN_MSPIKE_WL,SPF_HELO_NONE, SPF_PASS autolearn=no autolearn_force=no version=4.0.1 X-Spam-Virus: No X-Envelope-From: Received: from mail-pj1-f50.google.com (mail-pj1-f50.google.com [209.85.216.50]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256) (No client certificate requested) by php-smtp4.php.net (Postfix) with ESMTPS for ; Fri, 12 Dec 2025 17:47:29 +0000 (UTC) Received: by mail-pj1-f50.google.com with SMTP id 98e67ed59e1d1-3438231df5fso1808115a91.2 for ; Fri, 12 Dec 2025 09:47:24 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1765561643; x=1766166443; darn=lists.php.net; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:from:to:cc:subject:date:message-id:reply-to; bh=ddbVCP2qdFNsELhgxGeMwhhDEeOmUEfa/UaFx7ToKMg=; b=AwrQ+DBMI56v5TLDD6bjxsF4AdoUJvYa2X+/IzJDcXlxyHvs4zi0H1uhJS3VItpVgm o+WTnGjr3QWXPdSLIxADosYCvHYItir/3YmP8768D8MsNyMThrECjkSXPDTaJ6LkpsxZ eI6z4GwJ7cRL6v5d1sQdYt3v2L/PQGgK6n9zXNs/z4bqROYUGh799N0NEAgz6Lgm77vk D+YNWbHOatxmeA2I6IEy0GjyLcN/wpoOnOBwEPXlt4LHRS5etc8659WjpnWZbxV7ScHA f+tP5twmLjTi/pe7vLayGBHIyvzkeSpmDIYmFUhUFpnlYWD0WITHGMzKLFcJC9mnCZGt cXvw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1765561643; x=1766166443; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:x-gm-gg:x-gm-message-state:from:to:cc:subject:date :message-id:reply-to; bh=ddbVCP2qdFNsELhgxGeMwhhDEeOmUEfa/UaFx7ToKMg=; b=Gd8H3oJMF+QnbrJ2LPY8cXo96q6zRvSMkmSp9ir/2ux1rFEI0dA1N9YQe0Vw54x6uY otfKr/pGRjKRfSIbuTbYAmPhI7ghKjuQy0sfzCrbmeQwllmd4UlwSWoVO/aL/Vxo4YvX QNBkF+wLjZeSl6wxv+1VI+YeI5rNbLytVVrfkPPVuFHGxDcYy7hQxzjNuxyDUPuzLrKJ 1THTw5ljINWKPt+n/j+7ZJpvxJ99ieeq19OezAcG76a9hdh+RvMhB0hjrXUFhNRaE5ju ZLlZHdQFOhIWghVyvWisYk6gRUpE7pAgmZQf0vd5vkRIcZJpp1WFTwkoXyMcUTkmtGQc mUsQ== X-Gm-Message-State: AOJu0Yx8M/DF6Wz1JcEw+BC19oq+nnkzEPxsTEsWCuKWr9h2ZSoRpQfb JZu95K5QFTEC1eopnfiqzFjk3u3ynP8T5eqvR2V4AbdCNE0ZBw8WV5Vql8iU62qXkgVMRMZJBFI 5iQzHDoUfiCmRgakoSuF+j4dpfIJKTu4= X-Gm-Gg: AY/fxX7/b5a95uwL2wVVNY+kxCKGRTPdpaoTcYBNqXApx3sDl35SeGvdjGl5qxjd0+7 ZxBXevIJiyiNnw9qZ+OhPlbzhmstOt8FjTr4gQper68JyYgT5hdaVxKhHCwtvUMzaWyuIO/z0uO PGObI7cQ3n/C9xr87aepyqhxA5NGMlrGCpfh5K+l41uGaDtj1pHpl5LtHJ0AOvTQa78k364aj3W fIVF7ajxdxWKfTOwRl32YR5KxFlWl6z2BDuiZp7IFFUGBRSPRNQJ7Y1mYUEpuwFPgpTeAlLNMqA BzzgKPJqdEywmZVsPbKwGw/TqrI= X-Google-Smtp-Source: AGHT+IE7m7Mgx9Dhm7vkp7xLY56b20YMprcgFdLF6D3LQ0xpmKgOBK0Xz/mQCoUVHAkXZxQYJrS4o7zseS3JusBMYXs= X-Received: by 2002:a17:90b:2c87:b0:347:5ddd:b2d1 with SMTP id 98e67ed59e1d1-34abd7a4bfemr2462269a91.27.1765561643248; Fri, 12 Dec 2025 09:47:23 -0800 (PST) Precedence: list list-help: list-unsubscribe: list-post: List-Id: x-ms-reactions: disallow MIME-Version: 1.0 References: <462A7CF0-71A6-4BFA-B5FE-CDF3E0CCA5E6@gmail.com> In-Reply-To: <462A7CF0-71A6-4BFA-B5FE-CDF3E0CCA5E6@gmail.com> Date: Fri, 12 Dec 2025 18:46:46 +0100 X-Gm-Features: AQt7F2owPqAL5JIMZT78zwSuqVILIj76vvKCvQhcsdLPfYJvb2PkpPJDJDSphg8 Message-ID: Subject: Re: [PHP-DEV] coerce() function To: Dmitry Derepko Cc: PHP internals Content-Type: multipart/alternative; boundary="000000000000932fd10645c4da14" From: divinity76@gmail.com (Hans Henrik Bergan) --000000000000932fd10645c4da14 Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable On Wed, 10 Dec 2025 at 08:45, Dmitry Derepko wrote: > Hello, > > From time to time I need to write a few lines of code that usually look > ridiculous: > > $var =3D $input =3D=3D=3D =E2=80=98yes=E2=80=99 ? =E2=80=98yes=E2=80=99 := =E2=80=99no=E2=80=99 > $var =3D $input !=3D=3D =E2=80=98yes=E2=80=99 ? =E2=80=99no=E2=80=99 : $y= es > $var =3D $input > 10 ? 10 : $input > $var =3D max(-10, min($input, 10) > > and many other variations. > In Kotlin, I can use `coerceIn()` extension function with strings / > numbers / comparables, which allows me to write such lines more readable. > > I suggest to add such function to PHP. The examples above may look like > the following > > $var =3D coerce($input, variants: [=E2=80=9Cyes=E2=80=9D, =E2=80=9Cno=E2= =80=9D], default: =E2=80=9Cyes=E2=80=9D); > $var =3D coerce($input, min: 0, max: 10, default: 5); > $var =3D coerce($input, min: 0, max: 10, default: 5); > > btw many of these are already covered by filter_var, $var =3D $input =3D=3D=3D =E2=80=98yes=E2=80=99 ? =E2=80=98yes=E2=80=99 : = =E2=80=99no=E2=80=99 $var =3D $input !=3D=3D =E2=80=98yes=E2=80=99 ? =E2=80=99no=E2=80=99 : $yes $var =3D coerce($input, variants: [=E2=80=9Cyes=E2=80=9D, =E2=80=9Cno=E2=80= =9D], default: =E2=80=9Cyes=E2=80=9D); $var =3D coerce($input, min: 0, max: 10, default: 5); is very close to $var =3D filter_var($input,FILTER_VALIDATE_BOOL); $var =3D !filter_var($input,FILTER_VALIDATE_BOOL); $var =3D filter_var($input,FILTER_VALIDATE_BOOL, ['options'=3D>['default'=3D>true]]); $var =3D filter_var($input, FILTER_VALIDATE_INT, ['options'=3D>['min_range'= =3D>0, 'max_range'=3D>10, 'default'=3D>5]]); but if your syntax idea cover stuff like $var =3D coerce($input, variants: [=E2=80=9Cyes=E2=80=9D, =E2=80=9Cno=E2=80= =9D, "maybe"], default: =E2=80=9Cyes=E2=80=9D); then filter_var does not cover it (well, you could get creative with FILTER_VALIDATE_CALLBACK, but that would be crazy, array_search would be better lel) but even so, your proposed syntax is certainly prettier than filter_var. --000000000000932fd10645c4da14 Content-Type: text/html; charset="UTF-8" Content-Transfer-Encoding: quoted-printable
On Wed, 10 Dec 2025 at 08:45, Dmitry Dere= pko <xepozzd@gmail.com> wrot= e:
Hello,=C2=A0

From = time to time I need to write a few lines of code that usually look ridiculo= us:

$var =3D $input =3D=3D=3D =E2=80=98yes=E2=80= =99 ? =E2=80=98yes=E2=80=99 : =E2=80=99no=E2=80=99
$var =3D $inpu= t !=3D=3D =E2=80=98yes=E2=80=99 ? =E2=80=99no=E2=80=99 : $yes
$va= r =3D $input > 10 ? 10 : $input
$var =3D max(-10, min($input, = 10)

and many other variations.
In Kotlin= , I can use `coerceIn()` extension function with strings / numbers / compar= ables, which allows me to write such lines more readable.=C2=A0
<= br>
I suggest to add such function to PHP. The examples above may= look like the following

$var =3D coerce($inp= ut, variants: [=E2=80=9Cyes=E2=80=9D, =E2=80=9Cno=E2=80=9D], default: =E2= =80=9Cyes=E2=80=9D);
$var =3D coerce($input, min: 0, max: 10, def= ault: 5);
$var =3D coerce($input, min: 0, max: 10, default:= 5);


btw many of= these are already covered by filter_var,

$var =3D = $input =3D=3D=3D =E2=80=98yes=E2=80=99 ? =E2=80=98yes=E2=80=99 : =E2=80=99n= o=E2=80=99
$var =3D $input !=3D=3D =E2=80=98yes=E2=80=99 ? =E2=80= =99no=E2=80=99 : $yes
$var =3D coerce($input, variants: [=E2= =80=9Cyes=E2=80=9D, =E2=80=9Cno=E2=80=9D], default: =E2=80=9Cyes=E2=80=9D);=
$var =3D coerce($input, min: 0, max: 10, default: 5);

is very close to
$var =3D filter_var($input,FILTER_= VALIDATE_BOOL);
$var =3D !filter_var($input,FILTER_VALIDATE_BOOL);<= /div>$var =3D=C2=A0 filter_var($input,FILTER_VALIDATE_BOOL, ['options'=3D>['defa= ult'=3D>true]]);
$var =3D filter_var($input, FILTER_VALIDATE_INT,= ['options'=3D>['min_range'=3D>0, 'max_range'= =3D>10, 'default'=3D>5]]);

but if your syntax idea cover stuff like
$var =3D coerce($in= put, variants: [=E2=80=9Cyes=E2=80=9D, =E2=80=9Cno=E2=80=9D, "maybe&qu= ot;], default: =E2=80=9Cyes=E2=80=9D);

then filter= _var does not cover it (well, you could get creative with FILTER_VALIDATE_C= ALLBACK, but that would be crazy, array_search would be better lel)

but even so, your proposed syntax is certainly prettier t= han filter_var.


--000000000000932fd10645c4da14--