Documentation Generator for PHP

Overview

License: MIT Qa workflow Code Coverage Scrutinizer Code Quality Packagist Version Packagist Pre Release Version Downloads

phpDocumentor

What is phpDocumentor?

phpDocumentor is an application that is capable of analyzing your PHP source code and DocBlock comments to generate a complete set of API Documentation.

Inspired by phpDocumentor 1 and JavaDoc it continues to innovate and is up to date with the latest technologies and PHP language features.

phpDocumentor v3 (Stable)

v3 is the latest stable release.

Documentation

For more detailed information you can check our online documentation at https://docs.phpdoc.org/.

Features

phpDocumentor supports the following:

  • PHP 7.0+ compatible, full support for Namespaces, Closures and more are provided.
  • Docblock over types, docblocks can be more explicit about types not all formats are supported by native php.
  • Shows any tag, some tags add additional functionality to phpDocumentor (such as @link).
  • Low memory usage, peak memory usage for small projects is less than 20MB, medium projects 40MB and large frameworks 100MB.
  • Incremental parsing, if you kept the Structure file from a previous run, you get an additional performance boost of up to 80% on top of the mentioned processing speed increase above.
  • Easy template building, if you want to make a branding you only have to call 1 task and edit 3 files.
  • Two-step process, phpDocumentor first generates a cache with your application structure before creating the output. If you'd like you can use that to power your own tools or formatters!
  • Generics support, with more static analysis in php types have become more complex. phpDocumentor understand these types. And will render them as first class types.

Installation

PhpDocumentor requires PHP 7.2 or higher to run. However, code of earlier PHP versions can be analyzed.

All templates provided with phpDocumentor have support for Class diagrams based on the read code base. This will require the application Graphviz to be installed on the machine running phpDocumentor. Rendering the class diagrams using Graphviz is optional, and warnings about missing Graphviz can be ignored. However, your documentation will contain some dead links in this case. Class diagram will be created with option --setting=graphs.enabled=true.

There are 3 ways to install phpDocumentor:

  1. Using phive (recommended)
  2. Using the PHAR (manual install)
  3. Via Docker
  4. Via Composer

Using Phive

$ phive install --force-accept-unsigned phpDocumentor

For more information about phive have a look at their website. Now you have phpDocumentor installed, it can be executed like this:

php tools/phpDocumentor

Using the PHAR

  1. Download the phar file from https://github.com/phpDocumentor/phpDocumentor/releases
  2. You can execute the phar like this: php phpDocumentor.phar

Via Docker

  1. $ docker pull phpdoc/phpdoc
  2. $ docker run --rm -v $(pwd):/data phpdoc/phpdoc

Via Composer (not recommended)

But wait? What about composer?

Ah, you discovered our secret. There is a phpdocumentor composer package that you can use to install phpDocumentor.

However: phpDocumentor is a complex application, and its libraries are used in countless other libraries and applications (2 of our libraries have more than 150 million downloads each); and this means that the chances for a conflict between one of our dependencies and yours is high. And when I say high, it is really high.

So, because of the above: we do not endorse nor actively support installing phpDocumentor using Composer.

PEAR

Starting from phpDocumentor v3 we decided to drop PEAR support due to declining use.

How to use phpDocumentor?

The easiest way to run phpDocumentor is by running the following command:

$ phpdoc run -d <SOURCE_DIRECTORY> -t <TARGET_DIRECTORY>

This command will parse the source code provided using the -d argument and output it to the folder indicated by the -t argument.

phpDocumentor supports a whole range of options to configure the output of your documentation. You can execute the following command, or check our website, for a more detailed listing of available command-line options.

$ phpdoc run -h

Configuration file(s)

phpDocumentor also supports the use of configuration files (named phpdoc.xml or phpdoc.dist.xml by default). Please consult the documentation to see the format and supported options.

Nightly builds

PhpDocumentor doesn't have a nightly release. However, during each pipeline a [phar] artifact is built. If you want to test the bleeding edge version of phpDocumentor, have a look in the actions section of this repository. Each successful QA workflow has a download at the right upper corner.

Contact

Reaching out to us is easy, and can be done with:

Comments
  • v3-alpha4/phar not working on Windows ?

    v3-alpha4/phar not working on Windows ?

    I'm unsure whether this is a configuration issue, a Windows issue or a PHPDoc 3 issue, but hopefully providing all this info might yield something.

    Happy to try and help debug this further.

    Config used

    File: phpdoc.xml in the project root.

    <?xml version="1.0" encoding="UTF-8" ?>
    <phpdoc>
    	<title>PHPCSUtils</title>
    	<files>
    		<file>autoload.php</file>
    		<directory>PHPCSUtils</directory>
    	</files>
    	<parser>
    		<target>build/docs/structure/</target>
    	</parser>
    	<transformer>
    		<target>build/docs/output/</target>
    	</transformer>
    	<logging>
    		<level>debug</level>
    	</logging>
    </phpdoc>
    

    I've tried setting the <transformations> key and tried nearly all possible templates, but the output is no different.

    Command used

    phpdoc run from the project root

    Output on screen

    Complete output
    # phpdoc run                                                                                                                                   
    PHP 7.1.30 (cli) (built: May 28 2019 15:12:11) ( ZTS MSVC14 (Visual C++ 2015) x86 )                                                             
    Copyright (c) 1997-2018 The PHP Group                                                                                                           
    Zend Engine v3.1.0, Copyright (c) 1998-2018 Zend Technologies                                                                                   
                                                                                                                                                    
    phpDocumentor v3.0.0-alpha.4-6-gc5f3834c                                                                                                        
                                                                                                                                                    
    [2019-11-08 10:55:39] app.NOTICE: Using the configuration file at the default location [] []                                                    
    [2019-11-08 10:55:39] app.INFO: Collecting files ..  [] []                                                                                      
    [2019-11-08 10:55:43] app.INFO: OK [] []                                                                                                        
    [2019-11-08 10:55:43] app.INFO: Loading project from cache [] []                                                                                
    [2019-11-08 10:55:43] app.NOTICE: Parsing files [] []                                                                                           
    Parsing files                                                                                                                                   
    [2019-11-08 10:55:43] app.INFO: Elapsed time to parse all files: 0.01s [] []                                                                    
    [2019-11-08 10:55:43] app.INFO: Peak memory usage: 12M [] []                                                                                    
    [2019-11-08 10:55:43] app.NOTICE: Storing cache ..  [] []                                                                                       
    [2019-11-08 10:55:43] app.INFO: OK [] []                                                                                                        
    [2019-11-08 10:55:43] app.INFO: Loading project from cache [] []                                                                                
    [2019-11-08 10:55:43] app.INFO:  Applying 17 transformations [] []                                                                              
                                                                                                                                                    
    Applying transformations (can take a while)                                                                                                     
    [2019-11-08 10:55:43] app.INFO:   Initialize writer "phpDocumentor\Transformer\Writer\FileIo" [] []                                             
    [2019-11-08 10:55:43] app.INFO:   Initialize writer "phpDocumentor\Transformer\Writer\Twig" [] []                                               
    [2019-11-08 10:55:43] app.INFO:   Initialize writer "phpDocumentor\Transformer\Writer\Graph" [] []                                              
    [2019-11-08 10:55:43] app.NOTICE:   Writer FileIo  using query "copy" on .htaccess [] []                                                        
      1/17 [=>--------------------------]   5%[2019-11-08 10:55:43] app.NOTICE:   Writer FileIo  using query "copy" on images [] []                 
      2/17 [===>------------------------]  11%[2019-11-08 10:55:43] app.NOTICE:   Writer FileIo  using query "copy" on css [] []                    
      3/17 [====>-----------------------]  17%[2019-11-08 10:55:43] app.NOTICE:   Writer FileIo  using query "copy" on js [] []                     
      4/17 [======>---------------------]  23%[2019-11-08 10:55:43] app.NOTICE:   Writer FileIo  using query "copy" on font [] []                   
      5/17 [========>-------------------]  29%[2019-11-08 10:55:43] app.NOTICE:   Writer twig  using query "namespace" on index.html [] []          
      6/17 [=========>------------------]  35%[2019-11-08 10:55:43] app.NOTICE:   Writer twig  using query "indexes.namespaces" on  [] []           
      7/17 [===========>----------------]  41%[2019-11-08 10:55:43] app.NOTICE:   Writer twig  using query "indexes.classes" on  [] []              
      8/17 [=============>--------------]  47%[2019-11-08 10:55:43] app.NOTICE:   Writer twig  using query "indexes.interfaces" on  [] []           
      9/17 [==============>-------------]  52%[2019-11-08 10:55:43] app.NOTICE:   Writer twig  using query "indexes.traits" on  [] []               
     10/17 [================>-----------]  58%[2019-11-08 10:55:43] app.NOTICE:   Writer twig  using query "files" on  [] []                        
     11/17 [==================>---------]  64%[2019-11-08 10:55:43] app.NOTICE:   Writer twig  using query "files" on files/{{path}}.txt [] []      
     12/17 [===================>--------]  70%[2019-11-08 10:55:43] app.NOTICE:   Writer twig  on reports/markers.html [] []                        
     13/17 [=====================>------]  76%[2019-11-08 10:55:43] app.NOTICE:   Writer twig  on reports/errors.html [] []                         
     14/17 [=======================>----]  82%[2019-11-08 10:55:43] app.NOTICE:   Writer twig  on reports/deprecated.html [] []                     
     15/17 [========================>---]  88%[2019-11-08 10:55:43] app.NOTICE:   Writer twig  on graphs/class.html [] []                           
     16/17 [==========================>-]  94%[2019-11-08 10:55:43] app.NOTICE:   Writer Graph  on graphs/classes.svg [] []                         
     17/17 [============================] 100%[2019-11-08 10:55:44] app.NOTICE: Finished transformation process [] []                               
                                                                                                                                                    
    All done!                                                                                                                                       
                                                                                                                                                    
    Exit code is 0                                                                                                                                  
    

    Expected Behavior

    Docs being generated....

    Actual Behavior

    Some files are generated and put in the /build/docs/ directory. image

    Note: not the build/docs/output or build/docs/structure directories which are referenced in the config file...

    When I open the build/docs/index.html file in a browser, I get: image

    Your environment

    • Version used: 3.0.0-alpha.4-6-gc5f3834c
    • Phar downloaded from GH releases page
    • PHP 7.1.30
    • Windows 7
    • Project is not (yet) available online.
    bug 
    opened by jrfnl 96
  • Empty Documentation Being Generated

    Empty Documentation Being Generated

    Running 3.0.0-alpha and I'm getting just an empty set of docs. No warnings. No errors. No exceptions. Nothing. Just an empty template. Zilch. Like so:

    image

    Expected Behavior

    Ideally, it should generate some documentation from my code like the previous version 🙃

    Actual Behavior

    Just an empty template

    Steps to Reproduce the Problem

    1. Composer install 3.0.0-alpha1
    2. Run phpdoc

    Your environment

    Include as many relevant details about the environment you experienced the bug in and how to reproduce it. Since many issue might only occur on a specific code base it would be very helpfull if you link to your project or add any code that is involved in to the issue.

    • Version used: 3.0.0-alpha1
    • Install method: Composer
    • php version: 7.1
    • Operating system and version (e.g. Ubuntu 16.04, Windows 7): Windows 10
    • Link to your project: https://github.com/robertmain/codeigniter-starter
    bug 
    opened by robertmain 54
  • WIP: Adds partials to templates

    WIP: Adds partials to templates

    Related to #974

    Can be invoked by:

    <?xml version="1.0" encoding="UTF-8" ?>
    <phpdocumentor>
        <partials>
            <partial name="introduction" href="docs/introduction.md"></partial>
            <partial name="anotherIntroduction" type="markdown">
                <content><![CDATA[
                    # Another introduction
                    ...
                ]]></content>
            </partial>
        </partials>
        <translator>
            <locale>de</locale>
        </translator>
    </phpdocumentor>
    

    Paths are always relative to the project.

    opened by siad007 43
  • Do not deprecate @category

    Do not deprecate @category

    I would like to encourage you to keep the @category tag and use it inside the default template.

    I use the @package Project \ Sub-section already, but having at least a second categorization like @category Controller, @category Model or @category Import seems to be an excellent idea to group items by source.

    With only the @package tag this would not be possible.

    research 
    opened by tobiastom 40
  • Docs of parent class are not overridden

    Docs of parent class are not overridden

    I posted a question on Stackoverflow, and they suggested that I'd report it here as a bug. Link: http://stackoverflow.com/questions/18411454/phpdocumentor-does-not-override-docs-of-parent-class

    bug template 
    opened by sebamarynissen 37
  • Transform doesn't happen on Windows.

    Transform doesn't happen on Windows.

    PHPDocumentor v2.0.0a12 on Windows, PHAR version:

    W:\src\frmwrk>php ..\phpdocumentor.phar
    
    Initializing parser and collecting files .. OK
    Parsing files
    Parsing W:\src\frmwrk\index.php
      No DocBlock was found for property $smarty
      No DocBlock was found for property $flash_data
      No DocBlock was found for property $config
      No DocBlock was found for property $shorthand
      No DocBlock was found for property $libs
      No DocBlock was found for property $action
      No DocBlock was found for method __construct()
      Argument $asset is missing from the Docblock of get_asset()
      Argument $class is missing from the Docblock of add_message()
      Argument $message is missing from the Docblock of add_message()
      Argument $key is missing from the Docblock of get_flashdata()
      Argument $key is missing from the Docblock of add_flashdata()
      Argument $value is missing from the Docblock of add_flashdata()
    Storing structure.xml in "W:\src\frmwrk\doc\output\structure.xml" .. OK
    Initializing transformer .. OK
    Processing behaviours .. OK
    Executing transformations
    PHP Warning:  XSLTProcessor::transformToUri(): No stylesheet associated to this
    object in phar://W:/src/phpdocumentor.phar/src/phpDocumentor/Plugin/Core/Transformer/Writer/Xsl.php on line 116
    
    Warning: XSLTProcessor::transformToUri(): No stylesheet associated to this object in phar://W:/src/phpdocumentor.phar/src/phpDocumentor/Plugin/Core/Transformer/
    Writer/Xsl.php on line 116
    PHP Warning:  XSLTProcessor::transformToUri(): No stylesheet associated to this
    object in phar://W:/src/phpdocumentor.phar/src/phpDocumentor/Plugin/Core/Transformer/Writer/Xsl.php on line 104
    
    Warning: XSLTProcessor::transformToUri(): No stylesheet associated to this object in phar://W:/src/phpdocumentor.phar/src/phpDocumentor/Plugin/Core/Transformer/
    Writer/Xsl.php on line 104
    PHP Warning:  XSLTProcessor::transformToUri(): No stylesheet associated to this
    object in phar://W:/src/phpdocumentor.phar/src/phpDocumentor/Plugin/Core/Transformer/Writer/Xsl.php on line 104
    
    Warning: XSLTProcessor::transformToUri(): No stylesheet associated to this object in phar://W:/src/phpdocumentor.phar/src/phpDocumentor/Plugin/Core/Transformer/
    Writer/Xsl.php on line 104
    PHP Warning:  XSLTProcessor::transformToUri(): No stylesheet associated to this
    object in phar://W:/src/phpdocumentor.phar/src/phpDocumentor/Plugin/Core/Transformer/Writer/Xsl.php on line 104
    
    [truncated]
    

    This only happens with PHAR version -- appears to be a problem with PHAR?

    bug 
    opened by indrora 37
  • There needs to be a way to indicate the containing class in function docblocks without explicitly entering the name of the class

    There needs to be a way to indicate the containing class in function docblocks without explicitly entering the name of the class

    For example when implementing a singleton:

    class Singly {
        /**
         * Get the instance
         * @return Singly
         */
        public static function getInstance() {
            // Some code here...
        }
    }
    

    The @return Singly could instead be @return this, @return static or @return self or something like that.

    This would be most useful for traits, which I know you are not focused on right now, but also useful in general: What if you have a function which returns $this and extend the implementing class? Then the function really returns an instance of the extending class, and this would be really useful to be able to determine for IDE auto completion.

    enhancement 
    opened by Ibmurai 37
  • Argument $[varname] is missing from the Docblock of [methodname]

    Argument $[varname] is missing from the Docblock of [methodname]

    I get the following errors with 2.8.0:

    Parsing /var/www/app/controllers/Controller.php
      Only one @package tag is allowed
      Argument $action is missing from the Docblock of __construct
      Argument $model_loc is missing from the Docblock of requireModel
    

    The @package bug is already well documented here.

    Here is the source code of the php file I am using for reference.

    It seems that phpdoc doesn't "see" the first @param tag in a DocBlock. For example, let's take a look at my constructor:

    /**
     * Constructor simply initializes the class properties.
     * 
     * @param string $action The name of the action to be executed.
     * @param array $get_vars Array of urlencoded GET variables (usually just the $_GET array).
     */
    public function __construct($action, $get_vars)
    

    Phpdoc has no complaints about the $get_vars @param tag, yet the $action @param tag (the first @param tag) is invisible to it.

    I downgraded phpdoc to 2.7.0 and it did not have this problem. This is strictly a 2.8.0 issue.

    bug 
    opened by Nikita240 35
  • Invalid tag_line detected: @param string $idx

    Invalid tag_line detected: @param string $idx

    Hi,

    This is a very simple to reproduce bug: just create a DocBlock with a parameter and an accentued char at the end (here it's the "à":

    /** 
     * Short comment.
     *
     * @param string  $idx Index de la valeur à
     *   some other text
     *
     * @return void
     */
    

    Try to compile, you get an error:

    2012-05-15T11:39:48+02:00 CRIT (2): Invalid tag_line detected: @param string  $idx Index de la valeur à
    

    Now just move the "à" to the next line (= no "spécial char" in the param line):

    /** 
     * Short comment.
     *
     * @param string  $idx Index de la valeur
     *   à some other text
     *
     * @return void
     */
    

    You'll get no error!

    bug 
    opened by olivierpons 29
  • Running phpDocumentor.phar always result in 'No parsable files found'

    Running phpDocumentor.phar always result in 'No parsable files found'

    The user Burnsy reported on IRC that when running phpDocumentor.phar on Windows 8 he always gets the error 'no parsable files found', even when using the --help option

    http://paste2.org/YIh6CPGJ

    bug 
    opened by mvriel 27
  • Fatal error getAttribute() over non-object

    Fatal error getAttribute() over non-object

    Hi sorry about the verbose thing. This is the error:

    Fatal error: Call to a member function getAttribute() on a non-object in /usr/local/lib/php/DocBlox/src/DocBlox/Plugin/Core/Transformer/Writer/Xsl.php on line 63
    

    If i execute it again, i get another error

    /usr/local/lib/php/DocBlox/src/DocBlox/Parser.php:132
    

    Here's the dump of get_defined_vars() at /usr/local/lib/php/DocBlox/src/DocBlox/Plugin/Core/Transformer/Writer/Xsl.php on line 63. Please let me know what else can i send to you.

    Array
    (
        [structure] => DOMDocument Object
            (
            )
    
        [transformation] => DocBlox_Transformer_Transformation Object
            (
                [query:protected] => 
                [writer:protected] => DocBlox_Plugin_Core_Transformer_Writer_Xsl Object
                    (
                        [xsl_variables:protected] => Array
                            (
                            )
    
                    )
    
                [source:protected] => templates/new_black/index.xsl
                [artifact:protected] => index.html
                [parameters:protected] => Array
                    (
                    )
    
                [transformer:protected] => DocBlox_Transformer Object
                    (
                        [target:protected] => /tmp/docblox
                        [source:protected] => DOMDocument Object
                            (
                            )
    
                        [templates:protected] => Array
                            (
                                [new_black] => DocBlox_Transformer_Template Object
                                    (
                                        [name:protected] => new_black
                                        [author:protected] => SimpleXMLElement Object
                                            (
                                                [0] => Mike van Riel
                                            )
    
                                        [version:protected] => SimpleXMLElement Object
                                            (
                                                [0] => 1.0.1
                                            )
    
                                        [copyright:protected] => SimpleXMLElement Object
                                            (
                                                [0] => Mike van Riel / Naenius 2011
                                            )
    
                                        [path:protected] => /usr/local/lib/php/DocBlox/data/templates/new_black
                                        [transformations:protected] => Array
                                            (
                                                [0] => DocBlox_Transformer_Transformation Object
                                                    (
                                                        [query:protected] => copy
                                                        [writer:protected] => DocBlox_Plugin_Core_Transformer_Writer_FileIo Object
                                                            (
                                                                [transformation:protected] => 
                                                                [structure:protected] => 
                                                            )
    
                                                        [source:protected] => ajax_search.php
                                                        [artifact:protected] => /tmp/docblox/ajax_search.php
                                                        [parameters:protected] => Array
                                                            (
                                                            )
    
                                                        [transformer:protected] => DocBlox_Transformer Object
     *RECURSION*
                                                    )
    
                                                [1] => DocBlox_Transformer_Transformation Object
                                                    (
                                                        [query:protected] => copy
                                                        [writer:protected] => DocBlox_Plugin_Core_Transformer_Writer_FileIo Object
                                                            (
                                                                [transformation:protected] => 
                                                                [structure:protected] => 
                                                            )
    
                                                        [source:protected] => ../data/js
                                                        [artifact:protected] => /tmp/docblox/js
                                                        [parameters:protected] => Array
                                                            (
                                                            )
    
                                                        [transformer:protected] => DocBlox_Transformer Object
     *RECURSION*
                                                    )
    
                                                [2] => DocBlox_Transformer_Transformation Object
                                                    (
                                                        [query:protected] => copy
                                                        [writer:protected] => DocBlox_Plugin_Core_Transformer_Writer_FileIo Object
                                                            (
                                                                [transformation:protected] => 
                                                                [structure:protected] => 
                                                            )
    
                                                        [source:protected] => ../data/syntax_highlighter
                                                        [artifact:protected] => /tmp/docblox/syntax_highlighter
                                                        [parameters:protected] => Array
                                                            (
                                                            )
    
                                                        [transformer:protected] => DocBlox_Transformer Object
     *RECURSION*
                                                    )
    
                                                [3] => DocBlox_Transformer_Transformation Object
                                                    (
                                                        [query:protected] => copy
                                                        [writer:protected] => DocBlox_Plugin_Core_Transformer_Writer_FileIo Object
                                                            (
                                                                [transformation:protected] => 
                                                                [structure:protected] => 
                                                            )
    
                                                        [source:protected] => ../data/images
                                                        [artifact:protected] => /tmp/docblox/images
                                                        [parameters:protected] => Array
                                                            (
                                                            )
    
                                                        [transformer:protected] => DocBlox_Transformer Object
     *RECURSION*
                                                    )
    
                                                [4] => DocBlox_Transformer_Transformation Object
                                                    (
                                                        [query:protected] => copy
                                                        [writer:protected] => DocBlox_Plugin_Core_Transformer_Writer_FileIo Object
                                                            (
                                                                [transformation:protected] => 
                                                                [structure:protected] => 
                                                            )
    
                                                        [source:protected] => templates/new_black/css
                                                        [artifact:protected] => /tmp/docblox/css
                                                        [parameters:protected] => Array
                                                            (
                                                            )
    
                                                        [transformer:protected] => DocBlox_Transformer Object
     *RECURSION*
                                                    )
    
                                                [5] => DocBlox_Transformer_Transformation Object
                                                    (
                                                        [query:protected] => copy
                                                        [writer:protected] => DocBlox_Plugin_Core_Transformer_Writer_FileIo Object
                                                            (
                                                                [transformation:protected] => 
                                                                [structure:protected] => 
                                                            )
    
                                                        [source:protected] => templates/new_black/images
                                                        [artifact:protected] => /tmp/docblox/images
                                                        [parameters:protected] => Array
                                                            (
                                                            )
    
                                                        [transformer:protected] => DocBlox_Transformer Object
     *RECURSION*
                                                    )
    
                                                [6] => DocBlox_Transformer_Transformation Object
                                                    (
                                                        [query:protected] => 
                                                        [writer:protected] => DocBlox_Plugin_Core_Transformer_Writer_Search Object
                                                            (
                                                            )
    
                                                        [source:protected] => 
                                                        [artifact:protected] => .
                                                        [parameters:protected] => Array
                                                            (
                                                            )
    
                                                        [transformer:protected] => DocBlox_Transformer Object
     *RECURSION*
                                                    )
    
                                                [7] => DocBlox_Transformer_Transformation Object
     *RECURSION*
                                                [8] => DocBlox_Transformer_Transformation Object
                                                    (
                                                        [query:protected] => 
                                                        [writer:protected] => DocBlox_Plugin_Core_Transformer_Writer_Xsl Object
                                                            (
                                                                [xsl_variables:protected] => Array
                                                                    (
                                                                    )
    
                                                            )
    
                                                        [source:protected] => templates/new_black/content.xsl
                                                        [artifact:protected] => content.html
                                                        [parameters:protected] => Array
                                                            (
                                                            )
    
                                                        [transformer:protected] => DocBlox_Transformer Object
     *RECURSION*
                                                    )
    
                                                [9] => DocBlox_Transformer_Transformation Object
                                                    (
                                                        [query:protected] => 
                                                        [writer:protected] => DocBlox_Plugin_Core_Transformer_Writer_Xsl Object
                                                            (
                                                                [xsl_variables:protected] => Array
                                                                    (
                                                                    )
    
                                                            )
    
                                                        [source:protected] => templates/new_black/sidebar.xsl
                                                        [artifact:protected] => nav.html
                                                        [parameters:protected] => Array
                                                            (
                                                            )
    
                                                        [transformer:protected] => DocBlox_Transformer Object
     *RECURSION*
                                                    )
    
                                                [10] => DocBlox_Transformer_Transformation Object
                                                    (
                                                        [query:protected] => 
                                                        [writer:protected] => DocBlox_Plugin_Core_Transformer_Writer_Xsl Object
                                                            (
                                                                [xsl_variables:protected] => Array
                                                                    (
                                                                    )
    
                                                            )
    
                                                        [source:protected] => templates/new_black/graph_class.xsl
                                                        [artifact:protected] => graph.html
                                                        [parameters:protected] => Array
                                                            (
                                                            )
    
                                                        [transformer:protected] => DocBlox_Transformer Object
     *RECURSION*
                                                    )
    
                                                [11] => DocBlox_Transformer_Transformation Object
                                                    (
                                                        [query:protected] => /project/file/@path
                                                        [writer:protected] => DocBlox_Plugin_Core_Transformer_Writer_Xsl Object
                                                            (
                                                                [xsl_variables:protected] => Array
                                                                    (
                                                                    )
    
                                                            )
    
                                                        [source:protected] => templates/new_black/api-doc.xsl
                                                        [artifact:protected] => {$path}
                                                        [parameters:protected] => Array
                                                            (
                                                            )
    
                                                        [transformer:protected] => DocBlox_Transformer Object
     *RECURSION*
                                                    )
    
                                                [12] => DocBlox_Transformer_Transformation Object
                                                    (
                                                        [query:protected] => 
                                                        [writer:protected] => DocBlox_Plugin_Core_Transformer_Writer_Xsl Object
                                                            (
                                                                [xsl_variables:protected] => Array
                                                                    (
                                                                    )
    
                                                            )
    
                                                        [source:protected] => templates/new_black/report_markers.xsl
                                                        [artifact:protected] => report_markers.html
                                                        [parameters:protected] => Array
                                                            (
                                                            )
    
                                                        [transformer:protected] => DocBlox_Transformer Object
     *RECURSION*
                                                    )
    
                                                [13] => DocBlox_Transformer_Transformation Object
                                                    (
                                                        [query:protected] => 
                                                        [writer:protected] => DocBlox_Plugin_Core_Transformer_Writer_Xsl Object
                                                            (
                                                                [xsl_variables:protected] => Array
                                                                    (
                                                                    )
    
                                                            )
    
                                                        [source:protected] => templates/new_black/report_parse_markers.xsl
                                                        [artifact:protected] => report_parse_markers.html
                                                        [parameters:protected] => Array
                                                            (
                                                            )
    
                                                        [transformer:protected] => DocBlox_Transformer Object
     *RECURSION*
                                                    )
    
                                                [14] => DocBlox_Transformer_Transformation Object
                                                    (
                                                        [query:protected] => 
                                                        [writer:protected] => DocBlox_Plugin_Core_Transformer_Writer_Xsl Object
                                                            (
                                                                [xsl_variables:protected] => Array
                                                                    (
                                                                    )
    
                                                            )
    
                                                        [source:protected] => templates/new_black/report_deprecated.xsl
                                                        [artifact:protected] => report_deprecated.html
                                                        [parameters:protected] => Array
                                                            (
                                                            )
    
                                                        [transformer:protected] => DocBlox_Transformer Object
     *RECURSION*
                                                    )
    
                                                [15] => DocBlox_Transformer_Transformation Object
                                                    (
                                                        [query:protected] => 
                                                        [writer:protected] => DocBlox_Plugin_Core_Transformer_Writer_Sourcecode Object
                                                            (
                                                            )
    
                                                        [source:protected] => 
                                                        [artifact:protected] => 
                                                        [parameters:protected] => Array
                                                            (
                                                            )
    
                                                        [transformer:protected] => DocBlox_Transformer Object
     *RECURSION*
                                                    )
    
                                                [16] => DocBlox_Transformer_Transformation Object
                                                    (
                                                        [query:protected] => 
                                                        [writer:protected] => DocBlox_Plugin_Core_Transformer_Writer_Graph Object
                                                            (
                                                                [node_font:protected] => Courier
                                                            )
    
                                                        [source:protected] => Class
                                                        [artifact:protected] => classes.svg
                                                        [parameters:protected] => Array
                                                            (
                                                            )
    
                                                        [transformer:protected] => DocBlox_Transformer Object
     *RECURSION*
                                                    )
    
                                            )
    
                                    )
    
                            )
    
                        [templates_path:protected] => /usr/local/lib/php/DocBlox/data/templates
                        [behaviours:protected] => 
                        [transformations:protected] => Array
                            (
                            )
    
                        [parsePrivate:protected] => 
                        [external_class_docs:protected] => Array
                            (
                            )
    
                    )
    
            )
    
        [artifact] => /tmp/docblox/index.html
        [xsl] => DOMDocument Object
            (
            )
    
        [proc] => XSLTProcessor Object
            (
            )
    
    )
    
    bug 
    opened by lgandras 24
  • Fix OutputHello Example Param Wording

    Fix OutputHello Example Param Wording

    Just a tiny one: fixed wording of outputHello example param description... it suggested that when $quiet was true it would echo 'Hello World' when in actual fact, that's the opposite of what the example code does.

    opened by CraicOverflow89 0
  • Aggregated types are not rendered correctly in some cases when using route()

    Aggregated types are not rendered correctly in some cases when using route()

    The problem occurs when wanting to render methods that have args/return types which contain a class inside an aggregated type which in turn are inside yet another type (like an array), Example:

        /**
         * @param array<string|SomeOtherClass> $p
         */
        public function doSomething3($p) {}
    

    Expected behavior

    That class references when using route('class:short') are rendered as a link to the class.

    Actual behavior

    A class inside aggregated types which in turn are inside yet another type (like an array), are rendered plain as text: image

    Steps to reproduce the problem

    1. Create the project as mentioned below
    2. Run phpDocumentor.phar run -d ./test-src -t ./out --template="test-tpl"
    3. Optionally start a webserver to serve the docs (i.e. ruby -run -ehttpd . -p8080)
    4. Open classes/MyProject-MyKlazz.html (relative to the output folder / webserver)

    Your environment

    • Version used: [email protected]
    • Install method: git clone & composer install
    • PHP version: 8.1.10
    • Operating system and version: Arch linux
    • Link to your project: example.zip

    Code

    src/MyKlazz.php
    <?php
    namespace MyProject;
    
    class MyKlazz {
        /**
         * @param SomeOtherClass $p
         */
        public function doSomething1($p) {}
    
        /**
         * @param array<SomeOtherClass> $p
         */
        public function doSomething2($p) {}
    
        /**
         * @param array<string|SomeOtherClass> $p
         */
        public function doSomething3($p) {}
    }
    
    src/SomeOtherClass.php
    <?php
    namespace MyProject;
    
    class SomeOtherClass {
    
    }
    
    test-tpl/template.xml
    <?xml version="1.0" encoding="utf-8"?>
    <template>
        <name>test-tpl</name>
        <author>Mai Lapyst</author>
        <version>0.1.0</version>
        <copyright></copyright>
        <description></description>
        <parameters></parameters>
        <transformations>
            <transformation writer="twig" query="indexes.classes" source="class.html.twig"/>
        </transformations>
    </template>
    
    test-tpl/class.html.twig
    {% macro renderType(type) %}
        {{ not type ? "mixed" : type|route('class:short')|join('|')|raw }}
    {% endmacro %}
    
    {% macro renderArgs(args) %}
        {% for arg in args %}
            {% if not loop.first %}, {% endif %}
            <span>{{ _self.renderType(arg.type) }} </span>
            <span>{{ arg.name }}</span>
        {% endfor %}
    {% endmacro %}
    
    <!DOCTYPE html>
    <html>
        <head></head>
        <body>
            <ul>
                {% for method in node.methods %}
                    <li>{{ method.name }}({{ _self.renderArgs(method.arguments) }})</li>
                {% endfor %}
            </ul>
        </body>
    </html>
    
    opened by Mai-Lapyst 0
  • Using route on array types is not able to return their short style version

    Using route on array types is not able to return their short style version

    Feature request

    When currently wanting to output a type with links to types, the following snippet is used:

    {{ type|route('class:short') }}
    

    instead of the __toString() method of the type's class.

    When now using a type like string[], the type's class __toString() method returns it as intended: string[] but when used via the route() approach above, the following is generated: array<string|int, string>.

    For "simple" arrays, like string[] or even SomeType[] the longer version could be a bit to much.

    Maybe only arrays that have another keytype than the default keytype / not null should use the longer version? Bc when you try to dump() the type it prints this:

    object(phpDocumentor\Reflection\Types\Array_)#68986 (3) {
      ["valueType":protected]=>
      object(phpDocumentor\Reflection\Types\String_)#68987 (0) {
      }
      ["keyType":protected]=>
      NULL
      ["defaultKeyType":protected]=>
      object(phpDocumentor\Reflection\Types\Compound)#68988 (2) {
        ["types":"phpDocumentor\Reflection\Types\AggregatedType":private]=>
        array(2) {
          [0]=>
          object(phpDocumentor\Reflection\Types\String_)#68989 (0) {
          }
          [1]=>
          object(phpDocumentor\Reflection\Types\Integer)#68990 (0) {
          }
        }
        ["token":"phpDocumentor\Reflection\Types\AggregatedType":private]=>
        string(1) "|"
      }
    }
    
    opened by Mai-Lapyst 0
  • Bump cypress from 10.3.0 to 10.8.0

    Bump cypress from 10.3.0 to 10.8.0

    Bumps cypress from 10.3.0 to 10.8.0.

    Release notes

    Sourced from cypress's releases.

    v10.8.0

    Changelog: https://docs.cypress.io/guides/references/changelog#10-8-0

    v10.7.0

    Changelog: https://docs.cypress.io/guides/references/changelog#10-7-0

    v10.6.0

    Changelog: https://docs.cypress.io/guides/references/changelog#10-6-0

    v10.5.0

    Changelog: https://docs.cypress.io/guides/references/changelog#10-5-0

    v10.4.0

    Changelog: https://docs.cypress.io/guides/references/changelog#10-4-0

    v10.3.1

    Changelog: https://docs.cypress.io/guides/references/changelog#10-3-1

    Commits
    • bc804f8 chore: bump to 10.8.0 [skip ci] (#23816)
    • 864ab8e chore: merge master into develop for release (#23803)
    • 75a9f96 chore: destroy source maps consumers when spec finishes (#23708)
    • 25a47aa fix: only adjust autoscrolling in interactive mode (#23053)
    • 566a1a2 feat: gate WebKit behind experimentalWebKitSupport in prod (#23711)
    • 96b03ab fix(svelte): default mount log to true (#23771)
    • f07a49b chore: updated styling for configuration files (#23781)
    • 405e7f7 chore(webkit): update error stack parsing and related system tests (#23730)
    • 282e6c0 fix: login/utm param bug fixes and test coverage (#23787)
    • 7c6c231 fix: force forward slash to backslash on Windows in spec search input (#23776)
    • Additional commits viewable in compare view

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    dependencies javascript 
    opened by dependabot[bot] 0
  • Bump symfony/string from 5.4.10 to 5.4.12

    Bump symfony/string from 5.4.10 to 5.4.12

    Bumps symfony/string from 5.4.10 to 5.4.12.

    Release notes

    Sourced from symfony/string's releases.

    v5.4.12

    Changelog (https://github.com/symfony/string/compare/v5.4.11...v5.4.12)

    • bug #47185 Fix snake conversion (simPod)

    v5.4.11

    Changelog (https://github.com/symfony/string/compare/v5.4.10...v5.4.11)

    • bug #47010 Fix width method in AbstractUnicodeString (TBoileau)
    Commits
    • 2fc515e fix AsciiSlugger tests if transliterator_transliterate() isn't present
    • bfe8f8f [String] Add tests for AsciiSlugger
    • ef8914f [String] Fix snake conversion
    • 0145442 Merge branch '4.4' into 5.4
    • 5eb661e [String] Fix width method in AbstractUnicodeString
    • 9091cb2 Fix CS
    • 2deaa79 Merge branch '4.4' into 5.4
    • See full diff in compare view

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    dependencies php 
    opened by dependabot[bot] 0
  • Bump symfony/http-foundation from 5.4.10 to 5.4.12

    Bump symfony/http-foundation from 5.4.10 to 5.4.12

    Bumps symfony/http-foundation from 5.4.10 to 5.4.12.

    Release notes

    Sourced from symfony/http-foundation's releases.

    v5.4.12

    Changelog (https://github.com/symfony/http-foundation/compare/v5.4.11...v5.4.12)

    • bug #47283 Prevent accepted rate limits with no remaining token to be preferred over denied ones (MatTheCat)
    • bug #47273 Do not send Set-Cookie header twice for deleted session cookie (X-Coder264)
    • bug #47130 Fix invalid ID not regenerated with native PHP file sessions (BrokenSourceCode)

    v5.4.11

    Changelog (https://github.com/symfony/http-foundation/compare/v5.4.10...v5.4.11)

    • bug #46931 Flush backend output buffer after closing. (bradjones1)
    • bug #42033 Fix deleteFileAfterSend on client abortion (nerg4l)
    • bug #46790 Prevent PHP Warning: Session ID is too long or contains illegal characters (BrokenSourceCode)
    • bug #46808 Fix TypeError on null $_SESSION in NativeSessionStorage::save() (chalasr)
    Commits
    • f4bfe96 [HttpFoundation] Prevent accepted rate limits with no remaining token to be p...
    • 79e60f1 Merge branch '4.4' into 5.4
    • b2f2e3c [HttpFoundation] Fix tests on PHP 8.2 (bis)
    • 11a819b Fix merge
    • ba6c99f [HttpFoundation] Fix deps
    • 88a9868 Merge branch '4.4' into 5.4
    • 32589ae [HttpFoundation] Fix tests on PHP 8.2
    • 416c21f Do not send deleted session cookie twice in the response
    • 46c6ab3 Merge branch '4.4' into 5.4
    • 2fa11a0 [HttpFoundation] Fix invalid ID not regenerated with native PHP file sessions
    • Additional commits viewable in compare view

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    dependencies php 
    opened by dependabot[bot] 0
Releases(v3.3.1)
  • v3.3.1(Mar 25, 2022)

    Fixed

    • Refactor references out of the parser by @jaapio in https://github.com/phpDocumentor/phpDocumentor/pull/3135
    • Add missing return type from method tags by @villfa in https://github.com/phpDocumentor/phpDocumentor/pull/3178
    • Add Composer configuration allow-plugins by @villfa in https://github.com/phpDocumentor/phpDocumentor/pull/3185
    • Update function signature to show return by reference by @villfa in https://github.com/phpDocumentor/phpDocumentor/pull/3187
    • Add missing base url rendering by @ILL-DIE-TRYING in https://github.com/phpDocumentor/phpDocumentor/pull/3189

    CI

    • GH Actions: version update for various predefined actions by @jrfnl in https://github.com/phpDocumentor/phpDocumentor/pull/3161

    New Contributors

    • @villfa made their first contribution in https://github.com/phpDocumentor/phpDocumentor/pull/3178

    Full Changelog: https://github.com/phpDocumentor/phpDocumentor/compare/v3.3.0...v3.3.1

    Source code(tar.gz)
    Source code(zip)
    phpDocumentor.phar(22.01 MB)
    phpDocumentor.phar.asc(327 bytes)
  • v3.3.1-rc(Feb 15, 2022)

  • v3.3.0(Dec 28, 2021)

  • v3.2.1(Dec 28, 2021)

  • v3.2.0(Dec 28, 2021)

    This release has two main focus points. We invested a lot of time to improve the guides feature, which is still under heavy development, and php 8.1 support.

    php version drops.

    Last release supporting php 7.2 and 7.3

    Guides

    • Render external uml diagrams. you can now reference to external puml files to render a diagram in your guides.
    • Improved memory usage
    • Improved ReStructuredText support.

    php 8.1

    phpDocumentor has now support for php 8.1 elements. Because of some external dependencies we were not able yet to support phpDocumentor running on php 8.1.

    • Enum support
    • read only properties
    • return type never
    • final constants

    New Contributors

    • @rotdrop made their first contribution in https://github.com/phpDocumentor/phpDocumentor/pull/3010
    • @nexxai made their first contribution in https://github.com/phpDocumentor/phpDocumentor/pull/3026
    • @CyberJack made their first contribution in https://github.com/phpDocumentor/phpDocumentor/pull/3052

    Full Changelog: https://github.com/phpDocumentor/phpDocumentor/compare/v3.1.2...v3.2.0

    Source code(tar.gz)
    Source code(zip)
    phpDocumentor.phar(21.26 MB)
    phpDocumentor.phar.asc(327 bytes)
  • v3.1.1(Aug 20, 2021)

    Fixed

    • Add workaround for phar distribution and plantuml, thanks to Jaapio
    • XML template invalid XML due to missing marker.type, #2986, thanks to Jaapio
    • Class's traits not showing up in docs, #2984, thanks to Jaapio
    • Files with forced global namespace fail with "" is not a valid Fqsen, #2967, thanks to Jaapio
    • XML output missing method tags, #2965, thanks to Jaapio

    CI

    • Updated code style checks, thanks to jrfnl
    Source code(tar.gz)
    Source code(zip)
    phpDocumentor.phar(19.63 MB)
    phpDocumentor.phar.asc(327 bytes)
  • v3.1.0(Jul 7, 2021)

    After the release of v3.0.0, which was a huge step forward for phpDocumentor, we started focussing on a new big step. The 3.1 release is not complete as we had in mind, but it will provide you with some new stuff which will improve your documentation.

    PHP8 support

    This version of phpDocumentor is fully compatible with PHP8. To support all additional features in PHP8 we had to redesign part of our internal reflection library, which is now capable to read and document constructor promoted properties, mixed, static and union type hints. We have rewritten some internals in phpDocumentor to fix compatibility issues between the supported PHP versions and our dependencies which are not always supporting the range of PHP versions supported by phpDocumentor.

    Bug fixes & Improvements

    Thanks to all contributors who reported their issues with phpDocumentor v3.0 we could improve. So please keep reporting your bugs and missing features so we can continue this path. Please consult the change log for the full list of fixed issues.

    Guides (Unstable)

    In v3 we started working on handwritten documentation. In this version we continued that feature, by extending it with Admonitions, diagrams and images. We cleaned up a lot of the parser code to make the guides parsing fit better in our internal workflow with the final result where your api and handwritten docs are fully integrated to provide the best possible documentation for your code consumers.

    Guides are still under heavy development, please consider them unstable as the api will change and we will extend the number of features in future versions of phpDocumentor.

    Documentation improvements

    In this release, several documentation sections are added. We continue to improve our own documentation while we are improving phpDocumentor itself to render our own docs. Our docs are a good show-case of what phpDocumentor is currently capable to do.

    Thank you!

    Thanks for using phpDocumentor. And please keep reporting your issues.

    Source code(tar.gz)
    Source code(zip)
    phpDocumentor.phar(19.53 MB)
    phpDocumentor.phar.asc(455 bytes)
  • v3.0.0(Oct 27, 2020)

    phpDocumentor v3.0.0 is here

    After years of development, we are finally able to announce the official release of phpDocumentor version 3. This release has large changes under the hood. We improved the way phpDocumentor detects types in your DocBlocks, allow all kinds of modern type notations, and we speed up the reflection of your code even more. A full parse of a framework with the size of Symfony is completed within a few seconds now.

    A brief overview of the largest changes since v2 below.

    A brand new default template!

    We revised the way we are supporting templates and template customization. phpDocumentor was shipped with a large set of templates. Which was a burden to maintain. It was hard to customize the existing templates which forced our users to copy templates for even the smallest style changes. We have been redesigning our template system, which resulted in a brand new template called: Default.

    If you want to change the colours to match your project's own colour scheme, you just need to set a number of CSS variables. If you want to do more complex changes, you can simply overwrite parts of the template. Our new "Default" template is built with components in mind, using small twig template files. These allow you to change just that what you need to change, without having to create a whole template yourself.

    Previously, XML templates seemed to be a nice way to write templates but the user experience was not what we expected from it. XSLT was too complex to write and with the improved template, we didn't feel the need for an XML based template anymore. We moved the existing XML template to a new twig based rendered XML output to keep a backward compatibility layer for tools consuming the XML structure.

    Full-text Search

    The new Default template comes with a brand new full-text search engine. For your convenience, we added support for full-text search that works even when you are offline. This allows you to search for the elements you are looking for, without browsing the documentation for hours.

    Support for native type-hints

    With the introduction of scalar type-hints, DocBlocks are not required for all function arguments anymore. PhpDocumentor will now read all native type-hints from your code. This allows you to focus on what is important, your code, and write proper descriptions. There will always be situations where you want to give more detailed type-hints for your function arguments, phpDocumentor will prioritize DocBlock type-hints over native types so you have total control.

    Support for Generics

    With more and more static analysis features being introduced in PHP; DocBlocks are changing. phpDocumentor is now able to understand generics and generic-like array notations; this allows you to use phpDocumentor with every modern codebase and gives you the advantage of clickable types in your documentation.

    New configuration structure

    To prepare for the future, phpDocumentor comes with a new configuration structure. We kept backward compatible support for the v2 format, so from a user point of view, there is nothing to worry about until you want to start using some of our future features. The XSD provided in this repository will help you to write the new configuration.

    Improved description rendering

    The new template is using a new description filter to process all inline tags in a description. This allows us to better style the templates. Inline links are now rendered as real links and references to other elements are also displayed as actual links. The inline @internal tags are now completely hidden when needed, and descriptions are now fully compatible with PSR-5.

    Breaking changes

    phpDocumentor is a complex application and we do have a number of backward compatibility breaks. Below, we list the most important ones.

    Dropped plugin support

    phpDocumentor v2 was build using the micro-framework Cilex. With the introduction of Symfony Flex, the support of Cilex was stopped. So we switched to a full-blown Symfony-based application. This means that a lot of phpDocumentor's internals have been changed. Which also led to the drop of plugin support, for now. We are planning to re-introduce extensions in a better way in a future version.

    Dropped official Composer support

    phpDocumentor's libraries used to reflect your codebase are used in many projects. (i.e. Symfony, PHPUnit, Laravel, and phpstan; to name a few) Besides that, phpDocumentor is a complex application with a lot of dependencies. So it is very likely your project dependencies will conflict in some way with our dependencies. We will keep phpDocumentor available on Packagist but we will not provide any support using this installation method. phpDocumentor is shipped as a PHAR and Docker image, which contains everything you need to run phpDocumentor.

    What's next?

    It has taken us a few years to get to this point, but this is not the end by far. Our vision with phpDocumentor is to make it the one-stop go-to tool when it comes to all your documentation needs. You can expect to hear more about the following features:

    • Including hand-written documentation using Restructured Text (our own documentation is already using an alpha version of this feature!)
    • Support for multiple versions of your project
    • Rendering in-line UML diagrams using PlantUML
    • Rendering multiple codebases into one set of documentation, for example: when you have Components
    • Directly generating documentation sources from a git repository
    • And much more!

    We want to make sure that writing your documentation is as easy as can be.

    Source code(tar.gz)
    Source code(zip)
    phpDocumentor.phar(24.11 MB)
    phpDocumentor.phar.asc(455 bytes)
  • v3.0.0-rc(Feb 9, 2020)

    This first release candidate contains a number of bugfixes reported since the release of the first beta release. Thanks for all the reports we got! No new features are introduced in this release.

    Call for feedback

    PhpDocumentor is developed by a small team with limited time. Our current code base is not fully covered by automated tests. So we are not able to find all regressions or missing features. We would be very grateful when you provide us feedback on this beta release to improve the quality of phpDocumentor.

    Changelog

    The full changelog can be found in our changelog file

    Source code(tar.gz)
    Source code(zip)
    phpDocumentor.phar(20.62 MB)
    phpDocumentor.phar.asc(455 bytes)
  • v3.0.0-beta(Jan 31, 2020)

    The first beta release in the v3 release cycle. In the last few months, a lot of changes have been made to make the final result more exiting. This beta has a number of fixes regarding windows support.

    We extended the build pipeline using GitHub actions to improve the maintainability of the project. And removed a lot of outdated templates.

    The default template has been changed to a brand new default, which supports all-new features in phpDocumentor. Have a look at the demo of default and tell us what you think.

    Call for feedback

    PhpDocumentor is developed by a small team with limited time. Our current code base is not fully covered by automated tests. So we are not able to find all regressions or missing features. We would be very grateful when you provide us feedback on this beta release to improve the quality of phpDocumentor.

    Changelog

    The full changelog can be found in our changelog file

    Source code(tar.gz)
    Source code(zip)
    phpDocumentor.phar(20.64 MB)
    phpDocumentor.phar.asc(455 bytes)
  • v3.0.0-alpha.4(Aug 11, 2019)

    A fourth alpha release in v3 line. Containing a large number of bug fixes reported by alpha version users. Thanks a lot for this feedback. We do appreciate the feedback we've got.

    Call for feedback

    PhpDocumentor is developed by a small team with limited time. Our current code base is not fully covered by automated tests. So we are not able to find all regressions or missing features. We would be very grateful when you provide us feedback on this alpha release to improve the quality of phpDocumentor.

    Change log

    Added

    • Automated release process
    • Add php 7.3 to travis #2031
    • Make progress bars the default output

    Deprecated

    • Nothing

    Fixed

    • Fix(Dockerfile): configure: error: Please reinstall the libzip distribution #2099
    • Invalid tags will no longer prevent a whole file from being shown
    • Improved QA pipeline with better checks and more stable tests
    • Add bin folder for phpdoc to PATH in Docker image
    • Make inclusion of sourcecode configurable
    • Default visibility for v3 config should be all, and not just public
    • Fix bug where a variadic argument was not detected as such
    • Enable Variadic checks and output visibility level when method cannot be found
    • Added additional information when a method cannot be found
    • Rewrite logging to clean up output
    • Ensure that the test works on both Mac and Linux
    • Reintroduce the 'none' configuration file option
    • Fix regresion on phpdoc v2 config parsing
    • Fix for property tag
    • Fix author tag
    • Restore orginal pre v3 type system
    • Add missing ext-json
    • Deduplicate types
    • Improves autoloading detection
    • Fix crash with ini_set when opcache is enabled on CLI

    Removed

    • Remove Zend-cache dependency
    • Remove Zend-filter dependency
    • Remove plugin support
    • Remove deprecated symfony/lts package
    • Remove JMS Serializer and refactor infra packages
    • Delete Scrybe
    • Remove translation support from phpDocumentor
    • Remove php 7.0 support, v3 needs PHP 7.1 or higher

    Security

    • Nothing
    Source code(tar.gz)
    Source code(zip)
    phpDocumentor.phar(3.64 MB)
  • v3.0.0-alpha.3(Oct 20, 2018)

    A third alpha release in v3 line. Containing a large number of bug fixes reported by alpha version users. Thanks a lot for this feedback. We do appreciate the feedback we've got.

    Call for feedback

    PhpDocumentor is developed by a small team with limited time. Our current code base is not fully covered by automated tests. So we are not able to find all regressions or missing features. We would be very grateful when you provide us feedback on this alpha release to improve the quality of phpDocumentor.

    Change log

    Added

    • Version command
    • phpstan max level checks
    • composer require checker to ensure the stability of the install
    • Add support for configuration file phpdoc.xml.dist #1997

    Deprecated

    • Nothing

    Fixed

    • issue with path validation on windows #2011
    • Fix issue with default command. phpdocumentor should execute run by default again.
    • Fix issue with directory param. Path in now added to the conig so it will be parsed
    • Markers are detected again
    • Configurable twig cache
    • Add support for multi-type array notation #607
    • Fix template argument from command line
    • XML template processing works again
    • Issue with config loading from non default location

    Removed

    • Nothing

    Security

    • Nothing
    Source code(tar.gz)
    Source code(zip)
    phpDocumentor.phar(5.13 MB)
    phpDocumentor.phar.pubkey(800 bytes)
  • v3.0.0-alpha.2(Jun 12, 2018)

    A second alpha release in v3 line. Containing a large refactoring step to symfony flex. We have dropped our cilex implementation since that project is deprecated by symfony flex. Existing userland plugins will remain working due the compatibility layer provided by phpdocument. However this compatibility layer will not work when your project contains cilex and phpdocument was installed using composer. We will keep working on migration steps to reintroduce userland plugins via the new architecture.

    Call for feedback

    PhpDocumentor is developed by a small team with limited time. Our current code base is not fully covered by automated tests. So we are not able to find all regressions or missing features. We would be very grateful when you provide us feedback on this alpha release to improve the quality of phpDocumentor.

    Change log

    Added

    • Symfony flex based application
    • All dependencies are updated to there latest versions.

    Deprecated

    • Cilex based plugins

    Fixed

    • Issues with ignore command line parameter
    • Issues with directory command line parameter
    • Issues with file command line parameter

    Removed

    • Nothing

    Security

    • Nothing
    Source code(tar.gz)
    Source code(zip)
    phpDocumentor.phar(5.12 MB)
  • v3.0.0-alpha1(Dec 24, 2017)

    Our first release after months of development is a first huge step forward to improve the internals of phpDocumentor. This first alpha release should be a drop-in replacement for phpDocumentor v2. However we do strongly recommend to clear your phpDocumentor cache directory.

    This release should be able to parse your php 7+ projects without issues. We are still working on new features to be implemented like parsing of return types and scalar type hints.

    Call for feedback

    PhpDocumentor is developed by a small team with limited time. Our current code base is not fully covered by automated tests. So we are not able to find all regressions or missing features. We would be very grateful when you provide us feedback on this alpha release to improve the quality of phpDocumentor.

    Change log

    Added

    • New Reflection v4 component.
    • New Reflection Docblock v4 component
    • New Type Resolver component
    • New File finder component to replace our old Symfony based implementation.
    • Docker image
    • All dependencies are updated to there latest versions.

    Deprecated

    • Nothing

    Fixed

    • Bug fixes on @use and @link elements

    Removed

    • Symlink support
    • Validators
    • php 5 support
    • PEAR install method

    Security

    • Nothing
    Source code(tar.gz)
    Source code(zip)
    phpDocumentor.phar(18.60 MB)
  • v2.9.0(May 22, 2016)

    Most important issue that was solved in this release is the upgrade of php-parser to be able to handle php-7 syntax. Phpdocumentor is now able to parse files using php 5.5+ syntax, but will not process any of the new key words to documentation.

    Beside the mentioned parser update a number of small issues are solved in this release.

    • Pear install on windows should work from now.
    • Improved error reporting messages
    • Silent mode was restored. phpdocumentor will not produce any output when --quiet flag is used.
    • @See rendering is improved for clean template.
    • Resolved issues with @inheritDoc that was not working as expected for interfaces.
    Source code(tar.gz)
    Source code(zip)
    phpDocumentor-2.9.0.tgz(16.64 MB)
    phpDocumentor.phar(17.42 MB)
    phpdocumentor.phar.asc(287 bytes)
  • v2.8.5(Jul 28, 2015)

  • v2.8.2(Feb 22, 2015)

    FIXED:     Self-update for PHAR files
    FIXED:     Log now shows which elements do not have a summary
    FIXED:     When omitting markers the code now automatically picks TODO and FIXME
    FIXED:     Missing assets in new-black and abstract template
    FIXED:     phpDocumentor will error if the iconv extension is missing.
    
    Source code(tar.gz)
    Source code(zip)
    phpDocumentor.phar(31.54 MB)
  • v2.8.1(Nov 13, 2014)

    In version 2.8.0 we had tried to fix an issue where people with a custom vendor dir could not use the phar distribution by allowing phpDocumentor to scan the composer.json in the current working directory if no other sources could be found.

    This introduced a fatal issue where if you tried to use the phar distribution of phpDocumentor from a folder with a composer.json that it used that composer.json to autoload its library files. This of course caused a fatal error.

    This hotfix release is all about reverting the offending change; after this the fatal errors caused by this are history.

    Our apologies for the inconvenience and have fun documenting!

    Source code(tar.gz)
    Source code(zip)
    phpDocumentor-2.8.1.tgz(15.42 MB)
    phpDocumentor.phar(31.13 MB)
  • v2.8.0(Oct 29, 2014)

    In version 2.7 there were a few fatal errors that happened in specific situations (as usual with bugs) and some changes were done to make integration with composer easier.

    The most significant addition would be a new command line option --cache-folder with which you can tell phpDocumentor to write the cache files to a specific location. This is awesome if you want to keep your cache and docs separate or when setting up a Continuous Integration environment.

    The second most interesting is the self-update command for the Phar installation for phpDocumentor. With this we follow in the footsteps of composer by adding the means to easily update your phar file an exchange it for a newer version of phpDocumentor.

    What's next

    A few days ago Mike van Riel posted a blog post (http://mikevanriel.com/entry/phpdocumentor-an-update) where he unveiled the changes that he is working on; combine that with the awesome contributions that we receive from the community means that interesting things are waiting on the horizon.

    The changes that Mike is working on (which he lovingly dubbed Operation Blue Lightning) are meant to speed phpDocumentor up by a more than significant amount by refactoring some of the architecture of phpDocumentor. This will quite surely take more than the usual six weeks that we use per release and as such we will release version 2.9 as soon as Mike has finished his work on Blue Lightning.

    Progress of this release can be tracked using a milestone that was created for this purpose: https://github.com/phpDocumentor/phpDocumentor2/milestones/Blue Lightning.

    Happy hacking and until next time!

    ADDED:     Argument "--cache-folder" to indicate where the cache is stored
    ADDED:     `phpdoc self-update` command to the PHAR archive to update phpDocumentor with a single command
    FIXED:     #423: Error report in responsive and responsive-twig template should hide empty results and update error counter next to the filename.
    FIXED:     #573: Visibility filters in 'responsive' and 'responsive-twig' do not function properly
    FIXED:     Several scrutinizer reported clean ups
    FIXED:     If tmp was somewhere in path it would be incorrectly replaced
    FIXED:     Several tests were added
    FIXED:     It is now possible to install phpDocumentor using composer in a project using ZF 2.3 or higher
    FIXED:     Fatal error: Call to a member function getParent() on a non-object in ConstantDescriptor.php
    FIXED:     Fatal error: Call to a member function getParent() on a non-object in PropertyDescriptor.php
    REMOVED:   Knp menu from composer.json because it was not used
    
    Source code(tar.gz)
    Source code(zip)
    phpDocumentor-2.8.0.tgz(15.42 MB)
    phpDocumentor.phar(31.13 MB)
  • v2.7.0(Aug 21, 2014)

    phpDocumentor version 2.7 is here. In this release we have fixed various issues that have been reported and thanks to an amazing Testfest in Amsterdam the Code Coverage has risen with at least 8%! A huge thanks to all who participated there.

    In preparation for Testfest we have switched the provisioning of the development machines to use Ansible instead of puppet and made some parts optional (such as profiling and doc generation), making it a lot easier to use the virtual machine.

    Something which is not reflected in the changelog below is that we have automated the deploys of the phpDocumentor website and the releases for phpDocumentor itself. In the past a release took several hours to prepare and execute, now we can do 75% of it within 15 minutes. I hope that we can automate the remaining bit as well but that is something for the future.

    For a complete list of changes, see the changelog below and enjoy the new version!

    ADDED:     A new writer that outputs a statistical extract from the collected data
    ADDED:     Windows support for Ansible playbooks
    ADDED:     8% to 10% Code Coverage thanks to #testfest 2014
    ADDED:     #1347: Support for custom Vendor folders
    ADDED:     Plugins can now be configured using parameters.
    ADDED:     Complete support for @example
    ADDED:     NamespacePrefix to LegacyNamespaceConverter plugin
    FIXED:     Fatal error in MethodDescriptor when a parent was incorrectly called
    FIXED:     Notice in '@see' handling
    FIXED:     #1349: Configuration file was not found in working directory
    FIXED:     Phing integration by re-instating the bootstrap class
    FIXED:     Fixing type inference and variable length issues
    FIXED:     Whether a method is inherited is shown again in XSL-based templates
    FIXED:     Various minor bugs that became visible during the writing of tests
    FIXED:     #1390: Source code paths were incorrect if the source was in folder
    FIXED:     #1341: Icons in clean template were shown incorrectly
    FIXED:     #1331: Not all validations were properly shown
    FIXED:     #1077: Spaces in a path won't trip up libxml anymore
    CHANGED:   Changed reference to deprecated Parsedown method parse() to text()
    CHANGED:   Completely replaced Puppet with Ansible to provision contributor VMs
    CHANGED:   Simpler provisioning for generic contributors; to do profiling
               another task is now needed
    CHANGED:   Docs no longer refer to Short Description or Long Description but to
               Summary and Description per PSR-5
    
    Source code(tar.gz)
    Source code(zip)
    phpDocumentor-2.7.0.tgz(15.37 MB)
    phpDocumentor.phar(31.37 MB)
  • v2.6.1(Jul 9, 2014)

  • v2.6.0(Jun 27, 2014)

    ADDED:     #1087: Fully support `@see`
    ADDED:     #1213: Resolve inline @see and @link to Markdown link
    CHANGED:   #1186: Move checking of writer requirements
    CHANGED:   #1267: XSL should use Router
    CHANGED:   Update contribution guide to match new XHGUI
    CHANGED:   #1248: Replace ZendConfig with Serializer-based config
    CHANGED:   #1017: Updated help output for --hidden to be more descriptive
    CHANGED:   #1264: Clean template no longer requires an internet connection
    CHANGED:   #1212: Plugin configuration can now be loaded from a config file
    CHANGED:   #1194: Add support for default parameter values in @method
    FIXED:     #1313: Namespace Aliases are not stored on FileDescriptor
    FIXED:     #1308: Multiple templates in configuration do not work
    FIXED:     #713: XSL Templates are not found in Windows
    FIXED:     #1253: Transformation crashes on typehint
    FIXED:     #1268: Restore handling of visibility
    FIXED:     #1130: Arrays not resolved in documentation
    FIXED:     #1278: Template is not read from configuration
    FIXED:     #1239: Parseprivate always triggers a complete parsing run
    FIXED:     Parsing crashes on visibility as string
    FIXED:     Routing crashes in Twig
    FIXED:     #1307: Parsing crashes on unknown trait
    FIXED:     #1114: Debug mode for Twig was not enabled
    FIXED:     Errors were not shown in XSL templates
    FIXED:     Remove duplicate namespace separator in constants defined by DEFINE
    FIXED:     #930: @see and @link did not resolve self
    FIXED:     #993: UTF-8 characters in filenames do not work in windows
    FIXED:     #790: Inheritance in XSL was incorrectly registered
    FIXED:     #713: Phar was sometimes not working on windows due to paths
    FIXED:     Restore Behat tests
    FIXED:     #1252: Namespaces are not shown on responsive template
    
    Source code(tar.gz)
    Source code(zip)
    phpDocumentor-2.6.0.tgz(16.24 MB)
    phpDocumentor.phar(25.57 MB)
  • v2.5.0(May 17, 2014)

    In the past few weeks our team has focused on fixing as many bugs as possible. We have managed to bring the list down significantly but unfortunately not all are included as they have been done in the last few days before this release.

    But that only means there is something to look forward to!

    Here is the list of changes in this release:

    FIXED:     #1211: Loading a single plugin is not possible
    FIXED:     #1232: Routing crashes on magic property in trait
    FIXED:     #157: Classes do not inherit trait methods and props
    FIXED:     #1193: Package tags don't inherit to classes
    FIXED:     #1229: @method tag in a trait causes Exception
    FIXED:     #1196: Some files cannot be copied with FileIO
    CHANGED:   Better OPcache handling, annotations are not stripped anymore in PHP 5.5+
    CHANGED:   phpdoc.php was renamed to phpdoc; phpdoc.php is kept for backwards compatibility
    

    In addition to the above we managed to raise our code coverage to increase the stability of the application!

    Have fun documenting!

    Source code(tar.gz)
    Source code(zip)
    phpDocumentor-2.5.0.tgz(16.09 MB)
    phpDocumentor.phar(25.40 MB)
  • v2.4.0(Apr 1, 2014)

    Another 6 weeks have passed, time for release 2.4!

    These weeks go by faster than you'd expect; but in the mean time we haven't sat still at all. The main improvement for this release is that Variadics have been implemented and the Clean template now also features a shiny deprecated elements report.

    And of course you haven't sat still as well. phpDocumentor is out there and used a lot, and as a result of that we receive new issue reports regularly which we try to fix as soon as we can.

    All I can say is: keep them coming!

    These issue reports help us to make phpDocumentor even more awesome than it already is (at least, we like to think so ;)).

    Here is a complete changelog of the fixes and changes in the past period:

    FIXED:     #1141: Deprecated report was missing in Clean template.
    FIXED:     #1191: Opcache comments were not disabled due to incorrect extension name
    FIXED:     #1184, #1181: @package tag on File was not recognized and not inherited on children
    FIXED:     #1180: phpDocumentor crashes if an `@subpackage` has no name set
    FIXED:     #1178: Generating a marker listing crashes sometimes
    FIXED:     #1176: DocBlocks were not overridden on subclasses
    FIXED:     #1163: Responsive and Responsive-twig templates do not work on HTTPS
    FIXED:     #1158: Clean and Responsive template shows empty namespace menu when there are no namespaces
    FIXED:     #1134, #1132: GraphViz reports can crash due to empty labels
    FIXED:     #1098: Re-added missing Javascript file
    FIXED:     #1037: IE did not like empty anchors
    FIXED:     #152:  @internal and @ignore did not behave as expected
    FIXED:     Javascript notices in Clean by upgrading jQuery
    ADDED:     #1141: Deprecated report to the Clean template
    ADDED:     #629:  Support for Variadics
    CHANGED:   #1099, #1101: Replaced custom PHAR compiling with box-project.org and fixing issues in the mean time
    
    Source code(tar.gz)
    Source code(zip)
    phpDocumentor-2.4.0.tgz(14.99 MB)
    phpDocumentor.phar(25.26 MB)
Documentation Generator for PHP

phpDocumentor What is phpDocumentor? phpDocumentor is an application that is capable of analyzing your PHP source code and DocBlock comments to genera

phpDocumentor 3.7k Sep 28, 2022
Documentation generator for PHP Code using standard technology (SRC, DOCBLOCK, XML and XSLT)

phpDox phpDox is a documentation generator for PHP projects. This includes, but is not limited to, API documentation. The main focus is on enriching t

Arne Blankerts 586 Jul 24, 2022
A php API documentation generator, fork of Sami

Doctum, a PHP API documentation generator. Fork of Sami Curious about what Doctum generates? Have a look at the MariaDB MySQL Kbs or Laravel documenta

Code LTS 184 Sep 14, 2022
An API documentation generator

Sami: an API documentation generator WARNING: Sami is not supported nor maintained anymore. Feel free to fork. Curious about what Sami generates? Have

null 2k Sep 19, 2022
Documentation Generator for WordPress.

Pronamic WordPress Documentor is a tool to automatically extract data about the actions and filters of your WordPress theme or plugin.

Pronamic 34 Aug 27, 2022
Sami: an API documentation generator

Sami: an API documentation generator WARNING: Sami is not supported nor maintained anymore. Feel free to fork. Curious about what Sami generates? Have

null 2k Sep 23, 2022
PHP 7.1 ready Smart and Simple Documentation for your PHP project

Smart and Readable Documentation for your PHP project ApiGen is the simplest, the easiest to use and the most modern api doc generator. It is all PHP

ApiGen 2.1k Sep 22, 2022
PHP 7.1 ready Smart and Simple Documentation for your PHP project

Smart and Readable Documentation for your PHP project ApiGen is the simplest, the easiest to use and the most modern api doc generator. It is all PHP

ApiGen 2.1k Apr 20, 2021
phpDocumentor is an application that is capable of analyzing your PHP source code and DocBlock comments to generate a complete set of API Documentation

phpDocumentor What is phpDocumentor? phpDocumentor is an application that is capable of analyzing your PHP source code and DocBlock comments to genera

phpDocumentor 3.7k Sep 27, 2022
Generates documentation for your REST API from annotations

NelmioApiDocBundle The NelmioApiDocBundle bundle allows you to generate a decent documentation for your APIs. Migrate from 3.x to 4.0 To migrate from

Nelmio 2.1k Sep 21, 2022
Generate interactive OpenAPI documentation for your RESTful API using doctrine annotations

Generate interactive OpenAPI documentation for your RESTful API using doctrine annotations

Robert Allen 4.6k Sep 23, 2022
Generate Sphinx/ReStructured documentation from PHPDoc

PHP-phpdoc-to-rst Forked from Francesco "Abbadon1334" Danti by AeonDigital. In this fork the changes has only visual and superficial effects [ just be

Rianna Cantarelli 0 Nov 16, 2021
Learn how to implement the most important Design Patterns into your PHP application, uses PHP 8.1

Learn how to implement the most important Design Patterns into your PHP application. This project uses PHP 8.1. it has examples for each Pattern and an Article explaining how to use them step by step, their advantages, and disadvantages.

Gabriel Anhaia 186 Sep 11, 2022
Industrial-strength annotations for PHP

php-annotations Source-code annotations for PHP. Copyright (C) 2011-2015 Rasmus Schultz [email protected] https://github.com/php-annotations/php-anno

php-annotations 137 Jul 8, 2022
Simple and effective multi-format Web API Server to host your PHP API as Pragmatic REST and / or RESTful API

Luracast Restler ![Gitter](https://badges.gitter.im/Join Chat.svg) Version 3.0 Release Candidate 5 Restler is a simple and effective multi-format Web

Luracast 1.3k Sep 27, 2022
A PHP framework foucs on API fast development.接口,从简单开始!PhalApi简称π框架,一个轻量级PHP开源接口框架,专注于接口服务开发。

PhalApi开源接口框架 / PhalApi API Framework 读音:派框架 Stargazers over time 开发文档 / Documents 专为PHPer准备的优雅而详细的开发文档,请看:PhalApi 2.x 开发文档。 PhalApi 2.x English Docs.

dogstar 1.5k Sep 20, 2022
30 seconds of code Short PHP code snippets for all your development needs

30 seconds of code Short PHP code snippets for all your development needs Visit our website to view our snippet collection. Use the Search page to fin

30 seconds of code 2.5k Sep 29, 2022
Source Code for 'PHP 8 Solutions' by David Powers

Apress Source Code This repository accompanies PHP 8 Solutions by David Powers (Apress, 2022). Download the files as a zip using the green button, or

Apress 6 Aug 30, 2022
PHP Developer Roadmap

This is PHP Developer Roadmap

TheCodeholic 2k Sep 23, 2022