To get the most recent version, you can fork the PHP-CPP library on GitHub. If you need or prefer a stable version you can download one of the available releases. When downloading one of the below releases make sure to come back in the future to upgrade to a newer (and improved) version.

  • PHP-CPP 2.4.3

    v2.4.3 released

    - Fixed __get() and related methods for PHP version 8 and up (such methods caused a segfault)
    - Fixed Php::Traversable class for PHP version 8 and up (this caused a warning about an abstract class that could not be instantiated)
    - All Php::Traversable classes now automatically have a getIterator() method
    - Fixed crash when using comparison operators on a non-string Php::Value to compare it with a "const char *"
    - Some internal changes to variable-length-arrays compiler to get broader compiler support
    - Changes to the build mechanism (we no longer build special object files for shared and static libraries)

    Zip file Tar file
  • PHP-CPP 2.4.2

    v2.4.2 released

    - Fixed registering of parameters with an unspecified type for PHP 8 and up (these parameters were incorrectly registered as typed parameters)

    Zip file Tar file
  • PHP-CPP 2.4.1

    v2.4.1 released

    - No functional changes since 2.4.0
    - The "" is now a symlink using a relative path, to make it a bit easier to copy around together with the files

    Zip file Tar file
  • PHP-CPP 2.4.0

    v2.4.0 released

    - Support for PHP 8.2
    - When the "Php::Countable" interface is implemented, the $object->count() method is now implicitly enabled and passed to MyClass::__count().

    Zip file Tar file
  • PHP-CPP 2.3.5

    v2.3.5 released

    - Classes that extend from Php::Serializable no longer have to explicitly register the serialize() and unserialize() methods (they are not implicitly added)

    Zip file Tar file
  • PHP-CPP 2.3.4

    v2.3.4 released

    - Fixed a segmentation fault on extension startup

    Zip file Tar file
  • PHP-CPP 2.3.3

    v2.3.3 released

    - Fixed PHP 7.4 issue (because of new values for C constants, interfaces were suddenly registered as abstract classes)

    Zip file Tar file
  • PHP-CPP 2.3.2

    v2.3.2 released

    - Fixed version number (the 2.3.1 release was still creating a 2.3.0 shared object file)

    Zip file Tar file
  • PHP-CPP 2.3.1

    v2.3.1 released

    - Fixed issue for PHP 7.4 with interfaces that extend from other interfaces

    Zip file Tar file
  • PHP-CPP 2.3.0

    v2.3.0 released

    - Support for PHP 7.4
    - C++ classes that derive from Php::Traversable now automatically also implement "Traversable" in PHP space ("instanceof" operator now works)
    - C++ classes that derive from Php::Serializable now automatically also implement "Serializable" in PHP space ("instanceof" operator now works)
    - Performance optimization for destructing objects
    - Some small improvements and fixes to the building procedures with cmake
    - Fixed some mistakes in example code

    Zip file Tar file
  • PHP-CPP 2.2.0

    v2.2.0 released

    # WARNING: Breaking changes to the ABI and API regarding the Error class

    ## Warning: commit dfe4a94 breaks build on PHP7.0 and PHP7.1. Needs fix before proper release

    * Renamed exception to throwable
    * Enumeration Php::Error has been renamed to Php::ErrorType to make room for the new Php::Error class
    * Added new class Php::Error that can be used for throwing errors (PHP7 normally throws errors instead of reporting fatal errors, which is what PHP5 did)
    * Php::Exception is now only used for exceptions and no longer for errors (so extensions can be written to only catch exceptions, and not the errors)
    * Removed support for Exception::file() and Exception::line()
    * A couple of functions that used to report fatal errors, now throw an Php::Error object instead
    * fixed exception handling for class methods and functions (uncaught Error objects caused a full crash, now they cause a fatal error)
    * when calling an invalid function we no longer throw an exception, but an error
    * renamed ErrorType to Message
    * closures now get an empty string as name because exception handling functions sometimes need access to the name
    * fixed issue when dealing with optional object parameters

    Zip file Tar file
  • PHP-CPP 2.1.4

    v2.1.4 released

    * added Php::Stream class

    Zip file Tar file
  • PHP-CPP 2.1.3

    v2.1.3 released

    * improved makefile
    * fixed some valgrind complaints about uninitialized memory
    * fixed the __invoke() and __call() methods: the return value of the C++ function was not passed to php space

    Zip file Tar file
  • PHP-CPP 2.1.2

    v2.1.2 released

    * Fix where info->type was not correctly assigned, resulting in garbage being dereferenced (php7.2). fix compilation error for php7.3 regarding the way constants are implemented in zend.
    * info->type is >php7.2 only
    * Always dereference our value, if it is not a reference we get the original back again
    * Constants were not right after all, and the iterator structure is slightly different for 7.3.
    * iterator_funcs is now of pointer type
    * Fix build on OSX (#391)
    * Added PHP7.3 support

    Zip file Tar file
  • PHP-CPP 2.1.1

    v2.1.1 released

    * Add automatic builds for g++-4.8 up to g++-8 and clang++-4.0 to clang++-6.0. Also resolves #357 by moving the `-shared` flag further down on the command line parameters, after the point PHP had the chance to taint them by including the `-pie` flag.
    * If our zend value is a reference, pass through the reference to retrieve the object class entry

    Zip file Tar file
  • PHP-CPP 2.1.0

    v2.1.0 released

    * Support for PHP 7.2
    * ini entries were not always correctly registered when a extension was reloaded
    * Added cmake file to be able to compile PHP-CPP under Windows (#343)
    * Removed hard dependency on sudo (#332)
    * Refactored exception code slightly
    * Made the makeReference function non-static, renamed some variables for clarity, reworked parenthesis for consistency and added some missing override statements
    * Fix #301 - Invalid read when Php::defined() is true
    * Fix wrong assumption
    * Make inlines static and unexport them (fix #178)
    * Bug fix for #234 - Setting a PHP::GLOBALS value makes a segfault
    * Fix 7.1 build
    * debugZval() should be public
    * Rework assignments
    * Fix #293 - Php::Value::numericValue() does not play well with references
    * Fix #269 - Process termination when attempting to access object
    * Remove #pragma GCC system_header from zend/includes.h
    * Fix -Wsign-compare compiler warning
    * Increase refcount of zval, not zend_object
    * Use EG(scope) to access properties
    * Fix #261 - Byref
    * Use information from PHP exception
    * Fix compiler warnings
    * Fix #281 -Memory Leak in CallPhpFunctions
    * Do not increment reference count more than necessary
    * Use zend_object_std_dtor()
    * Fix TSRM usage for PHP 7
    * Make the code compile under ZTS
    * Fix zval being free()ed too early when retrieving a propery
    * arrayaccess.h: Add missing virtual destructor for interface

    Zip file Tar file
  • PHP-CPP 2.0.0

    v2.0.0 released

    Added compatibility with PHP7

    Zip file Tar file
  • Version 1.5.3

    v1.5.3 released

    - Fix compiler errors when compiling for a multi-threading environment.
    - Don't create a std::string with a nullptr

    Zip file Tar file
  • Version 1.5.2

    v1.5.2 released

    This is a bugfix release
    - Properly handle a Php::Exception when thrown from a serialize method.
    - Handle exceptions thrown from unserialize similar to normal php.
    - Fix issue with derived classes. closes #211
    - Fix logic error that caused segfaults for extension-created classes extended from userland using a doc-block

    Zip file Tar file
  • Version 1.5.1

    v1.5.1 released

    This release only adds some error related functions
    - The php error_reporting function is exposed without any slow Php::call() calls
    - The php set_error_handler function is exposed without any slow Php::call() calls
    - Exposed all of the E_\* properties as an enum

    Zip file Tar file
  • Version 1.5

    v1.5 released

    PHP-CPP version 1.5 is mainly a bugfix release, and it has a small number of new features:
    - PHP interfaces defined in C++ can now also have static methods
    - Fixed segmentation fault crash when casting objects
    - Fixed crash when calling chained C++ methods from a PHP script
    - Allowed "Php::Value x = y["whatever"]" syntax in C++ code
    - Fixed memory leak when calling function stored in a Php::Value object
    - Fixed memory leak when a Php::Iterator object was being used

    Zip file Tar file
  • Version 1.4

    v1.4 released

    New release with several bugfixes and some new features
    - Added a function to load other extensions by path
    - Fixed some symbols that were not being exported
    - Value::rawValue() will now return nullptr in case the Value is not a string
    - Value::get(int) and Value::contains(int) now also work on Objects implementing ArrayAccess
    - Makefile will now add the version using sonames

    Zip file Tar file
  • Version 1.3.2

    v1.3.2 released

    This release is mainly a bugfix release
    - Implemented a simple sapi_name() method which will return the current sapi.
    - On Windows with mingw EOF was not defined.
    - Added access checks to Php::Value::contains.
    - Fixed the Value::contains method and added the isCallable(name) function to see if the object has an accessible member function
    - Changed default visibility for symbols in the PHP-CPP library to hidden and explicitly exported all symbols available from the public API.
    - Fix compile issue with PHP 5.3
    - Added article about dynamic loading
    - Added DlUnrestricted example extension
    - Fixed a crash when dynamicly loaded extensions were unloaded

    Zip file Tar file
  • Version 1.3.1

    v1.3.1 released

    This release is mainly a bugfix release
    - Added a couple of extra checks to ensure that PHP-CPP also compilers on these olders compilers
    - Fixed compile issue for 32bit systems (issue 167)
    - Fixed segmentation fault when an exception was thrown from out of an __invoke() or __call() method
    - Refactored the initialization and shutdown of extension objects
    - Fixed initialization of the PhpCpp::Functor class
    - Fixed memory leak in classimpl
    - Fixed compile issue on multithread setups
    - Dlsym() call has been replaced with DL_FETCH_SYMBOL(), and default move constructor has been removed
    - Fixed ambiguous call (MSVC compiler) - Re-factored operator[] access to the get() function.
    - Added missing static cast of void\* to DL_HANDLE
    - Added missing return statement
    - Fix test (fixes issue 167)
    - Merge pull request #169 from ovr/patch-1 (Fix indent )
    - Merge pull request #173 from atvise/fix_win_ambigious_call - Fixed ambiguous call (MSVC compiler)
    - Merge pull request #175 from atvise/fix_win_missing_static_cast Added missing static cast of void\* to DL_HANDLE
    - Merge pull request #176 from atvise/fix_missing_returns Added missing return statement
    - Removed unused code

    Zip file Tar file
  • Version 1.3

    v1.3 released

    A new release of PHP-CPP with bug fixes and new features. The highlights are:
    - Value::unset() method has been fixed to make it possible to remove array/object members
    - Reduced amount of code by using variadic templates
    - All move and assignment operators are marked as 'noexcept'
    - Fixed chaining methods, it now is possible to "return this"
    - FIxed memory leaks
    - Added Php::Script and Php::File classes that can evaluate PHP scripts
    - Added methods Php::include(), Php::include_once(), Php::require() and Php::require_once()
    - Fixed return value of Php::eval() function (this could break existing applications that rely on old behavior)
    - It now is possible to iterate over super-globals like Php::POST, Php::SERVER, etcetera
    - Added Php::Function class that allows one to capture C++ lambdas and pass them over to PHP user space
    - Added support for constants using the Php::Constant class
    - Added functions Php::define(), Php::defined() and Php::constant()
    - Added version check to ensure that a compiled extension is compatible with the installed version of PHP-CPP

    Zip file Tar file
  • Version 1.2.2

    v1.2.2 released

    This release is mainly a bugfix version
    - Fixed a memory leak with Php::Value objects not being freed correctly when returned
    - Php::Object("MyClass") no longer crashes when there is no __construct() function
    - It is now slightly easier to cross compile

    Zip file Tar file
  • Version 1.2.1

    v1.2.1 released

    Minor release which adds a few minor things.
    - Php::Value can now be casted to a std::set
    - Php::ByVal and Php::ByRef will now be type-less if no type provided
    - Makefile will now respect the specified php-config binary
    - Makefile will now build a static library as well

    Zip file Tar file
  • Version 1.2

    v1.2 released

    This is mainly a bugfix version + some new features and change in behavior of some functions.
    - New feature: Php::Value objects can now also be compared with other Php::Value objects using C++ comparison operators like ==, <, >, etcetera.
    - Fix: magic methods were not working for objects created with Php::Object("MyClass", new MyClass())
    - Fix: moving nullptr to a Php::Value object caused a crash
    - Fix: infinite loop when compariting value objects with each other using operator ==
    - New feature: A C++ class does no longer have to have a default constructor to be usable from PHP
    - Changed behavior: PHP-CPP used to throw PHP exceptions to user space when an error occured, while the Zend engine would trigger a fatal error in similar situations and stop further execution. This was a difference between PHP-CPP and the Zend engine. This has been changed: now PHP-CPP also triggers fatal errors when the programmer makes a mistake (instead of throwing exceptions).
    - Fix: methods and properties from base classes were not available in derived classes
    - New feature: Php::eval() function
    - New feature: Php::class_exists() function
    - New feature: Php::is_a() and Php::is_subclass_of() functions
    - New feature: Methods Php::Value::instanceOf() and Php::Value::derivedFrom()
    - Fix: creating a Php::Value based on a std::map would not result in an array variable being created
    - Fix: for objects created using Php::Object() constructor, the __construct() method was not called
    - Fix: traversing through array properties was not always working when property names started with a null byte
    - Fix: casting a Php::value holding an array to a map with string keys, will now turn the keys into numeric string keys ("1", "2", etcetera)
    - Fix: "apachectl reload" caused a crash on PHP 5.3 environments
    - Changed behavior: setting or retrieving properties of a Php::Value that start with a null byte (to rely on the Zend implementation of private properties) will no longer work (PHP-CPP users should never rely on specific Zend features)

    Zip file Tar file
  • Version 1.1.1

    v1.1.1 released

    This release fixes a bug that caused apache to crash when the "apache reload" command was given while an extension based on PHP-CPP was installed.

    Zip file Tar file
  • Version 1.1

    v1.1 released

    Release 1.1 of the PHP-CPP library contains a number of small bug fixes, and support for php.ini variables.

    The source code and directory structure of the library has been refactored to prepare for future support of HHVM, so that extensions written with PHP-CPP can be used in combination with Zend, and in combination with HHVM. This is work in progress: currently PHP-CPP extensions only work with Zend.

    The most important changes in version 1.1 are:
    - Support for php.ini entries.
    - Restructured source code to be engine agnostic.

    Zip file Tar file