Releases · nette/php-generator

Released version 4.2.2

This release focuses on making namespaces and classes work together more naturally. Classes now know which namespace they belong to, constructors accept fully qualified names, and a new unified add() method on PhpFile ties it all together. Under the hood, the Factory got a thorough refactoring and the codebase passed its first mandatory static analysis check.

  • PhpNamespace::add() now automatically assigns itself as the namespace of any ClassLike passed to it. If your code relied on getNamespace() returning null after adding a class to a namespace, you'll need to update that assumption.

  • PhpFile::add() – a single entry point for adding classes, interfaces, traits, enums, functions, and namespaces to a file. It handles namespace creation and bracket syntax automatically, so you can build a complete file with just add() calls.

  • ClassLike::getFullName() – returns the fully qualified name when the class belongs to a namespace (e.g., App\Model\User), the short name otherwise, or null for anonymous classes.

  • ClassLike constructors now accept FQN – pass 'App\Model\User' and the namespace is extracted automatically. No need to create the namespace separately for simple cases.

  • PhpNamespace::add() accepts GlobalFunction – the unified add() method now handles functions alongside class-like types, making the namespace API more consistent.

  • The $namespace parameter in ClassLike constructors is deprecated. Use setNamespace() instead. The old signature still works for now, but will be removed in a future version.

Released version 4.2.0

  • requires PHP 8.1
  • Visibility, PropertyHookType & PropertyAccessMode are enums (BC break)
  • removed deprecated stuff
  • addTrait() second argument is deprecated (BC break)

Released version 4.1.9

  • support for PHP 8.5
  • final promoted property in PHP 8.5
  • optimized global function calls

Released version 4.1.8

  • Factory::fromClassReflection() extracts property hook bodies (#172)
  • Factory::fromClassReflection() rejects $withBodies for interfaces
  • improved tests
  • cs

Released version 4.1.7

  • added support for PHP 8.4 features
    • properties hooks
    • asymmetric visibility
    • property can be abstract / final
    • interfaces can have properties
  • added Visibility
  • ClassManipulator::implement() can implement abstract classes
  • ClassManipulator::implementInterface() renamed to implement()
  • PsrPrinter is not final
  • Constant: type can be nullable
  • Factory: fixed visibility of promoted property

Released version 4.0.10 (EOL)

  • Extractor::extractAll() fixed file comment parsing
  • Factory: $withBodies cannot be used for internal classes/functions
  • Printer: fixed falsy Attribute aren't printed (#142)
  • added Visibility

Released version 4.1.6

  • added ClassManipulator
  • Parameter & Property: isNullable() returns true when default value is null (possible BC break)
  • added TraitsAware::hasTrait method (#163)
  • support for PHP 8.4

Released version 4.1.5

  • added PhpNamespace::getClass() & getFunction()
  • added CommentAware::removeComment()
  • added PhpFile::removeNamespace()
  • Factory, Extractor: sets flag readonly for promoted properties #158 (reverts "Factory: properties in readonly classes are not readonly")
  • ClassType: cloning includes attributes and parameters
  • GlobalFunction, Method: from() accepts first-class callables

Released version 4.1.4

  • PsrPrinter: opening bracket on the correct line #155
  • Make ClassLike::from return type assert the subclass type (BC break) (#154)
  • Dumper::dumpArray(), dumpArguments() optimization
  • Dumper: simplified list with negative keys
  • added parameter $overwrite to addMember(), addMethod(), addProperty(), addConstant(), addCase() #152
  • Factory: parameters 'int $foo = null' are parsed as '?int'

Released version 4.1.3

  • Extractor: supports PHP-Parser 5.0 (#150)
  • Extractor: fix escaping quotes when converting to double quoted string #151
  • Extractor: NOWDOC/HEREDOC are not converted to single line strings
  • Dumper: added $customObjects
  • Dumper: refactoring, added dumpCustomObject()
  • Printer: option $omitEmptyNamespaces is applied by printFile() [Close #147]