90 lines
3.3 KiB
Markdown
90 lines
3.3 KiB
Markdown
Use in PHP {#flatbuffers_guide_use_php}
|
|
==========
|
|
|
|
## Before you get started
|
|
|
|
Before diving into the FlatBuffers usage in PHP, it should be noted that
|
|
the [Tutorial](@ref flatbuffers_guide_tutorial) page has a complete guide to
|
|
general FlatBuffers usage in all of the supported languages
|
|
(including PHP). This page is specifically designed to cover the nuances of
|
|
FlatBuffers usage in PHP.
|
|
|
|
You should also have read the [Building](@ref flatbuffers_guide_building)
|
|
documentation to build `flatc` and should be familiar with
|
|
[Using the schema compiler](@ref flatbuffers_guide_using_schema_compiler) and
|
|
[Writing a schema](@ref flatbuffers_guide_writing_schema).
|
|
|
|
## FlatBuffers PHP library code location
|
|
|
|
The code for FlatBuffers PHP library can be found at `flatbuffers/php`. You
|
|
can browse the library code on the [FlatBuffers
|
|
GitHub page](https://github.com/google/flatbuffers/tree/master/php).
|
|
|
|
## Testing the FlatBuffers JavaScript library
|
|
|
|
The code to test the PHP library can be found at `flatbuffers/tests`.
|
|
The test code itself is located in [phpTest.php](https://github.com/google/
|
|
flatbuffers/blob/master/tests/phpTest.php).
|
|
|
|
You can run the test with `php phpTest.php` from the command line.
|
|
|
|
*Note: The PHP test file requires
|
|
[PHP](http://php.net/manual/en/install.php) to be installed.*
|
|
|
|
## Using theFlatBuffers PHP library
|
|
|
|
*Note: See [Tutorial](@ref flatbuffers_guide_tutorial) for a more in-depth
|
|
example of how to use FlatBuffers in PHP.*
|
|
|
|
FlatBuffers supports both reading and writing FlatBuffers in PHP.
|
|
|
|
To use FlatBuffers in your own code, first generate PHP classes from your schema
|
|
with the `--php` option to `flatc`. Then you can include both FlatBuffers and
|
|
the generated code to read or write a FlatBuffer.
|
|
|
|
For example, here is how you would read a FlatBuffer binary file in PHP:
|
|
First, include the library and generated code (using the PSR `autoload`
|
|
function). Then you can read a FlatBuffer binary file, which you
|
|
pass the contents of to the `GetRootAsMonster` function:
|
|
|
|
~~~{.php}
|
|
// It is recommended that your use PSR autoload when using FlatBuffers in PHP.
|
|
// Here is an example:
|
|
function __autoload($class_name) {
|
|
// The last segment of the class name matches the file name.
|
|
$class = substr($class_name, strrpos($class_name, "\\") + 1);
|
|
$root_dir = join(DIRECTORY_SEPARATOR, array(dirname(dirname(__FILE__)))); // `flatbuffers` root.
|
|
|
|
// Contains the `*.php` files for the FlatBuffers library and the `flatc` generated files.
|
|
$paths = array(join(DIRECTORY_SEPARATOR, array($root_dir, "php")),
|
|
join(DIRECTORY_SEPARATOR, array($root_dir, "tests", "MyGame", "Example")));
|
|
foreach ($paths as $path) {
|
|
$file = join(DIRECTORY_SEPARATOR, array($path, $class . ".php"));
|
|
if (file_exists($file)) {
|
|
require($file);
|
|
break;
|
|
}
|
|
}
|
|
|
|
// Read the contents of the FlatBuffer binary file.
|
|
$filename = "monster.dat";
|
|
$handle = fopen($filename, "rb");
|
|
$contents = $fread($handle, filesize($filename));
|
|
fclose($handle);
|
|
|
|
// Pass the contents to `GetRootAsMonster`.
|
|
$monster = \MyGame\Example\Monster::GetRootAsMonster($contents);
|
|
~~~
|
|
|
|
Now you can access values like this:
|
|
|
|
~~~{.php}
|
|
$hp = $monster->GetHp();
|
|
$pos = $monster->GetPos();
|
|
~~~
|
|
|
|
## Text Parsing
|
|
|
|
There currently is no support for parsing text (Schema's and JSON) directly
|
|
from PHP.
|