Newsgroups: php.internals Path: news.php.net Xref: news.php.net php.internals:119701 Return-Path: Delivered-To: mailing list internals@lists.php.net Received: (qmail 44966 invoked from network); 14 Mar 2023 22:58:28 -0000 Received: from unknown (HELO php-smtp4.php.net) (45.112.84.5) by pb1.pair.com with SMTP; 14 Mar 2023 22:58:28 -0000 Received: from php-smtp4.php.net (localhost [127.0.0.1]) by php-smtp4.php.net (Postfix) with ESMTP id D87811804DF for ; Tue, 14 Mar 2023 15:58:27 -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, RCVD_IN_DNSWL_NONE,RCVD_IN_MSPIKE_H3,RCVD_IN_MSPIKE_WL,SPF_HELO_NONE, SPF_PASS,T_SCC_BODY_TEXT_LINE autolearn=no autolearn_force=no version=3.4.2 X-Spam-ASN: AS15169 209.85.128.0/17 X-Spam-Virus: No X-Envelope-From: Received: from mail-pj1-f48.google.com (mail-pj1-f48.google.com [209.85.216.48]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange ECDHE (P-256) server-signature RSA-PSS (2048 bits) server-digest SHA256) (No client certificate requested) by php-smtp4.php.net (Postfix) with ESMTPS for ; Tue, 14 Mar 2023 15:58:27 -0700 (PDT) Received: by mail-pj1-f48.google.com with SMTP id gp15-20020a17090adf0f00b0023d1bbd9f9eso44576pjb.0 for ; Tue, 14 Mar 2023 15:58:27 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; t=1678834706; h=to:subject:message-id:date:from:in-reply-to:references:mime-version :from:to:cc:subject:date:message-id:reply-to; bh=iwlW//j94cXqPnslf7KjUm5Vw14+jhrZaPqjzh2SOPw=; b=EuLhasBcmXS5K+RKpluc6TOS5oC7D3+YJMDZMK1mx1PWqL9F5WbVEC0r30ZI91bAQ1 5E0taFV3QFXjLwQ1RlL7WwGWxan6UnZfFolOO7Pnkt03gr1g5o263pEhFWXXfrQ9TNWe +CgLQvb6Zj7A8H9DK+sX/wgkClPQhzxFCLuVUmcrWSJEl2XUSSm0euhpIrFfjDTnzKbu GbB6zSZP2z4AULAIvZ74fY8tUOpdUnTNql42EOrFtuXMoxx8byLmrgb3tLGgdLD2JwD1 4OR6tjZhAbDqZ6VIAiyiQHla2noc3ztOVFPYeQjZP6jFGnaVzqrG/p8w9DQRxEJmqt6T sKDg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; t=1678834706; h=to:subject:message-id:date:from:in-reply-to:references:mime-version :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=iwlW//j94cXqPnslf7KjUm5Vw14+jhrZaPqjzh2SOPw=; b=rfdeHirOeUodQS3YCJg1HzBvqk8PqnXLhz5xoUdsrwOl0kvm3UBvhokGa+OP+rw03l Tb5X/naTk4MwsIAm2IfexUmooaf+R82NNhYObcG2LP2vb6FFER9xDdubvMD94X9KhLdi 1uiyucxqSTjfAndXhk5oZn6z4QAtafupPqGghy+kdSSt9Lv8Mjvv56eDecrr+44kTb3z toxlispPKJOnmQQm30SURBBUacXdn9Egq0zlNR/g5kxBjv4AjEvkE7RJg9sLYVkKJl2z sldwNR5ODlWUXvpGyRcS0hZYMCSMWxTqkSk882H7mfN6qsi1n6NN/MIfG6o9p+jfuhsG vzxQ== X-Gm-Message-State: AO0yUKXZS48KsNtpjAEUiAYt1AxvqNURemoLk1gDf75KnpXtfDLOl4mQ SDfaLhPPiSzTn83RGCcEZ3xAc5dTpifFv1W/J9x3llQTso0= X-Google-Smtp-Source: AK7set+YJnz5t7QqXazWXjU01habFXXWlRgfpJ4T5LiTryANDEkUE109lnT3zwDEPSAHJtDGi30/e8Za0Q/gDFEWxsg= X-Received: by 2002:a17:902:ced0:b0:1a0:4cf7:82ae with SMTP id d16-20020a170902ced000b001a04cf782aemr327070plg.4.1678834706292; Tue, 14 Mar 2023 15:58:26 -0700 (PDT) MIME-Version: 1.0 References: <8a9a04b3-45e6-47dd-dee8-0f524e49bd37@gmail.com> In-Reply-To: Date: Tue, 14 Mar 2023 23:58:15 +0100 Message-ID: To: internals@lists.php.net Content-Type: text/plain; charset="UTF-8" Subject: Re: [PHP-DEV] Brainstorming idea: inline syntax for lexical (captured) variables From: tovilo.ilija@gmail.com (Ilija Tovilo) > I guess you'd have to generate a new class entry every time the "new > class" line was run, and inject the extra values into that. > > > If it was limited to capturing scalars and arrays, you could treat it as > a kind of macro expansion, i.e. this ... > > $example = new class { > public $inner = $^outer; > } > > ... could be a sort of sugar for: > > eval( > sprintf( > 'return new class { > public $inner = %s; > };', > var_export($outer, true) > ) > ); > > Which is valid code, if not particularly efficient: https://3v4l.org/sQaUS Unfortunately, PHP isn't really well suited for something like that. Eval'd classes are still request-persistent, so any created object would leak its class structure (which is much bigger and less optimized in terms of memory than the object). Normal anonymous classes: https://3v4l.org/41UGH Anonymous classes created through eval (and thus creating a separate class): https://3v4l.org/Q9eE3 Ilija