Hacktoberfest 2026: le issue che i maintainer hanno segnato per ottobre, aperte e adatte ai principianti. Sfoglia le issue Hacktoberfest

Proxy of a namespaced class extending a global class references the parent unqualified (Class "Ns\ArrayObject" not found)

Chiusa
#759 0 commenti 0 reazioni 0 assegnatari Vedi su GitHub

I maintainer di solito rispondono entro 1 giorno

@lisachenko ci sta già lavorando.

Dal 9/10/2026.

  • #762 di @lisachenko — aperta

Valutazione

Difficoltà
3/5
Tempo stimato
1-2 giorni
Idoneità per principianti
62/100
Tipo di issue
Bug
Chiarezza
Specificata chiaramente
Stato di attività
Attiva
Stack tecnologico
php
Ambito
tooling

Direzione di ricerca

Start with ClassGenerator::classNameNode() in src/Proxy/Generator/ClassGenerator.php, which only emits a fully qualified name when there is a leading backslash or a namespace separator, then trace the parent name passed from src/Proxy/ClassProxyGenerator.php around line 187. Reproduce with a namespaced class extending \ArrayObject and check that the generated proxy loads. Done when the extends clause and trait names are always fully qualified and the fixture and snapshot tests pass.

Scritto dal modello di indicizzazione a partire dal testo della issue.

Descrizione

Bug

Problem

A woven class in a namespace that extends a class from the global namespace gets a proxy whose extends clause names the parent unqualified. The name then resolves inside the proxy's namespace, and including the proxy fails. This affects any extends \Exception, \RuntimeException, \ArrayObject, \DateTimeImmutable, and so on.

Reproduce (master 4e95fdd)

// app/Coll.php
namespace Bug2;
class Coll extends \ArrayObject implements \Countable
{
    public function hello(): string { return 'coll'; }
}

The aspect is #[Before('execution(public Bug2\**->hello(*))')]. The kernel uses appDir = app/; debug mode makes no difference.

Generated proxy (cache/Coll.php):

namespace Bug2;
// …
class Coll extends ArrayObject implements \IteratorAggregate, \Traversable, \ArrayAccess, \Serializable, \Countable, \Go\Aop\Proxy

Result: Error: Class "Bug2\ArrayObject" not found in cache/Coll.php:9 when the woven file includes the proxy.

Cause

  • src/Proxy/ClassProxyGenerator.php:187 passes $parentClass->getName() (ArrayObject, with no leading \) to ClassGenerator.
  • ClassGenerator::classNameNode() (src/Proxy/Generator/ClassGenerator.php:127-134) only emits Name\FullyQualified when the name has a leading \ or contains a namespace separator. A global class name therefore becomes a relative Name.
  • Interfaces are not affected, because they are prefixed with \ explicitly (ClassProxyGenerator.php:180).
  • Used traits (ClassGenerator.php:176,184) go through the same classNameNode(), so a trait declared in the global namespace is probably affected the same way.

Expected

extends \ArrayObject. Reflection always returns fully qualified names, so the parent (and the trait names) should always be emitted fully qualified. This also applies to the enum and trait proxy generators, if they pass reflection names through the same helper.

Acceptance

  • Weaving fixture and snapshot test: a namespaced class extending a global class (\ArrayObject or \Exception), and a class using a trait from the global namespace.
  • A functional or compile check that the generated proxy loads.
  • Generated code stays clean: the short-alias rules from AGENTS.md apply. A global name written as \ArrayObject is fine.
Lingua principale
PHP
Stelle
1.7k
Fork
166
Merge medio
11h 30m
PR unite (30g)
40

Preparare l'ambiente

Questo progetto non fornisce container di sviluppo, Dockerfile né guida per i contributori, quindi l'ambiente è a tuo carico: parti dal suo README e consulta la nostra guida al primo contributo per i passaggi generali.

Come iniziare

  1. Leggi tutta la issue e poi la guida ai contributi del progetto.
  2. Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
  3. Fai un fork del repository e lavora su un branch.
  4. Apri una pull request che faccia riferimento al numero della issue.

Altre issue di goaop/framework

Tutte le issue di goaop/framework

Issue simili

Altre issue su PHP

Ricevi le nuove issue nella tua casella

Un breve riepilogo di issue GitHub adatte ai principianti.