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.
|