Go to file
David b23b678a3d
Better interactions with objects (#41)
* Object functions now return references to objects

Added ability to get object class name as well as hashtable of
properties

* Return mutable reference to objects

* Optimized `unwrap_or_else` calls
2021-05-21 17:11:15 +12:00
.cargo added info table headers 2021-03-09 16:28:37 +13:00
.github Added support for PHP ZTS (#37) 2021-05-19 20:45:39 +12:00
example/skel Better interactions with objects (#41) 2021-05-21 17:11:15 +12:00
ext-php-rs-derive v0.0.6: bumped version and changelog 2021-05-11 21:49:09 +12:00
src Better interactions with objects (#41) 2021-05-21 17:11:15 +12:00
.gitignore added info table headers 2021-03-09 16:28:37 +13:00
build.rs Added support for PHP ZTS (#37) 2021-05-19 20:45:39 +12:00
Cargo.toml Added support for PHP ZTS (#37) 2021-05-19 20:45:39 +12:00
CHANGELOG.md v0.0.6: bumped version and changelog 2021-05-11 21:49:09 +12:00
LICENSE_APACHE Relicense under MIT or Apache 2.0 (#27) 2021-04-22 20:01:30 +12:00
LICENSE_MIT Relicense under MIT or Apache 2.0 (#27) 2021-04-22 20:01:30 +12:00
README.md Updated README 2021-05-21 15:12:35 +12:00

ext-php-rs

Bindings for the Zend API to build PHP extensions natively in Rust. Inspired by killertux/solder and its predecessors.

PHP Discorders

Documentation

We are currently unable to deploy our documentation to docs.rs due to the crate requiring PHP 8.0, which is unavailable in the default Ubuntu repositories. Documentation can be viewed here. It is generated from the latest master branch. Documentation will be moved to docs.rs when Ubuntu updates its repositories to PHP 8.0.

Features

This is not a set feature list, but these are the features on my roadmap. Create an issue if there's something you'd like to see!

  • Module definitions
  • Function implementation
  • Class implementation
    • Class methods
    • Class properties
    • Class constants
  • Module constants
  • Calling PHP functions

Requirements

  • PHP 8.0 or later
    • No support is planned for lower versions.
  • Linux or Darwin-based OS
  • Rust - no idea which version
  • Clang 3.9 or greater

See the following links for the dependency crate requirements:

Usage

This project only works for PHP >= 8.0 (for now). Due to the fact that the PHP extension system relies heavily on C macros (which cannot be exported to Rust easily), structs have to be hard coded in.

There is only inline documentation for the time being. Starting by creating a C extension is a good start as well.

Check out one of the example projects:

  • ext-skel - Testbed for testing the library. Check out previous commits as well to see what else is possible.
  • opus-php - Work-in-progress extension to use the Opus library in PHP.

Contributions

Contributions are very much welcome. I am a novice Rust developer and any suggestions are wanted and welcome. Feel free to file issues and PRs through Github.

Unless you explicitly state otherwise, any contribution intentionally submitted for inclusion in the work by you, as defined in the Apache-2.0 license, shall be dual licensed as above, without any additional terms or conditions.

Resources

License

Licensed under either of

at your option.