Newsgroups: php.internals Path: news.php.net Xref: news.php.net php.internals:115409 Return-Path: Delivered-To: mailing list internals@lists.php.net Received: (qmail 21465 invoked from network); 12 Jul 2021 14:31:43 -0000 Received: from unknown (HELO php-smtp4.php.net) (45.112.84.5) by pb1.pair.com with SMTP; 12 Jul 2021 14:31:43 -0000 Received: from php-smtp4.php.net (localhost [127.0.0.1]) by php-smtp4.php.net (Postfix) with ESMTP id 97F0F1804C9 for ; Mon, 12 Jul 2021 07:54:59 -0700 (PDT) X-Spam-Checker-Version: SpamAssassin 3.4.2 (2018-09-13) on php-smtp4.php.net X-Spam-Level: X-Spam-Status: No, score=-2.1 required=5.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,FREEMAIL_FROM,HTML_MESSAGE, RCVD_IN_DNSWL_NONE,RCVD_IN_MSPIKE_H2,SPF_HELO_NONE,SPF_PASS autolearn=no autolearn_force=no version=3.4.2 X-Spam-Virus: No X-Envelope-From: Received: from mail-ej1-f44.google.com (mail-ej1-f44.google.com [209.85.218.44]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange ECDHE (P-256) server-signature RSA-PSS (4096 bits) server-digest SHA256) (No client certificate requested) by php-smtp4.php.net (Postfix) with ESMTPS for ; Mon, 12 Jul 2021 07:54:59 -0700 (PDT) Received: by mail-ej1-f44.google.com with SMTP id v20so35139930eji.10 for ; Mon, 12 Jul 2021 07:54:59 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=mime-version:references:in-reply-to:from:date:message-id:subject:to :cc; bh=zjsJND9qXl7vVWnVaPGiX3TsxE1ChPaid35ZPxytXQQ=; b=GIKjO7zdmkKweU0Y5REzeOO7Ykuqc69Cz7R9zI18xoAOv9CdePaogCVtjyqf3IJdEt 6chmkkUyk98tNzvZgeSlFHrQmmv/PQlEMpnhEqJeTbXTbpirEPgymT7ZbmhJLYc0XpRa T0I+N/DNO+WURI5ieysmfvuZwDKVgwWwTMlj8EHapJn9t8XV2POLENpqTUPpxOQdmXDm E7+obj8ZL8h648YZY5PJMggUs3kXamzxEVsq2ks1pgBntD5SSOUnAC1AUAjnOx3EsCMP WlXsYi+sPOgdy4joDAb6sOW7mFghaU7qH2Eky7oJDtncOfPtwmzlJ0aEVR2GFYcaZghJ lkDw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:mime-version:references:in-reply-to:from:date :message-id:subject:to:cc; bh=zjsJND9qXl7vVWnVaPGiX3TsxE1ChPaid35ZPxytXQQ=; b=kXgoh1rroW9an2ocW9Qljv6V1k8S4eLWfvxckM6IFzEuG19ELbT7ZQoItYxxf9c9Qr 5QyQp6cWuTu1kEArfRtAhrmiXbKnEQYUIaxI+DlMwqD1tTh1H5TYde9eUcI/M+KaSMjy /jaaZ3iCNJtkLgaqhV39OlpOgVP9ftIIkA/dVtC52Ho/LhE8jjmG/m/vC3Sj41K9vI7I YOWGgv+s81cJzFEOo80xkZBEh1mZQjkttyI/XEIt7gQoYiAfaWnrxv7ynZZTHXtxLuwf u4afETKv9ddU4nhMcq9DhGcvfCw1ZqcNSBCvU0pEN0bMZApuI3D62FugosyY9t5UnEJA yVwA== X-Gm-Message-State: AOAM533CKwru4lyvQOhJz4pkd1ScAgyQQG28IYCZtsVTA/jXlk7JX04y /CQYJb6N5uisxICx5fg+VFvBz70K+4gugLY5FYQBJUsXw9Y= X-Google-Smtp-Source: ABdhPJymVCD3EbZxoJJsdb645D1FibIve/GQ/6xjO4G8FgOLIIcMsHlVeFqDQYOBY97J4fn9k2bRShzaDacX0CePTu0= X-Received: by 2002:a17:907:381:: with SMTP id ss1mr4175515ejb.404.1626101697980; Mon, 12 Jul 2021 07:54:57 -0700 (PDT) MIME-Version: 1.0 References: <0d28ee72-accd-4dfc-a8e0-018c99e4a86d@www.fastmail.com> In-Reply-To: <0d28ee72-accd-4dfc-a8e0-018c99e4a86d@www.fastmail.com> Date: Mon, 12 Jul 2021 17:54:47 +0300 Message-ID: To: Larry Garfield Cc: php internals Content-Type: multipart/alternative; boundary="00000000000013acce05c6ee4e45" Subject: Re: [PHP-DEV] Type casting syntax From: maxsem.wiki@gmail.com (Max Semenik) --00000000000013acce05c6ee4e45 Content-Type: text/plain; charset="UTF-8" I was planning to propose something closer to On Mon, Jul 12, 2021 at 2:19 AM Larry Garfield wrote: > What are the use cases for integrated object to object (ie, class to > class) conversion in PHP? Rust's type system is a very different beast, so > its casting logic makes more sense there. I'm not entirely clear on what > the use case is in PHP. When would that be superior to "just write an > asFoo() method and move on with life"? > > Scalar conversion I can see, but every time someone suggests adding > siblings to __toString(), there's major pushback. > I was thinking of something akin to many compiled languages' approach of "consider this expression is now of that type, and throw an exception if it's not". An example of this approach from Benjamin's proposal of old^ $service = (EmailService) $diContainer->get('email.service'); Instead of /** @var EmailService $service */ $service = $diContainer->get('email.service'); if (!$service instanceof EmailService) { throw new TypeError('Expected instance of EmailService, ...'); } -- Best regards, Max Semenik --00000000000013acce05c6ee4e45--