Newsgroups: php.internals Path: news.php.net Xref: news.php.net php.internals:128411 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 C90711A00BC for ; Wed, 6 Aug 2025 21:20:19 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=php.net; s=mail; t=1754515119; bh=t8zyd7XXoxXiIk2o8dZTPX+Jjx6M2SEe9wTzaEmpyBE=; h=Date:Subject:To:References:From:Cc:In-Reply-To:From; b=QJxOpuiC4webIEbJ/XRjyaxCxxhmmRMpAtREV/wuCMwpThmk53q7kvSyXSR4MGcLr p2fQ7bjh40nzFWtQRVXEH2lZNEhfW8aWlHSNXpAz67+jo8/2CyfpXxeDTve8L9cdXS AQgXUUVDbFHQuQTK61CYplhadGyjUXadRSvwMi8G97JjNttwmAuoCvw6yZ+HxG/WmP zWFrglOW2elZw3ej35wqZk4DnAtGNaDjhEWMZwrm1rS2AMMZVXeJtHzRn0BJCNIMxq 9XBo6lO5YxdYul2YIXMEAUqkcx7xafaAyc01FmsDi9BYntZxShLq91UaWoO2H/vd8J C4TiN1n0eaMow== Received: from php-smtp4.php.net (localhost [127.0.0.1]) by php-smtp4.php.net (Postfix) with ESMTP id 19601180079 for ; Wed, 6 Aug 2025 21:18:37 +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.6 required=5.0 tests=BAYES_50,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,DMARC_PASS,SPF_HELO_PASS, SPF_PASS autolearn=no autolearn_force=no version=4.0.1 X-Spam-Virus: No X-Envelope-From: Received: from filter102.mijn.host (filter102.mijn.host [5.254.117.163]) (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 ; Wed, 6 Aug 2025 21:18:36 +0000 (UTC) Received: from h26.mijn.host ([2a03:5180:7:2:f264:726d:beae:1]) by filter102.mijn.host with esmtps (TLS1.3) tls TLS_AES_256_GCM_SHA384 (Exim 4.94.2) (envelope-from ) id 1ujlYS-006Vqu-LW; Wed, 06 Aug 2025 17:20:14 -0400 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=jnvsor.net; s=x; h=Content-Transfer-Encoding:Content-Type:In-Reply-To:Cc:From:References: To:Subject:MIME-Version:Date:Message-ID:Sender:Reply-To:Content-ID: Content-Description:Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc :Resent-Message-ID:List-Id:List-Help:List-Unsubscribe:List-Subscribe: List-Post:List-Owner:List-Archive; bh=mkmfijV55r9e1o+NmgWxdmOEOF9atVjasShgEElQQC8=; b=2q7sHXtVaCBI5ChiDKH7FS2Syi Ml7ciLGjHf/8s9aVw/2rCqFaICTmhZzZbHgmKyPGcxMAPhoArDZCMXGda3PhOI/S/2KgZiaD2sNoJ cp2jbpXoKlrxi+EW31XQTCxb4Ik9tLepDwFMEWDh89VHVXyW8JvG5MdF22kzO3vNZSB9+h0e1KQ8L GUEDZ8A2fQpi1mneZogZm5B1bZCUI9tgCk5c3DmhondT9eDIqHrBQTJc9CknG0JeY37FGAlQI9Z8A lgJf7VjI2zT3QvyoaRYAMNQlnqsMayuhBFj1BIKb3yJGEAOloOgBw98IXEKeMb3Nui5hkVhid3Zs/ R3mdqB5g==; Received: from 2001-1c00-2a02-0700-46b3-9447-32a6-bf6b.cable.dynamic.v6.ziggo.nl ([2001:1c00:2a02:700:46b3:9447:32a6:bf6b]) by h26.mijn.host with esmtpsa (TLS1.3) tls TLS_AES_256_GCM_SHA384 (Exim 4.98.2) (envelope-from ) id 1ujlYS-00000000NKh-2Xwj; Wed, 06 Aug 2025 23:20:12 +0200 Message-ID: <0266aa5f-73e8-478e-9ef7-9b48fde7e030@jnvsor.net> Date: Wed, 6 Aug 2025 23:20:12 +0200 Precedence: list list-help: list-post: List-Id: x-ms-reactions: disallow MIME-Version: 1.0 User-Agent: Mozilla Thunderbird Subject: Re: [PHP-DEV] Protected inheritance hierarchies To: Rob Landers References: <1754476976305.2190696371.1573579683@yahoo.de> Content-Language: en-US Cc: internals@lists.php.net In-Reply-To: Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 8bit X-AuthUser: jnv@jnvsor.net X-Authenticated-Id: jnv@jnvsor.net X-Originating-IP: 2a03:5180:7:2:f264:726d:beae:1 X-mijn.host-Spamfilter-Domain: mijn.host X-mijn.host-Spamfilter-Username: 2a03:5180:7:2:f264:726d:beae:1/112 Authentication-Results: mijn.host; auth=pass smtp.auth=2a03:5180:7:2:f264:726d:beae:1/112@mijn.host X-mijn.host-Spamfilter-Outgoing-Class: ham X-mijn.host-Spamfilter-Outgoing-Evidence: Combined (0.28) X-Recommended-Action: accept X-Filter-ID: 9kzQTOBWQUFZTohSKvQbgI7ZDo5ubYELi59AwcWUnuVsz76QzlDw7MCfl+4fb1NxUsep8/b4bzjO YBrCPAdsiiu2SmbhJN1U9FKs8X3+Nt2sdENNz0Ob5Mcg8HV4NYhqYDYiFl9huZCsZDn+LUJsU3fS z05hWq+IKDE/MsLEr2cEybI1sOftHmSKUCHCvcq0VvcCA1Qa9BGdQX4vJy9/H5JVRKyFCRrxWkR6 oZhlSr2IwdrR6MCRf9fSYHlHvEpziFKfD1jKgYfH+6S5qDVYoOmeRt7qHd5fQGuXWoplKlc1R6Pa oqS3DNVMIxswrKXjmTmYf9felIf8Q0lvYJANy1im26jqdSLearSSTVIJyNKROUzReCS8EpKh0It9 L25JS816nuiE0t5pG6MLXGczodD6n5G6jw4mRNxot7VM8k9eU13R5GRisKd7Cpd4JJuGILIejoSc poot5WKwlo2dbdgFRynr5duqaiP+JtZKoQPGLwTIQNNPqNOPF/so6xWnbVcVWzkLtkIUbefa3NbH Kpc59lzUzvTEK+Uqw6PE/u7KuzDY+5x77+RY9BSYyht4On02JTRNJesPXaFd0pgPtOq9wtkIM3Ps UTmXxp6BN+taHHderbgAXsu5dIYoVN3LtixBzAFls8HrYidi62+42nNncS4hVJwix8U/tZ6bpwhB YXa65SKS/U8R2rvC8QmAgneYl2CbmQ1c/RYOiDQqntRoI7zgKfRkYtwrRXGxrxizgWTtGs5KkmJl /obSTS4KZeDIMyi7MLNx5uDctxuJGszy+ormF86UgF9iT1ykQNxhhMr36PxTpMcr7Fks08KfFeen 3VeGioP3STtJ26RCd55ECu3zMC6/UIvU+dfuPW52wzmXvQkfJr34ESSzzf/q0rpsofmwYRbt4Km3 Kso0RIh6O9+ACu0jr8f8m9jRA7gccBIk1Sag4dKiqCrF8eZZoCB9XIlWY+lYIDSDOa8tSalF/rLs X/a0Q0hs5T7HiBzTDhDnYR+ek3eMBL7tclEuw6aR+wRW5nf7239Rc7/1M1sbhQ/EKZyv3UphF+0U UGCUkxE+SK4CkqqQuY/ADtB7XIRP7ravcfEVjpqNgDbKuYvzmpfh5QDDbelp1QyNM5XcJgmZ59nD 52l9NnscnUKTR7d4CWpSt/sm/gYhmNcISA== X-Report-Abuse-To: spam@filter101.mijn.host X-Complaints-To: abuse@filter101.mijn.host From: jnv@jnvsor.net (Jonathan Vollebregt) On 8/6/25 1:41 PM, Rob Landers wrote: > Take for example: > > class Fruit { >   public string $kind { get => "fruit" } > } > > class Vegetable extends Fruit { >   public string $kind { get => "vegetable" } > } > > function foo(Fruit $fruit) {} > > foo(new Vegetable); // hmmm > > This is a "soft" violation that only makes sense to us humans, but PHP > allows it. It requires us humans to realize we are performing an LSP > violation and refactor the code so that we don't pass a Carrot to > someone expecting a Mango. Rob, that's not how types work. The only thing guaranteed by this definition of $fruit->kind is that it has a getter that returns a string. "vegetable" is a string. This isn't a violation at all. Now if you were able to type specific values in PHP a la psalm/phpstan and make something like this: class Fruit { public "apple"|"pear" $kind { get => "fruit" } } Well then yeah Vegetable would be a violation, but this would be a different (and more specific) type than just string. (And this is why you can't extend enums, it would widen a contract) This isn't a "soft" violation that "PHP allows", this is a well defined property of every programming language I know of.