Newsgroups: php.internals Path: news.php.net Xref: news.php.net php.internals:125010 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 qa.php.net (Postfix) with ESMTPS id 56FB11A00BD for ; Sat, 17 Aug 2024 00:00:59 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=php.net; s=mail; t=1723852966; bh=H/92+Yr1U/QIi7KfKbzxpTPE7U3M5f9NGaBl/h07Jds=; h=Subject:From:In-Reply-To:Date:Cc:References:To:From; b=H8BzAuICHOqtDxOz0FgCXYjPq4eZB2OqZscNNaJnO0mmDuF89vLffzs2Z7In2exGQ qv52onnMhXDoFLzPGBQiWK0VQDipZL3xY3NuAQBMPIQV+GjS4fA9FmmKKBzCJvfC7/ 0uN/tY7dFNdNz1daaphd1bMdQfffGoy2s7NUGJ7Us0llncwlus1a2+ugV8ZVHvCoSJ LgQduLSXR6cxRBAuXp28tiVcJeLIvVXT9eu1rt4g2uUbzwiofxZzVOohAebzoaLBA0 ckbhKIL5J4ahAAmIjJVMbXPEAssEfBrs8PK6mq5+GDO8EDcIwb+hqA3AC4YJZQzLoa SwHd7HqbGJYjw== Received: from php-smtp4.php.net (localhost [127.0.0.1]) by php-smtp4.php.net (Postfix) with ESMTP id CD78C1801D4 for ; Sat, 17 Aug 2024 00:02:45 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 4.0.0 (2022-12-13) on php-smtp4.php.net X-Spam-Level: X-Spam-Status: No, score=0.8 required=5.0 tests=BAYES_50,DKIM_SIGNED, DKIM_VALID,DMARC_MISSING,RCVD_IN_DNSWL_NONE,RCVD_IN_MSPIKE_H2, SPF_HELO_NONE,SPF_NONE autolearn=no autolearn_force=no version=4.0.0 X-Spam-Virus: No X-Envelope-From: Received: from mail-yw1-f176.google.com (mail-yw1-f176.google.com [209.85.128.176]) (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 ; Sat, 17 Aug 2024 00:02:45 +0000 (UTC) Received: by mail-yw1-f176.google.com with SMTP id 00721157ae682-66c7aeac627so28458737b3.1 for ; Fri, 16 Aug 2024 17:00:58 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=newclarity-net.20230601.gappssmtp.com; s=20230601; t=1723852857; x=1724457657; darn=lists.php.net; h=to:references:message-id:content-transfer-encoding:cc:date :in-reply-to:from:subject:mime-version:from:to:cc:subject:date :message-id:reply-to; bh=Ad6fhMwS103NZnFmsfb0oBD9BPzgeCv+R5nRAhmsCBo=; b=LAx72FGkK1INy2DZF6pWnwK/lFA4Axthy6d8d2jBJ6e6lAnWGiJyGXudi929h4n/r2 4SBycAX/wU4WRci/w1WNHmXTXZC/TOPWZolFLYz+kxS+IodjA+n8tMbC18sLrnUbl8yH OB+F5VIhITwglXRlM1uuBH4hBKgntQjlknKv3FWnLV2Gn+nI4fkuVnVbiPFUG4VWu2oy KGpw52h4uzxGxhGdcbL2iw0v1YQkvRDxn6UBErKLL3Sq2kcl2I7Ung+3dtSEsGH18/d5 j7NcVfi2tmFNSybTkKfX0KnwXtQUJXUhmJm6xbByPnTtogc2pR+HtK7rZzbnAYahGFVz 5mHg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1723852857; x=1724457657; h=to:references:message-id:content-transfer-encoding:cc:date :in-reply-to:from:subject:mime-version:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=Ad6fhMwS103NZnFmsfb0oBD9BPzgeCv+R5nRAhmsCBo=; b=ck8MDjK+qG2aJSDyXKEAnGTX18i45+OnzCTi+AsoE3TEQeoW6I7FSx8CFomQ5ZI0ER LlrtNufuI1bRGecLUkCHbpYD11yJNcrvZT+X94kXrh24WrCCOqGEch8uMBtoshJOCZt/ CEu2aAa3Z6tHNNMwjk9pzE6asP1YJ7Dr5+FF3zouIk9wXXa4UMDOYQmD2Za56C0y76/r uopmb2DytSbyMrlbVxzQiFII/He8YmBEwtn5dr8Zk4U+sVCvzGM4mrjYd4hlnERVwKNI bbuyeDE3n5pQ95qz7laQJ2zh13TXoFl50szwczZAFkKCmiQSp13HCV933dVCFyn0NrUZ Je6A== X-Forwarded-Encrypted: i=1; AJvYcCUM/wXrYKZGVqpC4GF1r8XpuMXZsew+BF65AwIe8z+XZ7zSe5SYh2Gvt4o7cO2ygNlIpIvGXoMtJNo=@lists.php.net X-Gm-Message-State: AOJu0Yywe2Du2jiaR4MYHPHkXe0dSYzVhn81iuneCimZp9raZ5BMOCfW Hro9dvZFMxImoIp7e7bHA0XY3rmzRIbcfLJLtIopCz+g5Mnj5/1FYLQ5Qxg+LIfmi1cel2zpX25 zLhw= X-Google-Smtp-Source: AGHT+IE5t+crplEroE9ozlz7/mg/amw6MTmyhW/eIHk5ELux2QeGBrndUmqHdt4JcMAcA07CV4LW+A== X-Received: by 2002:a05:690c:60c1:b0:64a:7e85:9a90 with SMTP id 00721157ae682-6b1b8ddfbadmr54774917b3.24.1723852857212; Fri, 16 Aug 2024 17:00:57 -0700 (PDT) Received: from smtpclient.apple (c-98-252-216-111.hsd1.ga.comcast.net. [98.252.216.111]) by smtp.gmail.com with ESMTPSA id 00721157ae682-6af9ce76217sm8100177b3.92.2024.08.16.17.00.56 (version=TLS1_2 cipher=ECDHE-ECDSA-AES128-GCM-SHA256 bits=128/128); Fri, 16 Aug 2024 17:00:56 -0700 (PDT) Content-Type: text/plain; charset=utf-8 Precedence: bulk list-help: list-post: List-Id: internals.lists.php.net x-ms-reactions: disallow Mime-Version: 1.0 (Mac OS X Mail 16.0 \(3696.120.41.1.8\)) Subject: Re: [PHP-DEV] Should there be a `get_declared_enums()` function ? In-Reply-To: <8dc51539-20bb-4017-b859-76066e2287e5@gmx.de> Date: Fri, 16 Aug 2024 20:00:55 -0400 Cc: Juliette Reinders Folmer , PHP internals Content-Transfer-Encoding: quoted-printable Message-ID: <4AA66A3E-1ACF-48F5-81A2-C6AAAE8B3FD0@newclarity.net> References: <66BD5F05.8010409@adviesenzo.nl> <8dc51539-20bb-4017-b859-76066e2287e5@gmx.de> To: "Christoph M. Becker" X-Mailer: Apple Mail (2.3696.120.41.1.8) From: mike@newclarity.net (Mike Schinkel) To everyone on this thread and thus nobody in specific (hence my top = post): Given that get_declared_*() populates a new ZEND_HASH each time the = function is called[1] =E2=80=94 which for classes can easily be hundreds = of strings =E2=80=94 would there be any appetite to:=20 1. Add an optional parameter =E2=80=94 e.g. = `get_declared_classes($startingFrom)` =E2=80=94 that can limit the = number of symbols starting with "n" where if n=3D=3D100 then it would = return array_slice($symbols,100), and=20 2. Add a function =E2=80=94 `get_declared_class_count()` =E2=80=94 that = returns the current number of declared symbols of whichever kind of = symbol, so we can get the "n" before calling `include`/`require` to use = with get_declared_*() after calling `include`/`require`? Used in a (very simplistic) example: function autoload($class) { $starting=46rom =3D get_declared_class_count(); if (!file_exists("src/{$class}.php")) { return; } include_once "src/{$class}.php"; foreach (get_declared_classes($startingFrom) as $class) { if (!method_exists($class,'init')) { continue; } $class::init(); } } This would cut down on creating hashes with 100+ strings that get = immediately thrown away, and also cut down on memory = fragmentation/garbage collector churn.=20 -Mike [1] = https://github.com/php/php-src/blob/18d41502da0da1bb3928e60c41f1b821974c2c= 01/Zend/zend_builtin_functions.c#L1371 > On Aug 16, 2024, at 7:13 AM, Christoph M. Becker = wrote: >=20 > On 15.08.2024 at 03:51, Juliette Reinders Folmer wrote: >=20 >> Should a `get_declared_enums()` function be added ? >=20 > Here we go: >=20 > function get_declared_enums() { > $enums =3D []; > $exts =3D get_loaded_extensions(false); > foreach ($exts as $ext) { > $re =3D new ReflectionExtension($ext); > $classes =3D $re->getClasses(); > foreach ($classes as $class) { > if ($class->isEnum()) { > $enums[] =3D $class->name; > } > } > } > return $enums; > } >=20 > Porting this to C is left as an excercise for the reader. ;) Hint: > = >=20 > Note that the terminating folding marker is backwards. >=20 >> And should the `get_declared_classes()` function be adjusted to = exclude >> enums ? >=20 > For reasons that have been stated elsewhere in this thread, I don't > think so. >=20 > Cheers, > Christoph