Giter VIP home page Giter VIP logo

phpx's Introduction

Swoole Logo
Swoole is an event-driven, asynchronous, coroutine-based concurrency library with high performance for PHP.

lib-swoole ext-swoole test-linux Frameworks Tests codecov

Twitter Discord Latest Release License Coverity Scan Build Status

⚙️ Quick Start

Run Swoole program by Docker

docker run --rm phpswoole/swoole "php --ri swoole"

For details on how to use it, see: How to Use This Image.

Documentation

https://wiki.swoole.com/

HTTP Service

$http = new Swoole\Http\Server('127.0.0.1', 9501);
$http->set(['hook_flags' => SWOOLE_HOOK_ALL]);

$http->on('request', function ($request, $response) {
    $result = [];
    Co::join([
        go(function () use (&$result) {
            $result['google'] = file_get_contents("https://www.google.com/");
        }),
        go(function () use (&$result) {
            $result['taobao'] = file_get_contents("https://www.taobao.com/");
        })
    ]);
    $response->end(json_encode($result));
});

$http->start();

Concurrency

Co\run(function() {
    Co\go(function() {
        while(1) {
            sleep(1);
            $fp = stream_socket_client("tcp://127.0.0.1:8000", $errno, $errstr, 30);
            echo fread($fp, 8192), PHP_EOL;
        }
    });

    Co\go(function() {
        $fp = stream_socket_server("tcp://0.0.0.0:8000", $errno, $errstr, STREAM_SERVER_BIND | STREAM_SERVER_LISTEN);
        while(1) {
            $conn = stream_socket_accept($fp);
            fwrite($conn, 'The local time is ' . date('n/j/Y g:i a'));
        }
    });

    Co\go(function() {
        $redis = new Redis();
        $redis->connect('127.0.0.1', 6379);
        while(true) {
            $redis->subscribe(['test'], function ($instance, $channelName, $message) {
                echo 'New redis message: '.$channelName, "==>", $message, PHP_EOL;
            });
        }
    });

    Co\go(function() {
        $redis = new Redis();
        $redis->connect('127.0.0.1', 6379);
        $count = 0;
        while(true) {
            sleep(2);
            $redis->publish('test','hello, world, count='.$count++);
        }
    });
});

Runtime Hook

Swoole hooks the blocking io function of PHP at the bottom layer and automatically converts it to a non-blocking function, so that these functions can be called concurrently in coroutines.

Supported extension/functions

  • ext-curl (Support symfony and guzzle)
  • ext-redis
  • ext-mysqli
  • ext-pdo_mysql
  • ext-pdo_pgsql
  • ext-pdo_sqlite
  • ext-pdo_oracle
  • ext-pdo_odbc
  • stream functions (e.g. stream_socket_client/stream_socket_server), Supports TCP/UDP/UDG/Unix/SSL/TLS/FileSystem API/Pipe
  • ext-sockets
  • ext-soap
  • sleep/usleep/time_sleep_until
  • proc_open
  • gethostbyname/shell_exec/exec
  • fread/fopen/fsockopen/fwrite/flock

🛠 Develop & Discussion

💎 Awesome Swoole

Project Awesome Swoole maintains a curated list of awesome things related to Swoole, including

  • Swoole-based frameworks and libraries.
  • Packages to integrate Swoole with popular PHP frameworks, including Laravel, Symfony, Slim, and Yii.
  • Books, videos, and other learning materials about Swoole.
  • Debugging, profiling, and testing tools for developing Swoole-based applications.
  • Coroutine-friendly packages and libraries.
  • Other Swoole related projects and resources.

✨ Event-based

The network layer in Swoole is event-based and takes full advantage of the underlying epoll/kqueue implementation, making it really easy to serve millions of requests.

Swoole 4.x uses a brand new engine kernel and now it has a full-time developer team, so we are entering an unprecedented period in PHP history which offers a unique possibility for rapid evolution in performance.

⚡ Coroutine

Swoole 4.x or later supports the built-in coroutine with high availability, and you can use fully synchronized code to implement asynchronous performance. PHP code without any additional keywords, the underlying automatic coroutine-scheduling.

Developers can understand coroutines as ultra-lightweight threads, and you can easily create thousands of coroutines in a single process.

MySQL

Concurrency 10K requests to read data from MySQL takes only 0.2s!

$s = microtime(true);
Co\run(function() {
    for ($c = 100; $c--;) {
        go(function () {
            $mysql = new Swoole\Coroutine\MySQL;
            $mysql->connect([
                'host' => '127.0.0.1',
                'user' => 'root',
                'password' => 'root',
                'database' => 'test'
            ]);
            $statement = $mysql->prepare('SELECT * FROM `user`');
            for ($n = 100; $n--;) {
                $result = $statement->execute();
                assert(count($result) > 0);
            }
        });
    }
});
echo 'use ' . (microtime(true) - $s) . ' s';

Mixed server

You can create multiple services on the single event loop: TCP, HTTP, Websocket and HTTP2, and easily handle thousands of requests.

function tcp_pack(string $data): string
{
    return pack('N', strlen($data)) . $data;
}
function tcp_unpack(string $data): string
{
    return substr($data, 4, unpack('N', substr($data, 0, 4))[1]);
}
$tcp_options = [
    'open_length_check' => true,
    'package_length_type' => 'N',
    'package_length_offset' => 0,
    'package_body_offset' => 4
];
$server = new Swoole\WebSocket\Server('127.0.0.1', 9501, SWOOLE_BASE);
$server->set(['open_http2_protocol' => true]);
// http && http2
$server->on('request', function (Swoole\Http\Request $request, Swoole\Http\Response $response) {
    $response->end('Hello ' . $request->rawcontent());
});
// websocket
$server->on('message', function (Swoole\WebSocket\Server $server, Swoole\WebSocket\Frame $frame) {
    $server->push($frame->fd, 'Hello ' . $frame->data);
});
// tcp
$tcp_server = $server->listen('127.0.0.1', 9502, SWOOLE_TCP);
$tcp_server->set($tcp_options);
$tcp_server->on('receive', function (Swoole\Server $server, int $fd, int $reactor_id, string $data) {
    $server->send($fd, tcp_pack('Hello ' . tcp_unpack($data)));
});
$server->start();

Coroutine clients

Whether you DNS query or send requests or receive responses, all of these are scheduled by coroutine automatically.

go(function () {
    // http
    $http_client = new Swoole\Coroutine\Http\Client('127.0.0.1', 9501);
    assert($http_client->post('/', 'Swoole Http'));
    var_dump($http_client->body);
    // websocket
    $http_client->upgrade('/');
    $http_client->push('Swoole Websocket');
    var_dump($http_client->recv()->data);
});
go(function () {
    // http2
    $http2_client = new Swoole\Coroutine\Http2\Client('localhost', 9501);
    $http2_client->connect();
    $http2_request = new Swoole\Http2\Request;
    $http2_request->method = 'POST';
    $http2_request->data = 'Swoole Http2';
    $http2_client->send($http2_request);
    $http2_response = $http2_client->recv();
    var_dump($http2_response->data);
});
go(function () use ($tcp_options) {
    // tcp
    $tcp_client = new Swoole\Coroutine\Client(SWOOLE_TCP);
    $tcp_client->set($tcp_options);
    $tcp_client->connect('127.0.0.1', 9502);
    $tcp_client->send(tcp_pack('Swoole Tcp'));
    var_dump(tcp_unpack($tcp_client->recv()));
});

Channel

Channel is the only way for exchanging data between coroutines, the development combination of the Coroutine + Channel is the famous CSP programming model.

In Swoole development, Channel is usually used for implementing connection pool or scheduling coroutine concurrent.

The simplest example of a connection pool

In the following example, we have a thousand concurrently requests to redis. Normally, this has exceeded the maximum number of Redis connections setting and will throw a connection exception, but the connection pool based on Channel can perfectly schedule requests. We don't have to worry about connection overload.

class RedisPool
{
    /**@var \Swoole\Coroutine\Channel */
    protected $pool;

    /**
     * RedisPool constructor.
     * @param int $size max connections
     */
    public function __construct(int $size = 100)
    {
        $this->pool = new \Swoole\Coroutine\Channel($size);
        for ($i = 0; $i < $size; $i++) {
            $redis = new \Swoole\Coroutine\Redis();
            $res = $redis->connect('127.0.0.1', 6379);
            if ($res == false) {
                throw new \RuntimeException("failed to connect redis server.");
            } else {
                $this->put($redis);
            }
        }
    }

    public function get(): \Swoole\Coroutine\Redis
    {
        return $this->pool->pop();
    }

    public function put(\Swoole\Coroutine\Redis $redis)
    {
        $this->pool->push($redis);
    }

    public function close(): void
    {
        $this->pool->close();
        $this->pool = null;
    }
}

go(function () {
    $pool = new RedisPool();
    // max concurrency num is more than max connections
    // but it's no problem, channel will help you with scheduling
    for ($c = 0; $c < 1000; $c++) {
        go(function () use ($pool, $c) {
            for ($n = 0; $n < 100; $n++) {
                $redis = $pool->get();
                assert($redis->set("awesome-{$c}-{$n}", 'swoole'));
                assert($redis->get("awesome-{$c}-{$n}") === 'swoole');
                assert($redis->delete("awesome-{$c}-{$n}"));
                $pool->put($redis);
            }
        });
    }
});

Producer and consumers

Some Swoole's clients implement the defer mode for concurrency, but you can still implement it flexible with a combination of coroutines and channels.

go(function () {
    // User: I need you to bring me some information back.
    // Channel: OK! I will be responsible for scheduling.
    $channel = new Swoole\Coroutine\Channel;
    go(function () use ($channel) {
        // Coroutine A: Ok! I will show you the github addr info
        $addr_info = Co::getaddrinfo('github.com');
        $channel->push(['A', json_encode($addr_info, JSON_PRETTY_PRINT)]);
    });
    go(function () use ($channel) {
        // Coroutine B: Ok! I will show you what your code look like
        $mirror = Co::readFile(__FILE__);
        $channel->push(['B', $mirror]);
    });
    go(function () use ($channel) {
        // Coroutine C: Ok! I will show you the date
        $channel->push(['C', date(DATE_W3C)]);
    });
    for ($i = 3; $i--;) {
        list($id, $data) = $channel->pop();
        echo "From {$id}:\n {$data}\n";
    }
    // User: Amazing, I got every information at earliest time!
});

Timer

$id = Swoole\Timer::tick(100, function () {
    echo "⚙️ Do something...\n";
});
Swoole\Timer::after(500, function () use ($id) {
    Swoole\Timer::clear($id);
    echo "⏰ Done\n";
});
Swoole\Timer::after(1000, function () use ($id) {
    if (!Swoole\Timer::exists($id)) {
        echo "✅ All right!\n";
    }
});

The way of coroutine

go(function () {
    $i = 0;
    while (true) {
        Co::sleep(0.1);
        echo "📝 Do something...\n";
        if (++$i === 5) {
            echo "🛎 Done\n";
            break;
        }
    }
    echo "🎉 All right!\n";
});

🔥 Amazing runtime hooks

As of Swoole v4.1.0, we added the ability to transform synchronous PHP network libraries into co-routine libraries using a single line of code.

Simply call the Swoole\Runtime::enableCoroutine() method at the top of your script. In the sample below we connect to php-redis and concurrently read 10k requests in 0.1s:

Swoole\Runtime::enableCoroutine();
$s = microtime(true);
Co\run(function() {
    for ($c = 100; $c--;) {
        go(function () {
            ($redis = new Redis)->connect('127.0.0.1', 6379);
            for ($n = 100; $n--;) {
                assert($redis->get('awesome') === 'swoole');
            }
        });
    }
});
echo 'use ' . (microtime(true) - $s) . ' s';

By calling this method, the Swoole kernel replaces ZendVM stream function pointers. If you use php_stream based extensions, all socket operations can be dynamically converted to be asynchronous IO scheduled by coroutine at runtime!

How many things you can do in 1s?

Sleep 10K times, read, write, check and delete files 10K times, use PDO and MySQLi to communicate with the database 10K times, create a TCP server and multiple clients to communicate with each other 10K times, create a UDP server and multiple clients to communicate with each other 10K times... Everything works well in one process!

Just see what the Swoole brings, just imagine...

Swoole\Runtime::enableCoroutine();
$s = microtime(true);
Co\run(function() {
    // i just want to sleep...
    for ($c = 100; $c--;) {
        go(function () {
            for ($n = 100; $n--;) {
                usleep(1000);
            }
        });
    }

    // 10K file read and write
    for ($c = 100; $c--;) {
        go(function () use ($c) {
            $tmp_filename = "/tmp/test-{$c}.php";
            for ($n = 100; $n--;) {
                $self = file_get_contents(__FILE__);
                file_put_contents($tmp_filename, $self);
                assert(file_get_contents($tmp_filename) === $self);
            }
            unlink($tmp_filename);
        });
    }

    // 10K pdo and mysqli read
    for ($c = 50; $c--;) {
        go(function () {
            $pdo = new PDO('mysql:host=127.0.0.1;dbname=test;charset=utf8', 'root', 'root');
            $statement = $pdo->prepare('SELECT * FROM `user`');
            for ($n = 100; $n--;) {
                $statement->execute();
                assert(count($statement->fetchAll()) > 0);
            }
        });
    }
    for ($c = 50; $c--;) {
        go(function () {
            $mysqli = new Mysqli('127.0.0.1', 'root', 'root', 'test');
            $statement = $mysqli->prepare('SELECT `id` FROM `user`');
            for ($n = 100; $n--;) {
                $statement->bind_result($id);
                $statement->execute();
                $statement->fetch();
                assert($id > 0);
            }
        });
    }

    // php_stream tcp server & client with 12.8K requests in single process
    function tcp_pack(string $data): string
    {
        return pack('n', strlen($data)) . $data;
    }

    function tcp_length(string $head): int
    {
        return unpack('n', $head)[1];
    }

    go(function () {
        $ctx = stream_context_create(['socket' => ['so_reuseaddr' => true, 'backlog' => 128]]);
        $socket = stream_socket_server(
            'tcp://0.0.0.0:9502',
            $errno, $errstr, STREAM_SERVER_BIND | STREAM_SERVER_LISTEN, $ctx
        );
        if (!$socket) {
            echo "$errstr ($errno)\n";
        } else {
            $i = 0;
            while ($conn = stream_socket_accept($socket, 1)) {
                stream_set_timeout($conn, 5);
                for ($n = 100; $n--;) {
                    $data = fread($conn, tcp_length(fread($conn, 2)));
                    assert($data === "Hello Swoole Server #{$n}!");
                    fwrite($conn, tcp_pack("Hello Swoole Client #{$n}!"));
                }
                if (++$i === 128) {
                    fclose($socket);
                    break;
                }
            }
        }
    });
    for ($c = 128; $c--;) {
        go(function () {
            $fp = stream_socket_client("tcp://127.0.0.1:9502", $errno, $errstr, 1);
            if (!$fp) {
                echo "$errstr ($errno)\n";
            } else {
                stream_set_timeout($fp, 5);
                for ($n = 100; $n--;) {
                    fwrite($fp, tcp_pack("Hello Swoole Server #{$n}!"));
                    $data = fread($fp, tcp_length(fread($fp, 2)));
                    assert($data === "Hello Swoole Client #{$n}!");
                }
                fclose($fp);
            }
        });
    }

    // udp server & client with 12.8K requests in single process
    go(function () {
        $socket = new Swoole\Coroutine\Socket(AF_INET, SOCK_DGRAM, 0);
        $socket->bind('127.0.0.1', 9503);
        $client_map = [];
        for ($c = 128; $c--;) {
            for ($n = 0; $n < 100; $n++) {
                $recv = $socket->recvfrom($peer);
                $client_uid = "{$peer['address']}:{$peer['port']}";
                $id = $client_map[$client_uid] = ($client_map[$client_uid] ?? -1) + 1;
                assert($recv === "Client: Hello #{$id}!");
                $socket->sendto($peer['address'], $peer['port'], "Server: Hello #{$id}!");
            }
        }
        $socket->close();
    });
    for ($c = 128; $c--;) {
        go(function () {
            $fp = stream_socket_client("udp://127.0.0.1:9503", $errno, $errstr, 1);
            if (!$fp) {
                echo "$errstr ($errno)\n";
            } else {
                for ($n = 0; $n < 100; $n++) {
                    fwrite($fp, "Client: Hello #{$n}!");
                    $recv = fread($fp, 1024);
                    list($address, $port) = explode(':', (stream_socket_get_name($fp, true)));
                    assert($address === '127.0.0.1' && (int)$port === 9503);
                    assert($recv === "Server: Hello #{$n}!");
                }
                fclose($fp);
            }
        });
    }
});
echo 'use ' . (microtime(true) - $s) . ' s';

⌛️ Installation

As with any open source project, Swoole always provides the most reliable stability and the most powerful features in the latest released version. Please ensure as much as possible that you are using the latest version.

Compiling requirements

  • Linux, OS X or Cygwin, WSL
  • PHP 7.2.0 or later (The higher the version, the better the performance.)
  • GCC 4.8 or later

1. Install via PECL (beginners)

pecl install swoole

2. Install from source (recommended)

Please download the source packages from Releases or:

git clone https://github.com/swoole/swoole-src.git && \
cd swoole-src

Compile and install at the source folder:

phpize && \
./configure && \
make && make install

Enable extension in PHP

After compiling and installing to the system successfully, you have to add a new line extension=swoole.so to php.ini to enable Swoole extension.

Extra compiler configurations

for example: ./configure --enable-openssl --enable-sockets

  • --enable-openssl or --with-openssl-dir=DIR
  • --enable-sockets
  • --enable-mysqlnd (need mysqlnd, it just for supporting $mysql->escape method)
  • --enable-swoole-curl

Upgrade

⚠️ If you upgrade from source, don't forget to make clean before you upgrade your swoole

  1. pecl upgrade swoole
  2. cd swoole-src && git pull && make clean && make && sudo make install
  3. if you change your PHP version, please re-run phpize clean && phpize then try to compile

Major change since version 4.3.0

Async clients and API are moved to a separate PHP extension swoole_async since version 4.3.0, install swoole_async:

git clone https://github.com/swoole/ext-async.git
cd ext-async
phpize
./configure
make -j 4
sudo make install

Enable it by adding a new line extension=swoole_async.so to php.ini.

🍭 Benchmark

  • On the open source Techempower Web Framework benchmarks Swoole used MySQL database benchmark to rank first, and all performance tests ranked in the first echelon.
  • You can just run Benchmark Script to quickly test the maximum QPS of Swoole-HTTP-Server on your machine.

🔰️ Security issues

Security issues should be reported privately, via email, to the Swoole develop team [email protected]. You should receive a response within 24 hours. If for some reason you do not, please follow up via email to ensure we received your original message.

🖊️ Contribution

Your contribution to Swoole development is very welcome!

You may contribute in the following ways:

❤️ Contributors

This project exists thanks to all the people who contribute. [Contributors].

🎙️ Official Evangelist

Demin has been playing with PHP since 2000, focusing on building high-performance, secure web services. He is an occasional conference speaker on PHP and Swoole, and has been working for companies in the states like eBay, Visa and Glu Mobile for years. You may find Demin on Twitter or GitHub.

📃 License

Apache License Version 2.0 see http://www.apache.org/licenses/LICENSE-2.0.html

phpx's People

Contributors

deminy avatar heyanlong avatar kong36088 avatar limingxinleo avatar matyhtf avatar owenliang avatar shiguangqi avatar yurunsoft avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

phpx's Issues

libphpx.so: cannot open shared object file

按照文档的说明,一直到最后php echo.php时,提示这样的错误:
Warning: PHP Startup: Unable to load dynamic library '/usr/local/php/lib/php/extensions/no-debug-non-zts-20151012/cpp_ext.so' - libphpx.so: cannot open shared object file: No such file or directory in Unknown on line 0
而这个扩展文件 /usr/local/php/lib/php/extensions/no-debug-non-zts-20151012/cpp_ext.so 是存在的,这是什么问题呢?

php 版本7.0.19
gcc 版本4.8.0

mac编译libphpx.so报错

php是7.2
用的macos
gcc是9.4
composer是2.1.1

执行make -j 4报错:
➜ phpx-0.3.0 make -j 4
Consolidate compiler generated dependencies of target phpx
Consolidate compiler generated dependencies of target phpx_static
[ 4%] Building CXX object CMakeFiles/phpx_static.dir/src/extension.o
[ 9%] Building CXX object CMakeFiles/phpx.dir/src/extension.o
[ 13%] Building CXX object CMakeFiles/phpx.dir/src/variant.o
[ 18%] Building CXX object CMakeFiles/phpx_static.dir/src/variant.o
In file included from /Users/admin/Downloads/phpx-0.3.0/src/extension.cc:17:
In file included from /Users/admin/Downloads/phpx-0.3.0/include/phpx.h:20:
In file included from /usr/local/Cellar/[email protected]/7.2.34_4/include/php/main/php.h:35:
In file included from /usr/local/Cellar/[email protected]/7.2.34_4/include/php/Zend/zend.h:328:
/usr/local/Cellar/[email protected]/7.2.34_4/include/php/Zend/zend_operators.h:114:18: warning: 'finite' is deprecated: first deprecated in macOS
10.9 - Use isfinite((double)x) instead. [-Wdeprecated-declarations]
if (UNEXPECTED(!zend_finite(d)) || UNEXPECTED(zend_isnan(d))) {
^
/usr/local/Cellar/[email protected]/7.2.34_4/include/php/main/php_config.h:2675:24: note: expanded from macro 'zend_finite'
#define zend_finite(a) finite(a)
^
/Library/Developer/CommandLineTools/SDKs/MacOSX10.15.sdk/usr/include/math.h:749:12: note: 'finite' has been explicitly marked deprecated
here
extern int finite(double)
^
In file included from /Users/admin/Downloads/phpx-0.3.0/src/extension.cc:17:
In file included from /Users/admin/Downloads/phpx-0.3.0/include/phpx.h:20:
In file included from /usr/local/Cellar/[email protected]/7.2.34_4/include/php/main/php.h:35:
In file included from /usr/local/Cellar/[email protected]/7.2.34_4/include/php/Zend/zend.h:328:
/usr/local/Cellar/[email protected]/7.2.34_4/include/php/Zend/zend_operators.h:125:18: warning: 'finite' is deprecated: first deprecated in macOS
10.9 - Use isfinite((double)x) instead. [-Wdeprecated-declarations]
if (UNEXPECTED(!zend_finite(d)) || UNEXPECTED(zend_isnan(d))) {
^
/usr/local/Cellar/[email protected]/7.2.34_4/include/php/main/php_config.h:2675:24: note: expanded from macro 'zend_finite'
#define zend_finite(a) finite(a)
^
/Library/Developer/CommandLineTools/SDKs/MacOSX10.15.sdk/usr/include/math.h:749:12: note: 'finite' has been explicitly marked deprecated
here
extern int finite(double)
^
In file included from /Users/admin/Downloads/phpx-0.3.0/src/variant.cc:17:
In file included from /Users/admin/Downloads/phpx-0.3.0/include/phpx.h:20:
In file included from /usr/local/Cellar/[email protected]/7.2.34_4/include/php/main/php.h:35:
In file included from /usr/local/Cellar/[email protected]/7.2.34_4/include/php/Zend/zend.h:328:
/usr/local/Cellar/[email protected]/7.2.34_4/include/php/Zend/zend_operators.h:114:18: warning: 'finite' is deprecated: first deprecated in macOS
10.9 - Use isfinite((double)x) instead. [-Wdeprecated-declarations]
if (UNEXPECTED(!zend_finite(d)) || UNEXPECTED(zend_isnan(d))) {
^
/usr/local/Cellar/[email protected]/7.2.34_4/include/php/main/php_config.h:2675:24: note: expanded from macro 'zend_finite'
#define zend_finite(a) finite(a)
^
/Library/Developer/CommandLineTools/SDKs/MacOSX10.15.sdk/usr/include/math.h:749:12: note: 'finite' has been explicitly marked deprecated
here
extern int finite(double)
^
In file included from /Users/admin/Downloads/phpx-0.3.0/src/variant.cc:17:
In file included from /Users/admin/Downloads/phpx-0.3.0/include/phpx.h:20:
In file included from /usr/local/Cellar/[email protected]/7.2.34_4/include/php/main/php.h:35:
In file included from /usr/local/Cellar/[email protected]/7.2.34_4/include/php/Zend/zend.h:328:
/usr/local/Cellar/[email protected]/7.2.34_4/include/php/Zend/zend_operators.h:125:18: warning: 'finite' is deprecated: first deprecated in macOS
10.9 - Use isfinite((double)x) instead. [-Wdeprecated-declarations]
if (UNEXPECTED(!zend_finite(d)) || UNEXPECTED(zend_isnan(d))) {
^
/usr/local/Cellar/[email protected]/7.2.34_4/include/php/main/php_config.h:2675:24: note: expanded from macro 'zend_finite'
#define zend_finite(a) finite(a)
^
/Library/Developer/CommandLineTools/SDKs/MacOSX10.15.sdk/usr/include/math.h:749:12: note: 'finite' has been explicitly marked deprecated
here
extern int finite(double)
^
In file included from /Users/admin/Downloads/phpx-0.3.0/src/extension.cc:17:
In file included from /Users/admin/Downloads/phpx-0.3.0/include/phpx.h:20:
In file included from /usr/local/Cellar/[email protected]/7.2.34_4/include/php/main/php.h:35:
In file included from /usr/local/Cellar/[email protected]/7.2.34_4/include/php/Zend/zend.h:328:
/usr/local/Cellar/[email protected]/7.2.34_4/include/php/Zend/zend_operators.h:114:18: warning: 'finite' is deprecated: first deprecated in macOS
10.9 - Use isfinite((double)x) instead. [-Wdeprecated-declarations]
if (UNEXPECTED(!zend_finite(d)) || UNEXPECTED(zend_isnan(d))) {
^
/usr/local/Cellar/[email protected]/7.2.34_4/include/php/main/php_config.h:2675:24: note: expanded from macro 'zend_finite'
#define zend_finite(a) finite(a)
^
/Library/Developer/CommandLineTools/SDKs/MacOSX10.15.sdk/usr/include/math.h:749:12: note: 'finite' has been explicitly marked deprecated
here
extern int finite(double)
^
In file included from /Users/admin/Downloads/phpx-0.3.0/src/extension.cc:17:
In file included from /Users/admin/Downloads/phpx-0.3.0/include/phpx.h:20:
In file included from /usr/local/Cellar/[email protected]/7.2.34_4/include/php/main/php.h:35:
In file included from /usr/local/Cellar/[email protected]/7.2.34_4/include/php/Zend/zend.h:328:
/usr/local/Cellar/[email protected]/7.2.34_4/include/php/Zend/zend_operators.h:125:18: warning: 'finite' is deprecated: first deprecated in macOS
10.9 - Use isfinite((double)x) instead. [-Wdeprecated-declarations]
if (UNEXPECTED(!zend_finite(d)) || UNEXPECTED(zend_isnan(d))) {
In file included from ^
/Users/admin/Downloads/phpx-0.3.0/src/variant.cc:17:
In file included from /Users/admin/Downloads/phpx-0.3.0/include/phpx.h:20/usr/local/Cellar/[email protected]/7.2.34_4/include/php/main/php_config.h:
:In file included from 2675/usr/local/Cellar/[email protected]/7.2.34_4/include/php/main/php.h::2435::
In file included from /usr/local/Cellar/[email protected]/7.2.34_4/include/php/Zend/zend.h:note328: :
expanded from /usr/local/Cellar/[email protected]/7.2.34_4/include/php/Zend/zend_operators.hmacro: 114'zend_finite':18
: warning: 'finite' is deprecated: first deprecated in macOS
#define zend_finite(a) finite(a)
10.9 ^-
Use isfinite((double)x) instead. [-Wdeprecated-declarations]
/Library/Developer/CommandLineTools/SDKs/MacOSX10.15.sdk/usr/include/math.h:749:12: note: 'finite' has been explicitly marked deprecated
here
extern int finite(double)
^
if (UNEXPECTED(!zend_finite(d)) || UNEXPECTED(zend_isnan(d))) {
^
/usr/local/Cellar/[email protected]/7.2.34_4/include/php/main/php_config.h:2675:24: note: expanded from macro 'zend_finite'
#define zend_finite(a) finite(a)
^
/Library/Developer/CommandLineTools/SDKs/MacOSX10.15.sdk/usr/include/math.h:749:12: note: 'finite' has been explicitly marked deprecated
here
extern int finite(double)
^
In file included from /Users/admin/Downloads/phpx-0.3.0/src/variant.cc:17:
In file included from /Users/admin/Downloads/phpx-0.3.0/include/phpx.h:20:
In file included from /usr/local/Cellar/[email protected]/7.2.34_4/include/php/main/php.h:35:
In file included from /usr/local/Cellar/[email protected]/7.2.34_4/include/php/Zend/zend.h:328:
/usr/local/Cellar/[email protected]/7.2.34_4/include/php/Zend/zend_operators.h:125:18: warning: 'finite' is deprecated: first deprecated in macOS
10.9 - Use isfinite((double)x) instead. [-Wdeprecated-declarations]
if (UNEXPECTED(!zend_finite(d)) || UNEXPECTED(zend_isnan(d))) {
^
/usr/local/Cellar/[email protected]/7.2.34_4/include/php/main/php_config.h:2675:24: note: expanded from macro 'zend_finite'
#define zend_finite(a) finite(a)
^
/Library/Developer/CommandLineTools/SDKs/MacOSX10.15.sdk/usr/include/math.h:749:12: note: 'finite' has been explicitly marked deprecated
here
extern int finite(double)
^
In file included from /Users/admin/Downloads/phpx-0.3.0/src/extension.cc:17:
/Users/admin/Downloads/phpx-0.3.0/include/phpx.h:329:20: warning: 'this' pointer cannot be null in well-defined C++ code; pointer may be
assumed to always convert to true [-Wundefined-bool-conversion]
return this;
^~~~
In file included from /Users/admin/Downloads/phpx-0.3.0/src/variant.cc:17:
/Users/admin/Downloads/phpx-0.3.0/include/phpx.h:329:20: warning: 'this' pointer cannot be null in well-defined C++ code; pointer may be
assumed to always convert to true [-Wundefined-bool-conversion]
return this;
^~~~
In file included from /Users/admin/Downloads/phpx-0.3.0/src/extension.cc:17:
/Users/admin/Downloads/phpx-0.3.0/include/phpx.h:329:20: warning: 'this' pointer cannot be null in well-defined C++ code; pointer may be
assumed to always convert to true [-Wundefined-bool-conversion]
return this;
^~~~
In file included from /Users/admin/Downloads/phpx-0.3.0/src/variant.cc:17:
/Users/admin/Downloads/phpx-0.3.0/include/phpx.h:329:20: warning: 'this' pointer cannot be null in well-defined C++ code; pointer may be
assumed to always convert to true [-Wundefined-bool-conversion]
return this;
^~~~
/Users/admin/Downloads/phpx-0.3.0/src/extension.cc:159:13: error: non-constant-expression cannot be narrowed from type 'uint32_t'
(aka 'unsigned int') to 'int' in initializer list [-Wc++11-narrowing]
(uint32_t) entry.modifiable, // modifiable
^~~~~~~~~~~~~~~~~~~~~~~~~~~
/Users/admin/Downloads/phpx-0.3.0/src/extension.cc:159:13: note: insert an explicit cast to silence this issue
(uint32_t) entry.modifiable, // modifiable
^~~~~~~~~~~~~~~~~~~~~~~~~~~
static_cast( )
/Users/admin/Downloads/phpx-0.3.0/src/extension.cc:159:13: error: non-constant-expression cannot be narrowed from type 'uint32_t'
(aka 'unsigned int') to 'int' in initializer list [-Wc++11-narrowing]
(uint32_t) entry.modifiable, // modifiable
^~~~~~~~~~~~~~~~~~~~~~~~~~~
/Users/admin/Downloads/phpx-0.3.0/src/extension.cc:159:13: note: insert an explicit cast to silence this issue
(uint32_t) entry.modifiable, // modifiable
^~~~~~~~~~~~~~~~~~~~~~~~~~~
static_cast( )
3 warnings generated.
3 warnings generated.
3 warnings and 1 error generated.
3 warnings and 1 error generated.
make[2]: *** [CMakeFiles/phpx.dir/src/extension.o] Error 1
make[1]: *** [CMakeFiles/phpx.dir/all] Error 2
make[1]: *** Waiting for unfinished jobs....
make[2]: *** [CMakeFiles/phpx_static.dir/src/extension.o] Error 1
make[1]: *** [CMakeFiles/phpx_static.dir/all] Error 2
make: *** [all] Error 2

install cpp_ext.so error

PHP Startup: Unable to load dynamic library '/usr/lib/php/20160303/cpp_ext.so' - /usr/local/lib/libphpx.so: undefined symbol: json_globals in Unknown on line 0

/workspace/php/PHP-X$ php -v
PHP Warning: PHP Startup: Unable to load dynamic library '/usr/lib/php/20160303/cpp_ext.so' - /usr/local/lib/libphpx.so: undefined symbol: json_globals in Unknown on line 0
PHP 7.1.8-1ubuntu1 (cli) (built: Aug 8 2017 15:57:37) ( NTS )
Copyright (c) 1997-2017 The PHP Group
Zend Engine v3.1.0, Copyright (c) 1998-2017 Zend Technologies
with Zend OPcache v7.1.8-1ubuntu1, Copyright (c) 1999-2017, by Zend Technologies

=========================
找到问题了, 加载顺序问题, 应该先加载json.so

global函数内存泄露

函数global忘记zend_string_free(key)。

另外,global没有支持_SERVER这种非自动注册变量的加载。

PHPX +swoole_zookeeper 无法使用

大神您好
编译安装新版phpx后,再重新编译 swoole_zookeeper
在查看 PHP 信息时报错,无法使用

php -v
php: malloc.c:2401: sysmalloc: Assertion `(old_top == initial_top (av) && old_size == 0) || ((unsigned long) (old_size) >= MINSIZE && prev_inuse (old_top) && ((unsigned long) old_end & (pagesize - 1)) == 0)' failed.

去掉 swoole_zookeeper 扩展后才能正常

自定义类问题

自定义类可以派生自PHP内置类,或实现内置接口吗?
比如我希望我的类能实现类似PHP中
class Test implements ArrayAccess 或
class Pool extends SplQueue
只能定义孤立的类吗?

PHP 7.28编译make -j报错

[root@dairh phpx-0.0.2]# make -j
[ 12%] Building CXX object CMakeFiles/phpx.dir/src/array.cc.o
[ 25%] Building CXX object CMakeFiles/phpx.dir/src/base.cc.o
[ 37%] Building CXX object CMakeFiles/phpx.dir/src/class.cc.o
[ 50%] Building CXX object CMakeFiles/phpx.dir/src/extension.cc.o
[ 62%] Building CXX object CMakeFiles/phpx.dir/src/hash.cc.o
[ 75%] Building CXX object CMakeFiles/phpx.dir/src/string.cc.o
[ 87%] Building CXX object CMakeFiles/phpx.dir/src/variant.cc.o
In file included from /root/phpx-0.0.2/src/extension.cc:17:0:
/root/phpx-0.0.2/include/phpx.h:21:17: 致命错误:php.h:没有那个文件或目录
#include "php.h"
^
编译中断。
In file included from /root/phpx-0.0.2/src/array.cc:17:0:
/root/phpx-0.0.2/include/phpx.h:21:17: 致命错误:php.h:没有那个文件或目录
#include "php.h"
^
编译中断。
In file included from /root/phpx-0.0.2/src/string.cc:17:0:
/root/phpx-0.0.2/include/phpx.h:21:17: 致命错误:php.h:没有那个文件或目录
#include "php.h"
^
编译中断。
In file included from /root/phpx-0.0.2/src/class.cc:17:0:
/root/phpx-0.0.2/include/phpx.h:21:17: 致命错误:php.h:没有那个文件或目录
#include "php.h"
^
编译中断。
make[2]: *** [CMakeFiles/phpx.dir/src/class.cc.o] 错误 1
make[2]: *** 正在等待未完成的任务....
In file included from /root/phpx-0.0.2/src/hash.cc:17:0:
/root/phpx-0.0.2/include/phpx.h:21:17: 致命错误:php.h:没有那个文件或目录
#include "php.h"
^
编译中断。
In file included from /root/phpx-0.0.2/src/variant.cc:17:0:
/root/phpx-0.0.2/include/phpx.h:21:17: 致命错误:php.h:没有那个文件或目录
#include "php.h"
^
编译中断。
make[2]: *** [CMakeFiles/phpx.dir/src/variant.cc.o] 错误 1
In file included from /root/phpx-0.0.2/src/base.cc:17:0:
/root/phpx-0.0.2/include/phpx.h:21:17: 致命错误:php.h:没有那个文件或目录
#include "php.h"
^
编译中断。
make[2]: *** [CMakeFiles/phpx.dir/src/base.cc.o] 错误 1
make[2]: *** [CMakeFiles/phpx.dir/src/extension.cc.o] 错误 1
make[2]: *** [CMakeFiles/phpx.dir/src/string.cc.o] 错误 1
make[2]: *** [CMakeFiles/phpx.dir/src/array.cc.o] 错误 1
make[2]: *** [CMakeFiles/phpx.dir/src/hash.cc.o] 错误 1
make[1]: *** [CMakeFiles/phpx.dir/all] 错误 2
make: *** [all] 错误 2

Mac cmake fail

mac version : 10.14.6
php version:
PHP 7.1.23 (cli) (built: Feb 22 2019 22:19:32) ( NTS )
Copyright (c) 1997-2018 The PHP Group
Zend Engine v3.1.0, Copyright (c) 1998-2018 Zend Technologies

grantMac:phpx zch$ cmake .
CMake Error at CMakeLists.txt:28 (execute_process):
execute_process called with no value for OUTPUT_VARIABLE.

PHP_INCLUDE_DIR: /usr/include/php
-undefined dynamic_lookup
-- Configuring incomplete, errors occurred!

Variant作为函数返回值

以Object的get方法为例:

 inline Variant get(const char *name)
    {
        Variant retval;
        zval rv;
        zval *member_p = zend_read_property(Z_OBJCE_P(ptr()), ptr(), name, strlen(name), 0, &rv);
        if (member_p != &rv)
        {
            ZVAL_COPY(retval.ptr(), member_p);
        }
        else
        {
            ZVAL_COPY_VALUE(retval.ptr(), member_p);
        }
        return retval;
    }

我这样接收返回值:

Variant a = _this.get("domain");

按照我的理解,a会浅复制get的返回值Variant,然后返回值Varient析构和a析构会对zval形成2次释放。

但是实际上并没有发生double free,求分析一下。

PHP8

Is this compatible with PHP8 yet?

ubuntu 上编译报错

c++ -DHAVE_CONFIG_H -g -o cpp_ext.so -O0 -fPIC -shared extension.cpp -std=c++11 -lphpx php-config --includes -Iphp-config --include-dir
/usr/bin/ld: 找不到 -lphpx
collect2: error: ld returned 1 exit status
Makefile:8: recipe for target 'cpp_ext.so' failed
make: *** [cpp_ext.so] Error 1

undefined symbol: json_globals in Unknown on line 0

input

php -v

got

PHP Warning:  PHP Startup: Unable to load dynamic library '/usr/local/php7.1/lib/php/extensions/no-debug-zts-20160303/cpp_ext.so' - /usr/local/lib/libphpx.so: undefined symbol: json_globals in Unknown on line 0
PHP 7.1.12 (cli) (built: Nov 29 2017 15:48:46) ( ZTS )
Copyright (c) 1997-2017 The PHP Group
Zend Engine v3.1.0, Copyright (c) 1998-2017 Zend Technologies

对函数参数个数进行指定无效的问题

对于demo中定义的cpp_ext_test函数,以及我对其进行了入参限制

//函数定义
PHPX_FUNCTION(cpp_ext_test) {
    for (int i = 0; i < args.count(); i++) {
        cout << "值:" << args[i].toString() << endl;
        // cout << args[i].type() << endl;
    }
    retval = nullptr;
}

//注册函数
    ArgInfo *argInfo = new ArgInfo(2);
    argInfo->add("v1", nullptr, IS_ARRAY);
    argInfo->add("v2");
    extension->registerFunction(PHPX_FN(cpp_ext_test), argInfo);

我的测试文件,echo.php

var_dump(cpp_ext_test([], 42.33, "jjj"));
ReflectionFunction::export("cpp_ext_test");

输出结果是

值:Array
值:42.33
值:jjj
NULL
Function [ <internal:cpp_ext> function cpp_ext_test ] {

  - Parameters [2] {
    Parameter #0 [ <required> array $v1 ]
    Parameter #1 [ <required> $v2 ]
  }
}

可以看到ArgsInfo中对参数类型的限制可以生效,但是对于参数个数并没有办法去限制(设置参数限制为2但是传入3个参数并无报错)。我在命令行输出中没有看到任何warning信息(我可以保证我本地php环境输出了所有的错误信息)

不知道上述碰到的问题是否为PHP-X本身的一个BUG?
如果有什么不对的地方还请不吝赐教。

Symbol not found: _basic_globals

./embed
dyld: Symbol not found: _basic_globals
Referenced from: /usr/local/lib/libphpx.dylib
Expected in: flat namespace
in /usr/local/lib/libphpx.dylib
[1] 6495 abort ./embed

cannot open shared object file: No such file or directory in Unknown on line 0

安装README.md操作,在php echo.php时。 报出如下错误
PHP Warning: PHP Startup: Unable to load dynamic library '/usr/local/php7/lib/php/extensions/no-debug-non-zts-20160303/cpp_ext.so' - libphpx.so: cannot open shared object file: No such file or directory in Unknown on line 0

Warning: PHP Startup: Unable to load dynamic library '/usr/local/php7/lib/php/extensions/no-debug-non-zts-20160303/cpp_ext.so' - libphpx.so: cannot open shared object file: No such file or directory in Unknown on line 0

安装php7-devel

添加Webtatic EL yum源头
CentOS/RHEL 7.x:

rpm -Uvh https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm
rpm -Uvh https://mirror.webtatic.com/yum/el7/webtatic-release.rpm

CentOS/RHEL 6.x:

rpm -Uvh https://dl.fedoraproject.org/pub/epel/epel-release-latest-6.noarch.rpm
rpm -Uvh https://mirror.webtatic.com/yum/el6/latest.rpm

然后安装

yum install php70w-devel

macOS 10.13 Symbol not found

wenchao @ MacBook-Pro in ~/PHP-X/examples/embed on git:master x

➜ make
c++ -DHAVE_CONFIG_H -g -o embed -O0 embed.cc -fPIC -std=c++11 php-config --includes -Iphp-config --include-dir
php-config --ldflags php-config --libs -lphpx -lphp7
In file included from embed.cc:17:
In file included from ./phpx_embed.h:23:
In file included from ./sapi/embed/php_embed.h:23:
In file included from /usr/local/Cellar/php70/7.0.25_17/include/php/main/php.h:35:
In file included from /usr/local/Cellar/php70/7.0.25_17/include/php/Zend/zend.h:35:
/usr/local/Cellar/php70/7.0.25_17/include/php/Zend/zend_string.h:326:2: warning: 'register' storage class specifier is deprecated and incompatible with C++1z [-Wdeprecated-register]
register zend_ulong hash = Z_UL(5381);
^~~~~~~~~
In file included from embed.cc:17:
In file included from ./phpx_embed.h:23:
In file included from ./sapi/embed/php_embed.h:23:
In file included from /usr/local/Cellar/php70/7.0.25_17/include/php/main/php.h:35:
In file included from /usr/local/Cellar/php70/7.0.25_17/include/php/Zend/zend.h:36:
/usr/local/Cellar/php70/7.0.25_17/include/php/Zend/zend_hash.h:251:2: warning: 'register' storage class specifier is deprecated and incompatible with C++1z [-Wdeprecated-register]
register const char *tmp = key;
^~~~~~~~~
In file included from embed.cc:17:
In file included from ./phpx_embed.h:23:
In file included from ./sapi/embed/php_embed.h:23:
In file included from /usr/local/Cellar/php70/7.0.25_17/include/php/main/php.h:35:
In file included from /usr/local/Cellar/php70/7.0.25_17/include/php/Zend/zend.h:342:
/usr/local/Cellar/php70/7.0.25_17/include/php/Zend/zend_operators.h:188:2: warning: 'register' storage class specifier is deprecated and incompatible with C++1z [-Wdeprecated-register]
register const unsigned char *e;
^~~~~~~~~
3 warnings generated.

wenchao @ MacBook-Pro in ~/PHP-X/examples/embed on git:master x

➜ ./embed
dyld: Symbol not found: _basic_globals
Referenced from: /usr/local/lib/libphpx.dylib
Expected in: flat namespace
in /usr/local/lib/libphpx.dylib
[1] 47273 abort ./embed

PHP8.0 编译失败

因为报错过长,这里只放了后面一部分

In file included from /usr/local/php8/include/php/ext/standard/php_standard.h:19,
                 from /opt/m/phpx/include/phpx.h:46,
                 from /opt/m/phpx/src/base.cc:17:
/usr/local/php8/include/php/ext/standard/php_string.h:56:62: note:   initializing argument 2 of 'void php_implode(const zend_string*, HashTable*, zval*)'
 PHPAPI void php_implode(const zend_string *delim, HashTable *arr, zval *return_value);
                                                   ~~~~~~~~~~~^~~
In file included from /usr/local/php8/include/php/Zend/zend.h:33,
                 from /usr/local/php8/include/php/main/php.h:31,
                 from /opt/m/phpx/include/phpx.h:21,
                 from /opt/m/phpx/src/base.cc:17:
/opt/m/phpx/include/phpx.h: In member function 'bool php::Array::sort()':
/opt/m/phpx/include/phpx.h:1059:50: error: invalid conversion from 'int (*)(const void*, const void*)' to 'bucket_compare_func_t' {aka 'int (*)(_Bucket*, _Bucket*)'} [-fpermissive]
         return zend_hash_sort(Z_ARRVAL_P(ptr()), array_data_compare, 1) == SUCCESS;
                                                  ^~~~~~~~~~~~~~~~~~
/usr/local/php8/include/php/Zend/zend_hash.h:272:35: note: in definition of macro 'zend_hash_sort'
  zend_hash_sort_ex(ht, zend_sort, compare_func, renumber)
                                   ^~~~~~~~~~~~
/usr/local/php8/include/php/Zend/zend_hash.h:268:108: note:   initializing argument 3 of 'void zend_hash_sort_ex(HashTable*, sort_func_t, bucket_compare_func_t, zend_bool)'
 ZEND_API void  ZEND_FASTCALL zend_hash_sort_ex(HashTable *ht, sort_func_t sort_func, bucket_compare_func_t compare_func, zend_bool renumber);
                                                                                      ~~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~
In file included from /opt/m/phpx/src/base.cc:17:
/opt/m/phpx/include/phpx.h:1059:73: error: no match for 'operator==' (operand types are 'void' and 'ZEND_RESULT_CODE')
         return zend_hash_sort(Z_ARRVAL_P(ptr()), array_data_compare, 1) == SUCCESS;
/opt/m/phpx/include/phpx.h: In destructor 'php::ArgInfo::~ArgInfo()':
/opt/m/phpx/include/phpx.h:1174:17: error: 'ZEND_TYPE_IS_CLASS' was not declared in this scope
             if (ZEND_TYPE_IS_CLASS(info[i].type))
                 ^~~~~~~~~~~~~~~~~~
/opt/m/phpx/include/phpx.h: In destructor 'php::ArgInfo::~ArgInfo()':
/opt/m/phpx/include/phpx.h:1174:17: error: 'ZEND_TYPE_IS_CLASS' was not declared in this scope
             if (ZEND_TYPE_IS_CLASS(info[i].type))
                 ^~~~~~~~~~~~~~~~~~
/opt/m/phpx/include/phpx.h:1174:17: note: suggested alternative: 'ZEND_TYPE_HAS_CLASS'
             if (ZEND_TYPE_IS_CLASS(info[i].type))
                 ^~~~~~~~~~~~~~~~~~
                 ZEND_TYPE_HAS_CLASS
In file included from /usr/local/php8/include/php/Zend/zend.h:30,
                 from /usr/local/php8/include/php/main/php.h:31,
                 from /opt/m/phpx/include/phpx.h:21,
                 from /opt/m/phpx/src/class.cc:17:
/opt/m/phpx/include/phpx.h:1176:39: error: invalid cast from type 'zend_type' to type 'void*'
                 efree((void* )info[i].type);
                                       ^~~~
/usr/local/php8/include/php/Zend/zend_alloc.h:161:34: note: in definition of macro 'efree'
 #define efree(ptr)       _efree((ptr) ZEND_FILE_LINE_CC ZEND_FILE_LINE_EMPTY_CC)
                                  ^~~
In file included from /opt/m/phpx/src/class.cc:17:
/opt/m/phpx/include/phpx.h: In member function 'void php::ArgInfo::add(const char*, const char*, int, bool, bool, bool)':
/opt/m/phpx/include/phpx.h:1195:36: error: no matching function for call to 'zend_type::zend_type(char*&)'
                 type = (zend_type) _s;
                                    ^~
In file included from /usr/local/php8/include/php/Zend/zend.h:27,
                 from /usr/local/php8/include/php/main/php.h:31,
                 from /opt/m/phpx/include/phpx.h:21,
                 from /opt/m/phpx/src/class.cc:17:
/usr/local/php8/include/php/Zend/zend_types.h:134:3: note: candidate: 'zend_type::zend_type()'
 } zend_type;
   ^~~~~~~~~
/usr/local/php8/include/php/Zend/zend_types.h:134:3: note:   candidate expects 0 arguments, 1 provided
/usr/local/php8/include/php/Zend/zend_types.h:134:3: note: candidate: 'constexpr zend_type::zend_type(const zend_type&)'
/usr/local/php8/include/php/Zend/zend_types.h:134:3: note:   no known conversion for argument 1 from 'char*' to 'const zend_type&'
/usr/local/php8/include/php/Zend/zend_types.h:134:3: note: candidate: 'constexpr zend_type::zend_type(zend_type&&)'
/usr/local/php8/include/php/Zend/zend_types.h:134:3: note:   no known conversion for argument 1 from 'char*' to 'zend_type&&'
In file included from /usr/local/php8/include/php/Zend/zend.h:30,
                 from /usr/local/php8/include/php/main/php.h:31,
                 from /opt/m/phpx/include/phpx.h:21,
                 from /opt/m/phpx/src/class.cc:17:
/usr/local/php8/include/php/Zend/zend_alloc.h:170:80: error: no matching function for call to 'zend_type::zend_type(char*)'
 #define estrdup(s)       _estrdup((s) ZEND_FILE_LINE_CC ZEND_FILE_LINE_EMPTY_CC)
                                                                                ^
/opt/m/phpx/include/phpx.h:1199:36: note: in expansion of macro 'estrdup'
                 type = (zend_type) estrdup(class_name);
                                    ^~~~~~~
In file included from /usr/local/php8/include/php/Zend/zend.h:27,
                 from /usr/local/php8/include/php/main/php.h:31,
                 from /opt/m/phpx/include/phpx.h:21,
                 from /opt/m/phpx/src/class.cc:17:
/usr/local/php8/include/php/Zend/zend_types.h:134:3: note: candidate: 'zend_type::zend_type()'
 } zend_type;
   ^~~~~~~~~
/usr/local/php8/include/php/Zend/zend_types.h:134:3: note:   candidate expects 0 arguments, 1 provided
/usr/local/php8/include/php/Zend/zend_types.h:134:3: note: candidate: 'constexpr zend_type::zend_type(const zend_type&)'
/usr/local/php8/include/php/Zend/zend_types.h:134:3: note:   no known conversion for argument 1 from 'char*' to 'const zend_type&'
/usr/local/php8/include/php/Zend/zend_types.h:134:3: note: candidate: 'constexpr zend_type::zend_type(zend_type&&)'
/usr/local/php8/include/php/Zend/zend_types.h:134:3: note:   no known conversion for argument 1 from 'char*' to 'zend_type&&'
In file included from /opt/m/phpx/src/class.cc:17:
/opt/m/phpx/include/phpx.h:1204:20: error: 'ZEND_TYPE_ENCODE' was not declared in this scope
             type = ZEND_TYPE_ENCODE(type_hint, allow_null);
                    ^~~~~~~~~~~~~~~~
/opt/m/phpx/include/phpx.h:1174:17: note: suggested alternative: 'ZEND_TYPE_HAS_CLASS'
             if (ZEND_TYPE_IS_CLASS(info[i].type))
                 ^~~~~~~~~~~~~~~~~~
                 ZEND_TYPE_HAS_CLASS
In file included from /usr/local/php8/include/php/Zend/zend.h:30,
                 from /usr/local/php8/include/php/main/php.h:31,
                 from /opt/m/phpx/include/phpx.h:21,
                 from /opt/m/phpx/src/base.cc:17:
/opt/m/phpx/include/phpx.h:1176:39: error: invalid cast from type 'zend_type' to type 'void*'
                 efree((void* )info[i].type);
                                       ^~~~
/usr/local/php8/include/php/Zend/zend_alloc.h:161:34: note: in definition of macro 'efree'
 #define efree(ptr)       _efree((ptr) ZEND_FILE_LINE_CC ZEND_FILE_LINE_EMPTY_CC)
                                  ^~~
In file included from /opt/m/phpx/src/base.cc:17:
/opt/m/phpx/include/phpx.h: In member function 'void php::ArgInfo::add(const char*, const char*, int, bool, bool, bool)':
/opt/m/phpx/include/phpx.h:1195:36: error: no matching function for call to 'zend_type::zend_type(char*&)'
                 type = (zend_type) _s;
                                    ^~
In file included from /usr/local/php8/include/php/Zend/zend.h:27,
                 from /usr/local/php8/include/php/main/php.h:31,
                 from /opt/m/phpx/include/phpx.h:21,
                 from /opt/m/phpx/src/base.cc:17:
/usr/local/php8/include/php/Zend/zend_types.h:134:3: note: candidate: 'zend_type::zend_type()'
 } zend_type;
   ^~~~~~~~~
/usr/local/php8/include/php/Zend/zend_types.h:134:3: note:   candidate expects 0 arguments, 1 provided
/usr/local/php8/include/php/Zend/zend_types.h:134:3: note: candidate: 'constexpr zend_type::zend_type(const zend_type&)'
/usr/local/php8/include/php/Zend/zend_types.h:134:3: note:   no known conversion for argument 1 from 'char*' to 'const zend_type&'
/usr/local/php8/include/php/Zend/zend_types.h:134:3: note: candidate: 'constexpr zend_type::zend_type(zend_type&&)'
/usr/local/php8/include/php/Zend/zend_types.h:134:3: note:   no known conversion for argument 1 from 'char*' to 'zend_type&&'
In file included from /usr/local/php8/include/php/Zend/zend.h:30,
                 from /usr/local/php8/include/php/main/php.h:31,
                 from /opt/m/phpx/include/phpx.h:21,
                 from /opt/m/phpx/src/base.cc:17:
/usr/local/php8/include/php/Zend/zend_alloc.h:170:80: error: no matching function for call to 'zend_type::zend_type(char*)'
 #define estrdup(s)       _estrdup((s) ZEND_FILE_LINE_CC ZEND_FILE_LINE_EMPTY_CC)
                                                                                ^
/opt/m/phpx/include/phpx.h:1199:36: note: in expansion of macro 'estrdup'
                 type = (zend_type) estrdup(class_name);
                                    ^~~~~~~
In file included from /usr/local/php8/include/php/Zend/zend.h:27,
                 from /usr/local/php8/include/php/main/php.h:31,
                 from /opt/m/phpx/include/phpx.h:21,
                 from /opt/m/phpx/src/base.cc:17:
/usr/local/php8/include/php/Zend/zend_types.h:134:3: note: candidate: 'zend_type::zend_type()'
 } zend_type;
   ^~~~~~~~~
/usr/local/php8/include/php/Zend/zend_types.h:134:3: note:   candidate expects 0 arguments, 1 provided
/usr/local/php8/include/php/Zend/zend_types.h:134:3: note: candidate: 'constexpr zend_type::zend_type(const zend_type&)'
/usr/local/php8/include/php/Zend/zend_types.h:134:3: note:   no known conversion for argument 1 from 'char*' to 'const zend_type&'
/usr/local/php8/include/php/Zend/zend_types.h:134:3: note: candidate: 'constexpr zend_type::zend_type(zend_type&&)'
/usr/local/php8/include/php/Zend/zend_types.h:134:3: note:   no known conversion for argument 1 from 'char*' to 'zend_type&&'
In file included from /opt/m/phpx/src/base.cc:17:
/opt/m/phpx/include/phpx.h:1204:20: error: 'ZEND_TYPE_ENCODE' was not declared in this scope
             type = ZEND_TYPE_ENCODE(type_hint, allow_null);
                    ^~~~~~~~~~~~~~~~
In file included from /opt/m/phpx/src/array.cc:17:
/opt/m/phpx/include/phpx.h: In member function 'php::String php::Array::join(php::String&)':
/opt/m/phpx/include/phpx.h:1049:37: error: cannot convert 'zval*' {aka '_zval_struct*'} to 'HashTable*' {aka '_zend_array*'}
         php_implode(delim.ptr(), ptr(), retval.ptr());
                                  ~~~^~
In file included from /usr/local/php8/include/php/ext/standard/php_standard.h:19,
                 from /opt/m/phpx/include/phpx.h:46,
                 from /opt/m/phpx/src/array.cc:17:
/usr/local/php8/include/php/ext/standard/php_string.h:56:62: note:   initializing argument 2 of 'void php_implode(const zend_string*, HashTable*, zval*)'
 PHPAPI void php_implode(const zend_string *delim, HashTable *arr, zval *return_value);
                                                   ~~~~~~~~~~~^~~
In file included from /usr/local/php8/include/php/Zend/zend.h:33,
                 from /usr/local/php8/include/php/main/php.h:31,
                 from /opt/m/phpx/include/phpx.h:21,
                 from /opt/m/phpx/src/array.cc:17:
/opt/m/phpx/include/phpx.h: In member function 'bool php::Array::sort()':
/opt/m/phpx/include/phpx.h:1059:50: error: invalid conversion from 'int (*)(const void*, const void*)' to 'bucket_compare_func_t' {aka 'int (*)(_Bucket*, _Bucket*)'} [-fpermissive]
         return zend_hash_sort(Z_ARRVAL_P(ptr()), array_data_compare, 1) == SUCCESS;
                                                  ^~~~~~~~~~~~~~~~~~
/usr/local/php8/include/php/Zend/zend_hash.h:272:35: note: in definition of macro 'zend_hash_sort'
  zend_hash_sort_ex(ht, zend_sort, compare_func, renumber)
                                   ^~~~~~~~~~~~
/usr/local/php8/include/php/Zend/zend_hash.h:268:108: note:   initializing argument 3 of 'void zend_hash_sort_ex(HashTable*, sort_func_t, bucket_compare_func_t, zend_bool)'
 ZEND_API void  ZEND_FASTCALL zend_hash_sort_ex(HashTable *ht, sort_func_t sort_func, bucket_compare_func_t compare_func, zend_bool renumber);
                                                                                      ~~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~
In file included from /opt/m/phpx/src/array.cc:17:
/opt/m/phpx/include/phpx.h:1059:73: error: no match for 'operator==' (operand types are 'void' and 'ZEND_RESULT_CODE')
         return zend_hash_sort(Z_ARRVAL_P(ptr()), array_data_compare, 1) == SUCCESS;
/opt/m/phpx/include/phpx.h:1204:20: note: suggested alternative: 'ZEND_TYPE_CE'
             type = ZEND_TYPE_ENCODE(type_hint, allow_null);
                    ^~~~~~~~~~~~~~~~
                    ZEND_TYPE_CE
/opt/m/phpx/include/phpx.h:1207:52: error: too many initializers for 'zend_internal_arg_info' {aka '_zend_internal_arg_info'}
         { name, type, pass_by_reference, variadic, };
                                                    ^
/opt/m/phpx/include/phpx.h: In member function 'zend_internal_arg_info* php::ArgInfo::get()':
/opt/m/phpx/include/phpx.h:1227:18: error: 'zend_internal_arg_info' {aka 'struct _zend_internal_arg_info'} has no member named 'pass_by_reference'
         _info[0].pass_by_reference = return_reference;
                  ^~~~~~~~~~~~~~~~~
In file included from /opt/m/phpx/src/class.cc:17:
/opt/m/phpx/include/phpx.h: In function 'void php::throwException(const char*, const char*, int)':
/opt/m/phpx/include/phpx.h:1302:43: error: expected ')' before 'TSRMLS_CC'
     zend_throw_exception(ce, message, code TSRMLS_CC);
                         ~                 ^~~~~~~~~~
                                           )
/opt/m/phpx/include/phpx.h: In destructor 'php::ArgInfo::~ArgInfo()':
/opt/m/phpx/include/phpx.h:1174:17: error: 'ZEND_TYPE_IS_CLASS' was not declared in this scope
             if (ZEND_TYPE_IS_CLASS(info[i].type))
                 ^~~~~~~~~~~~~~~~~~
In file included from /opt/m/phpx/include/phpx.h:34,
                 from /opt/m/phpx/src/class.cc:17:
/opt/m/phpx/include/phpx.h: In member function 'php::Variant php::Object::callParentMethod(const char*)':
/opt/m/phpx/include/phpx.h:1359:43: error: cannot convert 'zval*' {aka '_zval_struct*'} to 'zend_object*' {aka '_zend_object*'}
         zend_call_method_with_0_params(ptr(), Z_OBJCE_P(ptr())->parent, NULL, func, retval.ptr());
                                        ~~~^~
/usr/local/php8/include/php/Zend/zend_interfaces.h:44:19: note: in definition of macro 'zend_call_method_with_0_params'
  zend_call_method(obj, obj_ce, fn_proxy, function_name, sizeof(function_name)-1, retval, 0, NULL, NULL)
                   ^~~
In file included from /opt/m/phpx/include/phpx.h:34,
                 from /opt/m/phpx/src/class.cc:17:
/usr/local/php8/include/php/Zend/zend_interfaces.h:41:46: note:   initializing argument 1 of 'zval* zend_call_method(zend_object*, zend_class_entry*, zend_function**, const char*, size_t, zval*, uint32_t, zval*, zval*)'
 ZEND_API zval* zend_call_method(zend_object *object, zend_class_entry *obj_ce, zend_function **fn_proxy, const char *function_name, size_t function_name_len, zval *retval, uint32_t param_count, zval* arg1, zval* arg2);
                                 ~~~~~~~~~~~~~^~~~~~
In file included from /opt/m/phpx/include/phpx.h:34,
                 from /opt/m/phpx/src/class.cc:17:
/opt/m/phpx/include/phpx.h: In member function 'php::Variant php::Object::callParentMethod(const char*, const php::Variant&)':
/opt/m/phpx/include/phpx.h:1365:43: error: cannot convert 'zval*' {aka '_zval_struct*'} to 'zend_object*' {aka '_zend_object*'}
         zend_call_method_with_1_params(ptr(), Z_OBJCE_P(ptr())->parent, NULL, func, retval.ptr(),
                                        ~~~^~
/usr/local/php8/include/php/Zend/zend_interfaces.h:47:19: note: in definition of macro 'zend_call_method_with_1_params'
  zend_call_method(obj, obj_ce, fn_proxy, function_name, sizeof(function_name)-1, retval, 1, arg1, NULL)
                   ^~~
In file included from /opt/m/phpx/include/phpx.h:34,
                 from /opt/m/phpx/src/class.cc:17:
/usr/local/php8/include/php/Zend/zend_interfaces.h:41:46: note:   initializing argument 1 of 'zval* zend_call_method(zend_object*, zend_class_entry*, zend_function**, const char*, size_t, zval*, uint32_t, zval*, zval*)'
 ZEND_API zval* zend_call_method(zend_object *object, zend_class_entry *obj_ce, zend_function **fn_proxy, const char *function_name, size_t function_name_len, zval *retval, uint32_t param_count, zval* arg1, zval* arg2);
                                 ~~~~~~~~~~~~~^~~~~~
In file included from /opt/m/phpx/include/phpx.h:34,
                 from /opt/m/phpx/src/class.cc:17:
/opt/m/phpx/include/phpx.h: In member function 'php::Variant php::Object::callParentMethod(const char*, const php::Variant&, const php::Variant&)':
/opt/m/phpx/include/phpx.h:1373:43: error: cannot convert 'zval*' {aka '_zval_struct*'} to 'zend_object*' {aka '_zend_object*'}
         zend_call_method_with_2_params(ptr(), Z_OBJCE_P(ptr())->parent, NULL, func, retval.ptr(),
                                        ~~~^~
/usr/local/php8/include/php/Zend/zend_interfaces.h:50:19: note: in definition of macro 'zend_call_method_with_2_params'
  zend_call_method(obj, obj_ce, fn_proxy, function_name, sizeof(function_name)-1, retval, 2, arg1, arg2)
                   ^~~
In file included from /opt/m/phpx/include/phpx.h:34,
                 from /opt/m/phpx/src/class.cc:17:
/usr/local/php8/include/php/Zend/zend_interfaces.h:41:46: note:   initializing argument 1 of 'zval* zend_call_method(zend_object*, zend_class_entry*, zend_function**, const char*, size_t, zval*, uint32_t, zval*, zval*)'
 ZEND_API zval* zend_call_method(zend_object *object, zend_class_entry *obj_ce, zend_function **fn_proxy, const char *function_name, size_t function_name_len, zval *retval, uint32_t param_count, zval* arg1, zval* arg2);
                                 ~~~~~~~~~~~~~^~~~~~
In file included from /opt/m/phpx/src/class.cc:17:
/opt/m/phpx/include/phpx.h: In member function 'php::Variant php::Object::get(const char*)':
/opt/m/phpx/include/phpx.h:1400:66: error: cannot convert 'zval*' {aka '_zval_struct*'} to 'zend_object*' {aka '_zend_object*'}
         zval *member_p = zend_read_property(Z_OBJCE_P(ptr()), ptr(), name, strlen(name), 0, &rv);
                                                               ~~~^~
In file included from /usr/local/php8/include/php/main/php.h:35,
                 from /opt/m/phpx/include/phpx.h:21,
                 from /opt/m/phpx/src/class.cc:17:
/usr/local/php8/include/php/Zend/zend_API.h:407:73: note:   initializing argument 2 of 'zval* zend_read_property(zend_class_entry*, zend_object*, const char*, size_t, zend_bool, zval*)'
 ZEND_API zval *zend_read_property(zend_class_entry *scope, zend_object *object, const char *name, size_t name_length, zend_bool silent, zval *rv);
                                                            ~~~~~~~~~~~~~^~~~~~
/opt/m/phpx/include/phpx.h:1204:20: note: suggested alternative: 'ZEND_TYPE_CE'
             type = ZEND_TYPE_ENCODE(type_hint, allow_null);
                    ^~~~~~~~~~~~~~~~
                    ZEND_TYPE_CE
/opt/m/phpx/include/phpx.h:1207:52: error: too many initializers for 'zend_internal_arg_info' {aka '_zend_internal_arg_info'}
         { name, type, pass_by_reference, variadic, };
                                                    ^
In file included from /opt/m/phpx/src/class.cc:17:
/opt/m/phpx/include/phpx.h: In member function 'void php::Object::set(const char*, const php::Variant&)':
/opt/m/phpx/include/phpx.h:1413:51: error: cannot convert 'zval*' {aka '_zval_struct*'} to 'zend_object*' {aka '_zend_object*'}
         zend_update_property(Z_OBJCE_P(ptr()), ptr(), name, strlen(name), const_cast<Variant &>(v).ptr());
                                                ~~~^~
In file included from /usr/local/php8/include/php/main/php.h:35,
                 from /opt/m/phpx/include/phpx.h:21,
                 from /opt/m/phpx/src/class.cc:17:
/usr/local/php8/include/php/Zend/zend_API.h:387:74: note:   initializing argument 2 of 'void zend_update_property(zend_class_entry*, zend_object*, const char*, size_t, zval*)'
 ZEND_API void zend_update_property(zend_class_entry *scope, zend_object *object, const char *name, size_t name_length, zval *value);
                                                             ~~~~~~~~~~~~~^~~~~~
In file included from /opt/m/phpx/src/class.cc:17:
/opt/m/phpx/include/phpx.h: In member function 'void php::Object::set(const char*, php::Array&)':
/opt/m/phpx/include/phpx.h:1417:51: error: cannot convert 'zval*' {aka '_zval_struct*'} to 'zend_object*' {aka '_zend_object*'}
         zend_update_property(Z_OBJCE_P(ptr()), ptr(), name, strlen(name), v.ptr());
                                                ~~~^~
In file included from /usr/local/php8/include/php/main/php.h:35,
                 from /opt/m/phpx/include/phpx.h:21,
                 from /opt/m/phpx/src/class.cc:17:
/usr/local/php8/include/php/Zend/zend_API.h:387:74: note:   initializing argument 2 of 'void zend_update_property(zend_class_entry*, zend_object*, const char*, size_t, zval*)'
 ZEND_API void zend_update_property(zend_class_entry *scope, zend_object *object, const char *name, size_t name_length, zval *value);
                                                             ~~~~~~~~~~~~~^~~~~~
In file included from /opt/m/phpx/src/class.cc:17:
/opt/m/phpx/include/phpx.h: In member function 'void php::Object::set(const char*, std::__cxx11::string&)':
/opt/m/phpx/include/phpx.h:1421:59: error: cannot convert 'zval*' {aka '_zval_struct*'} to 'zend_object*' {aka '_zend_object*'}
         zend_update_property_stringl(Z_OBJCE_P(ptr()), ptr(), name, strlen(name), v.c_str(), v.length());
                                                        ~~~^~
In file included from /usr/local/php8/include/php/main/php.h:35,
                 from /opt/m/phpx/include/phpx.h:21,
                 from /opt/m/phpx/src/class.cc:17:
/usr/local/php8/include/php/Zend/zend_API.h:394:82: note:   initializing argument 2 of 'void zend_update_property_stringl(zend_class_entry*, zend_object*, const char*, size_t, const char*, size_t)'
 ZEND_API void zend_update_property_stringl(zend_class_entry *scope, zend_object *object, const char *name, size_t name_length, const char *value, size_t value_length);
                                                                     ~~~~~~~~~~~~~^~~~~~
In file included from /opt/m/phpx/src/class.cc:17:
/opt/m/phpx/include/phpx.h: In member function 'void php::Object::set(const char*, std::__cxx11::string)':
/opt/m/phpx/include/phpx.h:1425:59: error: cannot convert 'zval*' {aka '_zval_struct*'} to 'zend_object*' {aka '_zend_object*'}
         zend_update_property_stringl(Z_OBJCE_P(ptr()), ptr(), name, strlen(name), v.c_str(), v.length());
                                                        ~~~^~
In file included from /usr/local/php8/include/php/main/php.h:35,
                 from /opt/m/phpx/include/phpx.h:21,
                 from /opt/m/phpx/src/class.cc:17:
/usr/local/php8/include/php/Zend/zend_API.h:394:82: note:   initializing argument 2 of 'void zend_update_property_stringl(zend_class_entry*, zend_object*, const char*, size_t, const char*, size_t)'
 ZEND_API void zend_update_property_stringl(zend_class_entry *scope, zend_object *object, const char *name, size_t name_length, const char *value, size_t value_length);
                                                                     ~~~~~~~~~~~~~^~~~~~
In file included from /opt/m/phpx/src/class.cc:17:
/opt/m/phpx/include/phpx.h: In member function 'void php::Object::set(const char*, const char*)':
/opt/m/phpx/include/phpx.h:1429:58: error: cannot convert 'zval*' {aka '_zval_struct*'} to 'zend_object*' {aka '_zend_object*'}
         zend_update_property_string(Z_OBJCE_P(ptr()), ptr(), name, strlen(name), v);
                                                       ~~~^~
In file included from /usr/local/php8/include/php/main/php.h:35,
                 from /opt/m/phpx/include/phpx.h:21,
                 from /opt/m/phpx/src/class.cc:17:
/usr/local/php8/include/php/Zend/zend_API.h:393:81: note:   initializing argument 2 of 'void zend_update_property_string(zend_class_entry*, zend_object*, const char*, size_t, const char*)'
 ZEND_API void zend_update_property_string(zend_class_entry *scope, zend_object *object, const char *name, size_t name_length, const char *value);
                                                                    ~~~~~~~~~~~~~^~~~~~
In file included from /opt/m/phpx/src/class.cc:17:
/opt/m/phpx/include/phpx.h: In member function 'void php::Object::set(const char*, int)':
/opt/m/phpx/include/phpx.h:1433:56: error: cannot convert 'zval*' {aka '_zval_struct*'} to 'zend_object*' {aka '_zend_object*'}
         zend_update_property_long(Z_OBJCE_P(ptr()), ptr(), name, strlen(name), v);
                                                     ~~~^~
In file included from /usr/local/php8/include/php/main/php.h:35,
                 from /opt/m/phpx/include/phpx.h:21,
                 from /opt/m/phpx/src/class.cc:17:
/usr/local/php8/include/php/Zend/zend_API.h:390:79: note:   initializing argument 2 of 'void zend_update_property_long(zend_class_entry*, zend_object*, const char*, size_t, zend_long)'
 ZEND_API void zend_update_property_long(zend_class_entry *scope, zend_object *object, const char *name, size_t name_length, zend_long value);
                                                                  ~~~~~~~~~~~~~^~~~~~
In file included from /opt/m/phpx/src/class.cc:17:
/opt/m/phpx/include/phpx.h: In member function 'void php::Object::set(const char*, long int)':
/opt/m/phpx/include/phpx.h:1437:56: error: cannot convert 'zval*' {aka '_zval_struct*'} to 'zend_object*' {aka '_zend_object*'}
         zend_update_property_long(Z_OBJCE_P(ptr()), ptr(), name, strlen(name), v);
                                                     ~~~^~
/opt/m/phpx/include/phpx.h: In member function 'zend_internal_arg_info* php::ArgInfo::get()':
/opt/m/phpx/include/phpx.h:1227:18: error: 'zend_internal_arg_info' {aka 'struct _zend_internal_arg_info'} has no member named 'pass_by_reference'
         _info[0].pass_by_reference = return_reference;
                  ^~~~~~~~~~~~~~~~~
In file included from /usr/local/php8/include/php/main/php.h:35,
                 from /opt/m/phpx/include/phpx.h:21,
                 from /opt/m/phpx/src/class.cc:17:
/usr/local/php8/include/php/Zend/zend_API.h:390:79: note:   initializing argument 2 of 'void zend_update_property_long(zend_class_entry*, zend_object*, const char*, size_t, zend_long)'
 ZEND_API void zend_update_property_long(zend_class_entry *scope, zend_object *object, const char *name, size_t name_length, zend_long value);
                                                                  ~~~~~~~~~~~~~^~~~~~
In file included from /opt/m/phpx/src/class.cc:17:
/opt/m/phpx/include/phpx.h: In member function 'void php::Object::set(const char*, double)':
/opt/m/phpx/include/phpx.h:1441:58: error: cannot convert 'zval*' {aka '_zval_struct*'} to 'zend_object*' {aka '_zend_object*'}
         zend_update_property_double(Z_OBJCE_P(ptr()), ptr(), name, strlen(name), v);
                                                       ~~~^~
In file included from /usr/local/php8/include/php/main/php.h:35,
                 from /opt/m/phpx/include/phpx.h:21,
                 from /opt/m/phpx/src/class.cc:17:
/usr/local/php8/include/php/Zend/zend_API.h:391:81: note:   initializing argument 2 of 'void zend_update_property_double(zend_class_entry*, zend_object*, const char*, size_t, double)'
 ZEND_API void zend_update_property_double(zend_class_entry *scope, zend_object *object, const char *name, size_t name_length, double value);
                                                                    ~~~~~~~~~~~~~^~~~~~
In file included from /opt/m/phpx/src/class.cc:17:
/opt/m/phpx/include/phpx.h: In member function 'void php::Object::set(const char*, float)':
/opt/m/phpx/include/phpx.h:1445:58: error: cannot convert 'zval*' {aka '_zval_struct*'} to 'zend_object*' {aka '_zend_object*'}
         zend_update_property_double(Z_OBJCE_P(ptr()), ptr(), name, strlen(name), (double) v);
                                                       ~~~^~
In file included from /usr/local/php8/include/php/main/php.h:35,
                 from /opt/m/phpx/include/phpx.h:21,
                 from /opt/m/phpx/src/class.cc:17:
/usr/local/php8/include/php/Zend/zend_API.h:391:81: note:   initializing argument 2 of 'void zend_update_property_double(zend_class_entry*, zend_object*, const char*, size_t, double)'
 ZEND_API void zend_update_property_double(zend_class_entry *scope, zend_object *object, const char *name, size_t name_length, double value);
                                                                    ~~~~~~~~~~~~~^~~~~~
In file included from /opt/m/phpx/src/class.cc:17:
/opt/m/phpx/include/phpx.h: In member function 'void php::Object::set(const char*, bool)':
/opt/m/phpx/include/phpx.h:1449:56: error: cannot convert 'zval*' {aka '_zval_struct*'} to 'zend_object*' {aka '_zend_object*'}
         zend_update_property_bool(Z_OBJCE_P(ptr()), ptr(), name, strlen(name), v ? 1 : 0);
                                                     ~~~^~
In file included from /usr/local/php8/include/php/main/php.h:35,
                 from /opt/m/phpx/include/phpx.h:21,
                 from /opt/m/phpx/src/class.cc:17:
/usr/local/php8/include/php/Zend/zend_API.h:389:79: note:   initializing argument 2 of 'void zend_update_property_bool(zend_class_entry*, zend_object*, const char*, size_t, zend_long)'
 ZEND_API void zend_update_property_bool(zend_class_entry *scope, zend_object *object, const char *name, size_t name_length, zend_long value);
                                                                  ~~~~~~~~~~~~~^~~~~~
In file included from /opt/m/phpx/src/base.cc:17:
/opt/m/phpx/include/phpx.h: In function 'void php::throwException(const char*, const char*, int)':
/opt/m/phpx/include/phpx.h:1302:43: error: expected ')' before 'TSRMLS_CC'
     zend_throw_exception(ce, message, code TSRMLS_CC);
                         ~                 ^~~~~~~~~~
                                           )
In file included from /opt/m/phpx/include/phpx.h:34,
                 from /opt/m/phpx/src/base.cc:17:
/opt/m/phpx/include/phpx.h: In member function 'php::Variant php::Object::callParentMethod(const char*)':
/opt/m/phpx/include/phpx.h:1359:43: error: cannot convert 'zval*' {aka '_zval_struct*'} to 'zend_object*' {aka '_zend_object*'}
         zend_call_method_with_0_params(ptr(), Z_OBJCE_P(ptr())->parent, NULL, func, retval.ptr());
                                        ~~~^~
/usr/local/php8/include/php/Zend/zend_interfaces.h:44:19: note: in definition of macro 'zend_call_method_with_0_params'
  zend_call_method(obj, obj_ce, fn_proxy, function_name, sizeof(function_name)-1, retval, 0, NULL, NULL)
                   ^~~
In file included from /opt/m/phpx/include/phpx.h:34,
                 from /opt/m/phpx/src/base.cc:17:
/usr/local/php8/include/php/Zend/zend_interfaces.h:41:46: note:   initializing argument 1 of 'zval* zend_call_method(zend_object*, zend_class_entry*, zend_function**, const char*, size_t, zval*, uint32_t, zval*, zval*)'
 ZEND_API zval* zend_call_method(zend_object *object, zend_class_entry *obj_ce, zend_function **fn_proxy, const char *function_name, size_t function_name_len, zval *retval, uint32_t param_count, zval* arg1, zval* arg2);
                                 ~~~~~~~~~~~~~^~~~~~
In file included from /opt/m/phpx/include/phpx.h:34,
                 from /opt/m/phpx/src/base.cc:17:
/opt/m/phpx/include/phpx.h: In member function 'php::Variant php::Object::callParentMethod(const char*, const php::Variant&)':
/opt/m/phpx/include/phpx.h:1365:43: error: cannot convert 'zval*' {aka '_zval_struct*'} to 'zend_object*' {aka '_zend_object*'}
         zend_call_method_with_1_params(ptr(), Z_OBJCE_P(ptr())->parent, NULL, func, retval.ptr(),
                                        ~~~^~
/usr/local/php8/include/php/Zend/zend_interfaces.h:47:19: note: in definition of macro 'zend_call_method_with_1_params'
  zend_call_method(obj, obj_ce, fn_proxy, function_name, sizeof(function_name)-1, retval, 1, arg1, NULL)
                   ^~~
In file included from /opt/m/phpx/include/phpx.h:34,
                 from /opt/m/phpx/src/base.cc:17:
/usr/local/php8/include/php/Zend/zend_interfaces.h:41:46: note:   initializing argument 1 of 'zval* zend_call_method(zend_object*, zend_class_entry*, zend_function**, const char*, size_t, zval*, uint32_t, zval*, zval*)'
 ZEND_API zval* zend_call_method(zend_object *object, zend_class_entry *obj_ce, zend_function **fn_proxy, const char *function_name, size_t function_name_len, zval *retval, uint32_t param_count, zval* arg1, zval* arg2);
                                 ~~~~~~~~~~~~~^~~~~~
In file included from /opt/m/phpx/include/phpx.h:34,
                 from /opt/m/phpx/src/base.cc:17:
/opt/m/phpx/include/phpx.h: In member function 'php::Variant php::Object::callParentMethod(const char*, const php::Variant&, const php::Variant&)':
/opt/m/phpx/include/phpx.h:1373:43: error: cannot convert 'zval*' {aka '_zval_struct*'} to 'zend_object*' {aka '_zend_object*'}
         zend_call_method_with_2_params(ptr(), Z_OBJCE_P(ptr())->parent, NULL, func, retval.ptr(),
                                        ~~~^~
/usr/local/php8/include/php/Zend/zend_interfaces.h:50:19: note: in definition of macro 'zend_call_method_with_2_params'
  zend_call_method(obj, obj_ce, fn_proxy, function_name, sizeof(function_name)-1, retval, 2, arg1, arg2)
                   ^~~
In file included from /opt/m/phpx/include/phpx.h:34,
                 from /opt/m/phpx/src/base.cc:17:
/usr/local/php8/include/php/Zend/zend_interfaces.h:41:46: note:   initializing argument 1 of 'zval* zend_call_method(zend_object*, zend_class_entry*, zend_function**, const char*, size_t, zval*, uint32_t, zval*, zval*)'
 ZEND_API zval* zend_call_method(zend_object *object, zend_class_entry *obj_ce, zend_function **fn_proxy, const char *function_name, size_t function_name_len, zval *retval, uint32_t param_count, zval* arg1, zval* arg2);
                                 ~~~~~~~~~~~~~^~~~~~
In file included from /opt/m/phpx/src/base.cc:17:
/opt/m/phpx/include/phpx.h: In member function 'php::Variant php::Object::get(const char*)':
/opt/m/phpx/include/phpx.h:1400:66: error: cannot convert 'zval*' {aka '_zval_struct*'} to 'zend_object*' {aka '_zend_object*'}
         zval *member_p = zend_read_property(Z_OBJCE_P(ptr()), ptr(), name, strlen(name), 0, &rv);
                                                               ~~~^~
In file included from /usr/local/php8/include/php/main/php.h:35,
                 from /opt/m/phpx/include/phpx.h:21,
                 from /opt/m/phpx/src/base.cc:17:
/usr/local/php8/include/php/Zend/zend_API.h:407:73: note:   initializing argument 2 of 'zval* zend_read_property(zend_class_entry*, zend_object*, const char*, size_t, zend_bool, zval*)'
 ZEND_API zval *zend_read_property(zend_class_entry *scope, zend_object *object, const char *name, size_t name_length, zend_bool silent, zval *rv);
                                                            ~~~~~~~~~~~~~^~~~~~
In file included from /opt/m/phpx/src/base.cc:17:
/opt/m/phpx/include/phpx.h: In member function 'void php::Object::set(const char*, const php::Variant&)':
/opt/m/phpx/include/phpx.h:1413:51: error: cannot convert 'zval*' {aka '_zval_struct*'} to 'zend_object*' {aka '_zend_object*'}
         zend_update_property(Z_OBJCE_P(ptr()), ptr(), name, strlen(name), const_cast<Variant &>(v).ptr());
                                                ~~~^~
In file included from /usr/local/php8/include/php/main/php.h:35,
                 from /opt/m/phpx/include/phpx.h:21,
                 from /opt/m/phpx/src/base.cc:17:
/usr/local/php8/include/php/Zend/zend_API.h:387:74: note:   initializing argument 2 of 'void zend_update_property(zend_class_entry*, zend_object*, const char*, size_t, zval*)'
 ZEND_API void zend_update_property(zend_class_entry *scope, zend_object *object, const char *name, size_t name_length, zval *value);
                                                             ~~~~~~~~~~~~~^~~~~~
In file included from /opt/m/phpx/src/base.cc:17:
/opt/m/phpx/include/phpx.h: In member function 'void php::Object::set(const char*, php::Array&)':
/opt/m/phpx/include/phpx.h:1417:51: error: cannot convert 'zval*' {aka '_zval_struct*'} to 'zend_object*' {aka '_zend_object*'}
         zend_update_property(Z_OBJCE_P(ptr()), ptr(), name, strlen(name), v.ptr());
                                                ~~~^~
In file included from /usr/local/php8/include/php/main/php.h:35,
                 from /opt/m/phpx/include/phpx.h:21,
                 from /opt/m/phpx/src/base.cc:17:
/usr/local/php8/include/php/Zend/zend_API.h:387:74: note:   initializing argument 2 of 'void zend_update_property(zend_class_entry*, zend_object*, const char*, size_t, zval*)'
 ZEND_API void zend_update_property(zend_class_entry *scope, zend_object *object, const char *name, size_t name_length, zval *value);
                                                             ~~~~~~~~~~~~~^~~~~~
In file included from /opt/m/phpx/src/base.cc:17:
/opt/m/phpx/include/phpx.h: In member function 'void php::Object::set(const char*, std::__cxx11::string&)':
/opt/m/phpx/include/phpx.h:1421:59: error: cannot convert 'zval*' {aka '_zval_struct*'} to 'zend_object*' {aka '_zend_object*'}
         zend_update_property_stringl(Z_OBJCE_P(ptr()), ptr(), name, strlen(name), v.c_str(), v.length());
                                                        ~~~^~
In file included from /usr/local/php8/include/php/main/php.h:35,
                 from /opt/m/phpx/include/phpx.h:21,
                 from /opt/m/phpx/src/base.cc:17:
/usr/local/php8/include/php/Zend/zend_API.h:394:82: note:   initializing argument 2 of 'void zend_update_property_stringl(zend_class_entry*, zend_object*, const char*, size_t, const char*, size_t)'
 ZEND_API void zend_update_property_stringl(zend_class_entry *scope, zend_object *object, const char *name, size_t name_length, const char *value, size_t value_length);
                                                                     ~~~~~~~~~~~~~^~~~~~
In file included from /opt/m/phpx/src/base.cc:17:
/opt/m/phpx/include/phpx.h: In member function 'void php::Object::set(const char*, std::__cxx11::string)':
/opt/m/phpx/include/phpx.h:1425:59: error: cannot convert 'zval*' {aka '_zval_struct*'} to 'zend_object*' {aka '_zend_object*'}
         zend_update_property_stringl(Z_OBJCE_P(ptr()), ptr(), name, strlen(name), v.c_str(), v.length());
                                                        ~~~^~
In file included from /usr/local/php8/include/php/main/php.h:35,
                 from /opt/m/phpx/include/phpx.h:21,
                 from /opt/m/phpx/src/base.cc:17:
/usr/local/php8/include/php/Zend/zend_API.h:394:82: note:   initializing argument 2 of 'void zend_update_property_stringl(zend_class_entry*, zend_object*, const char*, size_t, const char*, size_t)'
 ZEND_API void zend_update_property_stringl(zend_class_entry *scope, zend_object *object, const char *name, size_t name_length, const char *value, size_t value_length);
                                                                     ~~~~~~~~~~~~~^~~~~~
In file included from /opt/m/phpx/src/base.cc:17:
/opt/m/phpx/include/phpx.h: In member function 'void php::Object::set(const char*, const char*)':
/opt/m/phpx/include/phpx.h:1429:58: error: cannot convert 'zval*' {aka '_zval_struct*'} to 'zend_object*' {aka '_zend_object*'}
         zend_update_property_string(Z_OBJCE_P(ptr()), ptr(), name, strlen(name), v);
                                                       ~~~^~
In file included from /usr/local/php8/include/php/main/php.h:35,
                 from /opt/m/phpx/include/phpx.h:21,
                 from /opt/m/phpx/src/base.cc:17:
/usr/local/php8/include/php/Zend/zend_API.h:393:81: note:   initializing argument 2 of 'void zend_update_property_string(zend_class_entry*, zend_object*, const char*, size_t, const char*)'
 ZEND_API void zend_update_property_string(zend_class_entry *scope, zend_object *object, const char *name, size_t name_length, const char *value);
                                                                    ~~~~~~~~~~~~~^~~~~~
In file included from /opt/m/phpx/src/base.cc:17:
/opt/m/phpx/include/phpx.h: In member function 'void php::Object::set(const char*, int)':
/opt/m/phpx/include/phpx.h:1433:56: error: cannot convert 'zval*' {aka '_zval_struct*'} to 'zend_object*' {aka '_zend_object*'}
         zend_update_property_long(Z_OBJCE_P(ptr()), ptr(), name, strlen(name), v);
                                                     ~~~^~
In file included from /usr/local/php8/include/php/main/php.h:35,
                 from /opt/m/phpx/include/phpx.h:21,
                 from /opt/m/phpx/src/base.cc:17:
/usr/local/php8/include/php/Zend/zend_API.h:390:79: note:   initializing argument 2 of 'void zend_update_property_long(zend_class_entry*, zend_object*, const char*, size_t, zend_long)'
 ZEND_API void zend_update_property_long(zend_class_entry *scope, zend_object *object, const char *name, size_t name_length, zend_long value);
                                                                  ~~~~~~~~~~~~~^~~~~~
In file included from /opt/m/phpx/src/base.cc:17:
/opt/m/phpx/include/phpx.h: In member function 'void php::Object::set(const char*, long int)':
/opt/m/phpx/include/phpx.h:1437:56: error: cannot convert 'zval*' {aka '_zval_struct*'} to 'zend_object*' {aka '_zend_object*'}
         zend_update_property_long(Z_OBJCE_P(ptr()), ptr(), name, strlen(name), v);
                                                     ~~~^~
In file included from /usr/local/php8/include/php/main/php.h:35,
                 from /opt/m/phpx/include/phpx.h:21,
                 from /opt/m/phpx/src/base.cc:17:
/usr/local/php8/include/php/Zend/zend_API.h:390:79: note:   initializing argument 2 of 'void zend_update_property_long(zend_class_entry*, zend_object*, const char*, size_t, zend_long)'
 ZEND_API void zend_update_property_long(zend_class_entry *scope, zend_object *object, const char *name, size_t name_length, zend_long value);
                                                                  ~~~~~~~~~~~~~^~~~~~
In file included from /opt/m/phpx/src/base.cc:17:
/opt/m/phpx/include/phpx.h: In member function 'void php::Object::set(const char*, double)':
/opt/m/phpx/include/phpx.h:1441:58: error: cannot convert 'zval*' {aka '_zval_struct*'} to 'zend_object*' {aka '_zend_object*'}
         zend_update_property_double(Z_OBJCE_P(ptr()), ptr(), name, strlen(name), v);
                                                       ~~~^~
In file included from /usr/local/php8/include/php/main/php.h:35,
                 from /opt/m/phpx/include/phpx.h:21,
                 from /opt/m/phpx/src/base.cc:17:
/usr/local/php8/include/php/Zend/zend_API.h:391:81: note:   initializing argument 2 of 'void zend_update_property_double(zend_class_entry*, zend_object*, const char*, size_t, double)'
 ZEND_API void zend_update_property_double(zend_class_entry *scope, zend_object *object, const char *name, size_t name_length, double value);
                                                                    ~~~~~~~~~~~~~^~~~~~
In file included from /opt/m/phpx/src/base.cc:17:
/opt/m/phpx/include/phpx.h: In member function 'void php::Object::set(const char*, float)':
/opt/m/phpx/include/phpx.h:1445:58: error: cannot convert 'zval*' {aka '_zval_struct*'} to 'zend_object*' {aka '_zend_object*'}
         zend_update_property_double(Z_OBJCE_P(ptr()), ptr(), name, strlen(name), (double) v);
                                                       ~~~^~
In file included from /opt/m/phpx/src/class.cc:17:
/opt/m/phpx/include/phpx.h: At global scope:
/opt/m/phpx/include/phpx.h:1584:16: error: 'ZEND_ACC_DTOR' was not declared in this scope
     DESTRUCT = ZEND_ACC_DTOR,
                ^~~~~~~~~~~~~
In file included from /usr/local/php8/include/php/main/php.h:35,
                 from /opt/m/phpx/include/phpx.h:21,
                 from /opt/m/phpx/src/base.cc:17:
/usr/local/php8/include/php/Zend/zend_API.h:391:81: note:   initializing argument 2 of 'void zend_update_property_double(zend_class_entry*, zend_object*, const char*, size_t, double)'
 ZEND_API void zend_update_property_double(zend_class_entry *scope, zend_object *object, const char *name, size_t name_length, double value);
                                                                    ~~~~~~~~~~~~~^~~~~~
In file included from /opt/m/phpx/src/base.cc:17:
/opt/m/phpx/include/phpx.h: In member function 'void php::Object::set(const char*, bool)':
/opt/m/phpx/include/phpx.h:1449:56: error: cannot convert 'zval*' {aka '_zval_struct*'} to 'zend_object*' {aka '_zend_object*'}
         zend_update_property_bool(Z_OBJCE_P(ptr()), ptr(), name, strlen(name), v ? 1 : 0);
                                                     ~~~^~
In file included from /usr/local/php8/include/php/main/php.h:35,
                 from /opt/m/phpx/include/phpx.h:21,
                 from /opt/m/phpx/src/base.cc:17:
/usr/local/php8/include/php/Zend/zend_API.h:389:79: note:   initializing argument 2 of 'void zend_update_property_bool(zend_class_entry*, zend_object*, const char*, size_t, zend_long)'
 ZEND_API void zend_update_property_bool(zend_class_entry *scope, zend_object *object, const char *name, size_t name_length, zend_long value);
                                                                  ~~~~~~~~~~~~~^~~~~~
/opt/m/phpx/include/phpx.h:1174:17: note: suggested alternative: 'ZEND_TYPE_HAS_CLASS'
             if (ZEND_TYPE_IS_CLASS(info[i].type))
                 ^~~~~~~~~~~~~~~~~~
                 ZEND_TYPE_HAS_CLASS
In file included from /usr/local/php8/include/php/Zend/zend.h:30,
                 from /usr/local/php8/include/php/main/php.h:31,
                 from /opt/m/phpx/include/phpx.h:21,
                 from /opt/m/phpx/src/array.cc:17:
/opt/m/phpx/include/phpx.h:1176:39: error: invalid cast from type 'zend_type' to type 'void*'
                 efree((void* )info[i].type);
                                       ^~~~
/usr/local/php8/include/php/Zend/zend_alloc.h:161:34: note: in definition of macro 'efree'
 #define efree(ptr)       _efree((ptr) ZEND_FILE_LINE_CC ZEND_FILE_LINE_EMPTY_CC)
                                  ^~~
In file included from /opt/m/phpx/src/array.cc:17:
/opt/m/phpx/include/phpx.h: In member function 'void php::ArgInfo::add(const char*, const char*, int, bool, bool, bool)':
/opt/m/phpx/include/phpx.h:1195:36: error: no matching function for call to 'zend_type::zend_type(char*&)'
                 type = (zend_type) _s;
                                    ^~
In file included from /usr/local/php8/include/php/Zend/zend.h:27,
                 from /usr/local/php8/include/php/main/php.h:31,
                 from /opt/m/phpx/include/phpx.h:21,
                 from /opt/m/phpx/src/array.cc:17:
/usr/local/php8/include/php/Zend/zend_types.h:134:3: note: candidate: 'zend_type::zend_type()'
 } zend_type;
   ^~~~~~~~~
/usr/local/php8/include/php/Zend/zend_types.h:134:3: note:   candidate expects 0 arguments, 1 provided
/usr/local/php8/include/php/Zend/zend_types.h:134:3: note: candidate: 'constexpr zend_type::zend_type(const zend_type&)'
/usr/local/php8/include/php/Zend/zend_types.h:134:3: note:   no known conversion for argument 1 from 'char*' to 'const zend_type&'
/usr/local/php8/include/php/Zend/zend_types.h:134:3: note: candidate: 'constexpr zend_type::zend_type(zend_type&&)'
/usr/local/php8/include/php/Zend/zend_types.h:134:3: note:   no known conversion for argument 1 from 'char*' to 'zend_type&&'
In file included from /usr/local/php8/include/php/Zend/zend.h:30,
                 from /usr/local/php8/include/php/main/php.h:31,
                 from /opt/m/phpx/include/phpx.h:21,
                 from /opt/m/phpx/src/array.cc:17:
/usr/local/php8/include/php/Zend/zend_alloc.h:170:80: error: no matching function for call to 'zend_type::zend_type(char*)'
 #define estrdup(s)       _estrdup((s) ZEND_FILE_LINE_CC ZEND_FILE_LINE_EMPTY_CC)
                                                                                ^
/opt/m/phpx/include/phpx.h:1199:36: note: in expansion of macro 'estrdup'
                 type = (zend_type) estrdup(class_name);
                                    ^~~~~~~
In file included from /usr/local/php8/include/php/Zend/zend.h:27,
                 from /usr/local/php8/include/php/main/php.h:31,
                 from /opt/m/phpx/include/phpx.h:21,
                 from /opt/m/phpx/src/array.cc:17:
/usr/local/php8/include/php/Zend/zend_types.h:134:3: note: candidate: 'zend_type::zend_type()'
 } zend_type;
   ^~~~~~~~~
/usr/local/php8/include/php/Zend/zend_types.h:134:3: note:   candidate expects 0 arguments, 1 provided
/usr/local/php8/include/php/Zend/zend_types.h:134:3: note: candidate: 'constexpr zend_type::zend_type(const zend_type&)'
/usr/local/php8/include/php/Zend/zend_types.h:134:3: note:   no known conversion for argument 1 from 'char*' to 'const zend_type&'
/usr/local/php8/include/php/Zend/zend_types.h:134:3: note: candidate: 'constexpr zend_type::zend_type(zend_type&&)'
/usr/local/php8/include/php/Zend/zend_types.h:134:3: note:   no known conversion for argument 1 from 'char*' to 'zend_type&&'
In file included from /opt/m/phpx/src/array.cc:17:
/opt/m/phpx/include/phpx.h:1204:20: error: 'ZEND_TYPE_ENCODE' was not declared in this scope
             type = ZEND_TYPE_ENCODE(type_hint, allow_null);
                    ^~~~~~~~~~~~~~~~
/opt/m/phpx/include/phpx.h:1584:16: note: suggested alternative: 'ZEND_ACC_CTOR'
     DESTRUCT = ZEND_ACC_DTOR,
                ^~~~~~~~~~~~~
                ZEND_ACC_CTOR
In file included from /opt/m/phpx/src/base.cc:17:
/opt/m/phpx/include/phpx.h: At global scope:
/opt/m/phpx/include/phpx.h:1584:16: error: 'ZEND_ACC_DTOR' was not declared in this scope
     DESTRUCT = ZEND_ACC_DTOR,
                ^~~~~~~~~~~~~
/opt/m/phpx/include/phpx.h:1584:16: note: suggested alternative: 'ZEND_ACC_CTOR'
     DESTRUCT = ZEND_ACC_DTOR,
                ^~~~~~~~~~~~~
                ZEND_ACC_CTOR
/opt/m/phpx/include/phpx.h:1204:20: note: suggested alternative: 'ZEND_TYPE_CE'
             type = ZEND_TYPE_ENCODE(type_hint, allow_null);
                    ^~~~~~~~~~~~~~~~
                    ZEND_TYPE_CE
/opt/m/phpx/include/phpx.h:1207:52: error: too many initializers for 'zend_internal_arg_info' {aka '_zend_internal_arg_info'}
         { name, type, pass_by_reference, variadic, };
                                                    ^
/opt/m/phpx/include/phpx.h: In member function 'zend_internal_arg_info* php::ArgInfo::get()':
/opt/m/phpx/include/phpx.h:1227:18: error: 'zend_internal_arg_info' {aka 'struct _zend_internal_arg_info'} has no member named 'pass_by_reference'
         _info[0].pass_by_reference = return_reference;
                  ^~~~~~~~~~~~~~~~~
In file included from /opt/m/phpx/src/array.cc:17:
/opt/m/phpx/include/phpx.h: In function 'void php::throwException(const char*, const char*, int)':
/opt/m/phpx/include/phpx.h:1302:43: error: expected ')' before 'TSRMLS_CC'
     zend_throw_exception(ce, message, code TSRMLS_CC);
                         ~                 ^~~~~~~~~~
                                           )
In file included from /opt/m/phpx/include/phpx.h:34,
                 from /opt/m/phpx/src/array.cc:17:
/opt/m/phpx/include/phpx.h: In member function 'php::Variant php::Object::callParentMethod(const char*)':
/opt/m/phpx/include/phpx.h:1359:43: error: cannot convert 'zval*' {aka '_zval_struct*'} to 'zend_object*' {aka '_zend_object*'}
         zend_call_method_with_0_params(ptr(), Z_OBJCE_P(ptr())->parent, NULL, func, retval.ptr());
                                        ~~~^~
/usr/local/php8/include/php/Zend/zend_interfaces.h:44:19: note: in definition of macro 'zend_call_method_with_0_params'
  zend_call_method(obj, obj_ce, fn_proxy, function_name, sizeof(function_name)-1, retval, 0, NULL, NULL)
                   ^~~
In file included from /opt/m/phpx/include/phpx.h:34,
                 from /opt/m/phpx/src/array.cc:17:
/usr/local/php8/include/php/Zend/zend_interfaces.h:41:46: note:   initializing argument 1 of 'zval* zend_call_method(zend_object*, zend_class_entry*, zend_function**, const char*, size_t, zval*, uint32_t, zval*, zval*)'
 ZEND_API zval* zend_call_method(zend_object *object, zend_class_entry *obj_ce, zend_function **fn_proxy, const char *function_name, size_t function_name_len, zval *retval, uint32_t param_count, zval* arg1, zval* arg2);
                                 ~~~~~~~~~~~~~^~~~~~
In file included from /opt/m/phpx/include/phpx.h:34,
                 from /opt/m/phpx/src/array.cc:17:
/opt/m/phpx/include/phpx.h: In member function 'php::Variant php::Object::callParentMethod(const char*, const php::Variant&)':
/opt/m/phpx/include/phpx.h:1365:43: error: cannot convert 'zval*' {aka '_zval_struct*'} to 'zend_object*' {aka '_zend_object*'}
         zend_call_method_with_1_params(ptr(), Z_OBJCE_P(ptr())->parent, NULL, func, retval.ptr(),
                                        ~~~^~
/usr/local/php8/include/php/Zend/zend_interfaces.h:47:19: note: in definition of macro 'zend_call_method_with_1_params'
  zend_call_method(obj, obj_ce, fn_proxy, function_name, sizeof(function_name)-1, retval, 1, arg1, NULL)
                   ^~~
In file included from /opt/m/phpx/include/phpx.h:34,
                 from /opt/m/phpx/src/array.cc:17:
/usr/local/php8/include/php/Zend/zend_interfaces.h:41:46: note:   initializing argument 1 of 'zval* zend_call_method(zend_object*, zend_class_entry*, zend_function**, const char*, size_t, zval*, uint32_t, zval*, zval*)'
 ZEND_API zval* zend_call_method(zend_object *object, zend_class_entry *obj_ce, zend_function **fn_proxy, const char *function_name, size_t function_name_len, zval *retval, uint32_t param_count, zval* arg1, zval* arg2);
                                 ~~~~~~~~~~~~~^~~~~~
In file included from /opt/m/phpx/include/phpx.h:34,
                 from /opt/m/phpx/src/array.cc:17:
/opt/m/phpx/include/phpx.h: In member function 'php::Variant php::Object::callParentMethod(const char*, const php::Variant&, const php::Variant&)':
/opt/m/phpx/include/phpx.h:1373:43: error: cannot convert 'zval*' {aka '_zval_struct*'} to 'zend_object*' {aka '_zend_object*'}
         zend_call_method_with_2_params(ptr(), Z_OBJCE_P(ptr())->parent, NULL, func, retval.ptr(),
                                        ~~~^~
/usr/local/php8/include/php/Zend/zend_interfaces.h:50:19: note: in definition of macro 'zend_call_method_with_2_params'
  zend_call_method(obj, obj_ce, fn_proxy, function_name, sizeof(function_name)-1, retval, 2, arg1, arg2)
                   ^~~
In file included from /opt/m/phpx/include/phpx.h:34,
                 from /opt/m/phpx/src/array.cc:17:
/usr/local/php8/include/php/Zend/zend_interfaces.h:41:46: note:   initializing argument 1 of 'zval* zend_call_method(zend_object*, zend_class_entry*, zend_function**, const char*, size_t, zval*, uint32_t, zval*, zval*)'
 ZEND_API zval* zend_call_method(zend_object *object, zend_class_entry *obj_ce, zend_function **fn_proxy, const char *function_name, size_t function_name_len, zval *retval, uint32_t param_count, zval* arg1, zval* arg2);
                                 ~~~~~~~~~~~~~^~~~~~
In file included from /opt/m/phpx/src/array.cc:17:
/opt/m/phpx/include/phpx.h: In member function 'php::Variant php::Object::get(const char*)':
/opt/m/phpx/include/phpx.h:1400:66: error: cannot convert 'zval*' {aka '_zval_struct*'} to 'zend_object*' {aka '_zend_object*'}
         zval *member_p = zend_read_property(Z_OBJCE_P(ptr()), ptr(), name, strlen(name), 0, &rv);
                                                               ~~~^~
In file included from /usr/local/php8/include/php/main/php.h:35,
                 from /opt/m/phpx/include/phpx.h:21,
                 from /opt/m/phpx/src/array.cc:17:
/usr/local/php8/include/php/Zend/zend_API.h:407:73: note:   initializing argument 2 of 'zval* zend_read_property(zend_class_entry*, zend_object*, const char*, size_t, zend_bool, zval*)'
 ZEND_API zval *zend_read_property(zend_class_entry *scope, zend_object *object, const char *name, size_t name_length, zend_bool silent, zval *rv);
                                                            ~~~~~~~~~~~~~^~~~~~
In file included from /opt/m/phpx/src/array.cc:17:
/opt/m/phpx/include/phpx.h: In member function 'void php::Object::set(const char*, const php::Variant&)':
/opt/m/phpx/include/phpx.h:1413:51: error: cannot convert 'zval*' {aka '_zval_struct*'} to 'zend_object*' {aka '_zend_object*'}
         zend_update_property(Z_OBJCE_P(ptr()), ptr(), name, strlen(name), const_cast<Variant &>(v).ptr());
                                                ~~~^~
In file included from /usr/local/php8/include/php/main/php.h:35,
                 from /opt/m/phpx/include/phpx.h:21,
                 from /opt/m/phpx/src/array.cc:17:
/usr/local/php8/include/php/Zend/zend_API.h:387:74: note:   initializing argument 2 of 'void zend_update_property(zend_class_entry*, zend_object*, const char*, size_t, zval*)'
 ZEND_API void zend_update_property(zend_class_entry *scope, zend_object *object, const char *name, size_t name_length, zval *value);
                                                             ~~~~~~~~~~~~~^~~~~~
In file included from /opt/m/phpx/src/array.cc:17:
/opt/m/phpx/include/phpx.h: In member function 'void php::Object::set(const char*, php::Array&)':
/opt/m/phpx/include/phpx.h:1417:51: error: cannot convert 'zval*' {aka '_zval_struct*'} to 'zend_object*' {aka '_zend_object*'}
         zend_update_property(Z_OBJCE_P(ptr()), ptr(), name, strlen(name), v.ptr());
                                                ~~~^~
In file included from /usr/local/php8/include/php/main/php.h:35,
                 from /opt/m/phpx/include/phpx.h:21,
                 from /opt/m/phpx/src/array.cc:17:
/usr/local/php8/include/php/Zend/zend_API.h:387:74: note:   initializing argument 2 of 'void zend_update_property(zend_class_entry*, zend_object*, const char*, size_t, zval*)'
 ZEND_API void zend_update_property(zend_class_entry *scope, zend_object *object, const char *name, size_t name_length, zval *value);
                                                             ~~~~~~~~~~~~~^~~~~~
In file included from /opt/m/phpx/src/array.cc:17:
/opt/m/phpx/include/phpx.h: In member function 'void php::Object::set(const char*, std::__cxx11::string&)':
/opt/m/phpx/include/phpx.h:1421:59: error: cannot convert 'zval*' {aka '_zval_struct*'} to 'zend_object*' {aka '_zend_object*'}
         zend_update_property_stringl(Z_OBJCE_P(ptr()), ptr(), name, strlen(name), v.c_str(), v.length());
                                                        ~~~^~
In file included from /usr/local/php8/include/php/main/php.h:35,
                 from /opt/m/phpx/include/phpx.h:21,
                 from /opt/m/phpx/src/array.cc:17:
/usr/local/php8/include/php/Zend/zend_API.h:394:82: note:   initializing argument 2 of 'void zend_update_property_stringl(zend_class_entry*, zend_object*, const char*, size_t, const char*, size_t)'
 ZEND_API void zend_update_property_stringl(zend_class_entry *scope, zend_object *object, const char *name, size_t name_length, const char *value, size_t value_length);
                                                                     ~~~~~~~~~~~~~^~~~~~
In file included from /opt/m/phpx/src/array.cc:17:
/opt/m/phpx/include/phpx.h: In member function 'void php::Object::set(const char*, std::__cxx11::string)':
/opt/m/phpx/include/phpx.h:1425:59: error: cannot convert 'zval*' {aka '_zval_struct*'} to 'zend_object*' {aka '_zend_object*'}
         zend_update_property_stringl(Z_OBJCE_P(ptr()), ptr(), name, strlen(name), v.c_str(), v.length());
                                                        ~~~^~
In file included from /usr/local/php8/include/php/main/php.h:35,
                 from /opt/m/phpx/include/phpx.h:21,
                 from /opt/m/phpx/src/array.cc:17:
/usr/local/php8/include/php/Zend/zend_API.h:394:82: note:   initializing argument 2 of 'void zend_update_property_stringl(zend_class_entry*, zend_object*, const char*, size_t, const char*, size_t)'
 ZEND_API void zend_update_property_stringl(zend_class_entry *scope, zend_object *object, const char *name, size_t name_length, const char *value, size_t value_length);
                                                                     ~~~~~~~~~~~~~^~~~~~
In file included from /opt/m/phpx/src/array.cc:17:
/opt/m/phpx/include/phpx.h: In member function 'void php::Object::set(const char*, const char*)':
/opt/m/phpx/include/phpx.h:1429:58: error: cannot convert 'zval*' {aka '_zval_struct*'} to 'zend_object*' {aka '_zend_object*'}
         zend_update_property_string(Z_OBJCE_P(ptr()), ptr(), name, strlen(name), v);
                                                       ~~~^~
In file included from /usr/local/php8/include/php/main/php.h:35,
                 from /opt/m/phpx/include/phpx.h:21,
                 from /opt/m/phpx/src/array.cc:17:
/usr/local/php8/include/php/Zend/zend_API.h:393:81: note:   initializing argument 2 of 'void zend_update_property_string(zend_class_entry*, zend_object*, const char*, size_t, const char*)'
 ZEND_API void zend_update_property_string(zend_class_entry *scope, zend_object *object, const char *name, size_t name_length, const char *value);
                                                                    ~~~~~~~~~~~~~^~~~~~
In file included from /opt/m/phpx/src/array.cc:17:
/opt/m/phpx/include/phpx.h: In member function 'void php::Object::set(const char*, int)':
/opt/m/phpx/include/phpx.h:1433:56: error: cannot convert 'zval*' {aka '_zval_struct*'} to 'zend_object*' {aka '_zend_object*'}
         zend_update_property_long(Z_OBJCE_P(ptr()), ptr(), name, strlen(name), v);
                                                     ~~~^~
In file included from /usr/local/php8/include/php/main/php.h:35,
                 from /opt/m/phpx/include/phpx.h:21,
                 from /opt/m/phpx/src/array.cc:17:
/usr/local/php8/include/php/Zend/zend_API.h:390:79: note:   initializing argument 2 of 'void zend_update_property_long(zend_class_entry*, zend_object*, const char*, size_t, zend_long)'
 ZEND_API void zend_update_property_long(zend_class_entry *scope, zend_object *object, const char *name, size_t name_length, zend_long value);
                                                                  ~~~~~~~~~~~~~^~~~~~
In file included from /opt/m/phpx/src/array.cc:17:
/opt/m/phpx/include/phpx.h: In member function 'void php::Object::set(const char*, long int)':
/opt/m/phpx/include/phpx.h:1437:56: error: cannot convert 'zval*' {aka '_zval_struct*'} to 'zend_object*' {aka '_zend_object*'}
         zend_update_property_long(Z_OBJCE_P(ptr()), ptr(), name, strlen(name), v);
                                                     ~~~^~
In file included from /usr/local/php8/include/php/main/php.h:35,
                 from /opt/m/phpx/include/phpx.h:21,
                 from /opt/m/phpx/src/array.cc:17:
/usr/local/php8/include/php/Zend/zend_API.h:390:79: note:   initializing argument 2 of 'void zend_update_property_long(zend_class_entry*, zend_object*, const char*, size_t, zend_long)'
 ZEND_API void zend_update_property_long(zend_class_entry *scope, zend_object *object, const char *name, size_t name_length, zend_long value);
                                                                  ~~~~~~~~~~~~~^~~~~~
In file included from /opt/m/phpx/src/array.cc:17:
/opt/m/phpx/include/phpx.h: In member function 'void php::Object::set(const char*, double)':
/opt/m/phpx/include/phpx.h:1441:58: error: cannot convert 'zval*' {aka '_zval_struct*'} to 'zend_object*' {aka '_zend_object*'}
         zend_update_property_double(Z_OBJCE_P(ptr()), ptr(), name, strlen(name), v);
                                                       ~~~^~
In file included from /usr/local/php8/include/php/main/php.h:35,
                 from /opt/m/phpx/include/phpx.h:21,
                 from /opt/m/phpx/src/array.cc:17:
/usr/local/php8/include/php/Zend/zend_API.h:391:81: note:   initializing argument 2 of 'void zend_update_property_double(zend_class_entry*, zend_object*, const char*, size_t, double)'
 ZEND_API void zend_update_property_double(zend_class_entry *scope, zend_object *object, const char *name, size_t name_length, double value);
                                                                    ~~~~~~~~~~~~~^~~~~~
In file included from /opt/m/phpx/src/array.cc:17:
/opt/m/phpx/include/phpx.h: In member function 'void php::Object::set(const char*, float)':
/opt/m/phpx/include/phpx.h:1445:58: error: cannot convert 'zval*' {aka '_zval_struct*'} to 'zend_object*' {aka '_zend_object*'}
         zend_update_property_double(Z_OBJCE_P(ptr()), ptr(), name, strlen(name), (double) v);
                                                       ~~~^~
In file included from /usr/local/php8/include/php/main/php.h:35,
                 from /opt/m/phpx/include/phpx.h:21,
                 from /opt/m/phpx/src/array.cc:17:
/usr/local/php8/include/php/Zend/zend_API.h:391:81: note:   initializing argument 2 of 'void zend_update_property_double(zend_class_entry*, zend_object*, const char*, size_t, double)'
 ZEND_API void zend_update_property_double(zend_class_entry *scope, zend_object *object, const char *name, size_t name_length, double value);
                                                                    ~~~~~~~~~~~~~^~~~~~
In file included from /opt/m/phpx/src/array.cc:17:
/opt/m/phpx/include/phpx.h: In member function 'void php::Object::set(const char*, bool)':
/opt/m/phpx/include/phpx.h:1449:56: error: cannot convert 'zval*' {aka '_zval_struct*'} to 'zend_object*' {aka '_zend_object*'}
         zend_update_property_bool(Z_OBJCE_P(ptr()), ptr(), name, strlen(name), v ? 1 : 0);
                                                     ~~~^~
In file included from /usr/local/php8/include/php/main/php.h:35,
                 from /opt/m/phpx/include/phpx.h:21,
                 from /opt/m/phpx/src/array.cc:17:
/usr/local/php8/include/php/Zend/zend_API.h:389:79: note:   initializing argument 2 of 'void zend_update_property_bool(zend_class_entry*, zend_object*, const char*, size_t, zend_long)'
 ZEND_API void zend_update_property_bool(zend_class_entry *scope, zend_object *object, const char *name, size_t name_length, zend_long value);
                                                                  ~~~~~~~~~~~~~^~~~~~
In file included from /opt/m/phpx/src/array.cc:17:
/opt/m/phpx/include/phpx.h: At global scope:
/opt/m/phpx/include/phpx.h:1584:16: error: 'ZEND_ACC_DTOR' was not declared in this scope
     DESTRUCT = ZEND_ACC_DTOR,
                ^~~~~~~~~~~~~
/opt/m/phpx/include/phpx.h:1584:16: note: suggested alternative: 'ZEND_ACC_CTOR'
     DESTRUCT = ZEND_ACC_DTOR,
                ^~~~~~~~~~~~~
                ZEND_ACC_CTOR
/opt/m/phpx/include/phpx.h: In member function 'bool php::Interface::activate()':
/opt/m/phpx/include/phpx.h:1748:51: error: expected ')' before 'TSRMLS_CC'
         ce = zend_register_internal_interface(&_ce TSRMLS_CC);
                                              ~    ^~~~~~~~~~
                                                   )
/opt/m/phpx/include/phpx.h: At global scope:
/opt/m/phpx/include/phpx.h:1794:5: error: invalid conversion from 'int (*)(int, int)' to 'zend_result (*)(int, int)' {aka 'ZEND_RESULT_CODE (*)(int, int)'} [-fpermissive]
     };
     ^
/opt/m/phpx/include/phpx.h:1794:5: error: invalid conversion from 'int (*)(int, int)' to 'zend_result (*)(int, int)' {aka 'ZEND_RESULT_CODE (*)(int, int)'} [-fpermissive]
/opt/m/phpx/include/phpx.h:1794:5: error: invalid conversion from 'int (*)(int, int)' to 'zend_result (*)(int, int)' {aka 'ZEND_RESULT_CODE (*)(int, int)'} [-fpermissive]
/opt/m/phpx/include/phpx.h:1794:5: error: invalid conversion from 'int (*)(int, int)' to 'zend_result (*)(int, int)' {aka 'ZEND_RESULT_CODE (*)(int, int)'} [-fpermissive]
/opt/m/phpx/include/phpx.h: In member function 'bool php::Interface::activate()':
/opt/m/phpx/include/phpx.h:1748:51: error: expected ')' before 'TSRMLS_CC'
         ce = zend_register_internal_interface(&_ce TSRMLS_CC);
                                              ~    ^~~~~~~~~~
                                                   )
/opt/m/phpx/include/phpx.h: In member function 'bool php::Interface::activate()':
/opt/m/phpx/include/phpx.h:1748:51: error: expected ')' before 'TSRMLS_CC'
         ce = zend_register_internal_interface(&_ce TSRMLS_CC);
                                              ~    ^~~~~~~~~~
                                                   )
/opt/m/phpx/include/phpx.h: At global scope:
/opt/m/phpx/include/phpx.h:1794:5: error: invalid conversion from 'int (*)(int, int)' to 'zend_result (*)(int, int)' {aka 'ZEND_RESULT_CODE (*)(int, int)'} [-fpermissive]
     };
     ^
/opt/m/phpx/include/phpx.h:1794:5: error: invalid conversion from 'int (*)(int, int)' to 'zend_result (*)(int, int)' {aka 'ZEND_RESULT_CODE (*)(int, int)'} [-fpermissive]
/opt/m/phpx/include/phpx.h:1794:5: error: invalid conversion from 'int (*)(int, int)' to 'zend_result (*)(int, int)' {aka 'ZEND_RESULT_CODE (*)(int, int)'} [-fpermissive]
/opt/m/phpx/include/phpx.h:1794:5: error: invalid conversion from 'int (*)(int, int)' to 'zend_result (*)(int, int)' {aka 'ZEND_RESULT_CODE (*)(int, int)'} [-fpermissive]
/opt/m/phpx/include/phpx.h: At global scope:
/opt/m/phpx/include/phpx.h:1794:5: error: invalid conversion from 'int (*)(int, int)' to 'zend_result (*)(int, int)' {aka 'ZEND_RESULT_CODE (*)(int, int)'} [-fpermissive]
     };
     ^
/opt/m/phpx/include/phpx.h:1794:5: error: invalid conversion from 'int (*)(int, int)' to 'zend_result (*)(int, int)' {aka 'ZEND_RESULT_CODE (*)(int, int)'} [-fpermissive]
/opt/m/phpx/include/phpx.h:1794:5: error: invalid conversion from 'int (*)(int, int)' to 'zend_result (*)(int, int)' {aka 'ZEND_RESULT_CODE (*)(int, int)'} [-fpermissive]
/opt/m/phpx/include/phpx.h:1794:5: error: invalid conversion from 'int (*)(int, int)' to 'zend_result (*)(int, int)' {aka 'ZEND_RESULT_CODE (*)(int, int)'} [-fpermissive]
make[2]: *** [CMakeFiles/phpx_static.dir/build.make:63: CMakeFiles/phpx_static.dir/src/array.o] Error 1
/opt/m/phpx/src/class.cc: In member function 'bool php::Class::activate()':
/opt/m/phpx/src/class.cc:177:47: error: expected ')' before 'TSRMLS_CC'
         ce = zend_register_internal_class(&_ce TSRMLS_CC);
                                          ~    ^~~~~~~~~~
                                               )
make[1]: *** [CMakeFiles/Makefile2:68: CMakeFiles/phpx_static.dir/all] Error 2
make[1]: *** Waiting for unfinished jobs....
[ 22%] Building CXX object CMakeFiles/phpx.dir/src/exec.o
/opt/m/phpx/src/base.cc: In function 'bool php::define(const char*, const php::Variant&, bool)':
/opt/m/phpx/src/base.cc:227:34: error: 'const zend_object_handlers' {aka 'const struct _zend_object_handlers'} has no member named 'get'; did you mean 'get_gc'?
             if (Z_OBJ_HT_P(val)->get)
                                  ^~~
                                  get_gc
/opt/m/phpx/src/base.cc:230:40: error: 'const zend_object_handlers' {aka 'const struct _zend_object_handlers'} has no member named 'get'; did you mean 'get_gc'?
                 val = Z_OBJ_HT_P(val)->get(val, &rv);
                                        ^~~
                                        get_gc
/opt/m/phpx/src/base.cc:236:75: error: cannot convert 'zval*' {aka '_zval_struct*'} to 'zend_object*' {aka '_zend_object*'} in argument passing
                 if (Z_OBJ_HT_P(val)->cast_object(val, &val_free, IS_STRING) == SUCCESS)
                                                                           ^
/opt/m/phpx/src/base.cc: In function 'ZEND_RESULT_CODE php::_check_args_num(zend_execute_data*, int)':
/opt/m/phpx/src/base.cc:382:9: error: 'zend_wrong_paramers_count_error' was not declared in this scope
         zend_wrong_paramers_count_error(num_args, min_num_args, max_num_args);
         ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
/opt/m/phpx/src/base.cc:382:9: note: suggested alternative: 'zend_wrong_parameters_count_error'
         zend_wrong_paramers_count_error(num_args, min_num_args, max_num_args);
         ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
         zend_wrong_parameters_count_error
make[2]: *** [CMakeFiles/phpx.dir/build.make:63: CMakeFiles/phpx.dir/src/array.o] Error 1
make[2]: *** Waiting for unfinished jobs....
make[2]: *** [CMakeFiles/phpx.dir/build.make:89: CMakeFiles/phpx.dir/src/class.o] Error 1
make[2]: *** [CMakeFiles/phpx.dir/build.make:76: CMakeFiles/phpx.dir/src/base.o] Error 1
In file included from /opt/m/phpx/src/exec.cc:17:
/opt/m/phpx/include/phpx.h: In member function 'php::String php::Array::join(php::String&)':
/opt/m/phpx/include/phpx.h:1049:37: error: cannot convert 'zval*' {aka '_zval_struct*'} to 'HashTable*' {aka '_zend_array*'}
         php_implode(delim.ptr(), ptr(), retval.ptr());
                                  ~~~^~
In file included from /usr/local/php8/include/php/ext/standard/php_standard.h:19,
                 from /opt/m/phpx/include/phpx.h:46,
                 from /opt/m/phpx/src/exec.cc:17:
/usr/local/php8/include/php/ext/standard/php_string.h:56:62: note:   initializing argument 2 of 'void php_implode(const zend_string*, HashTable*, zval*)'
 PHPAPI void php_implode(const zend_string *delim, HashTable *arr, zval *return_value);
                                                   ~~~~~~~~~~~^~~
In file included from /usr/local/php8/include/php/Zend/zend.h:33,
                 from /usr/local/php8/include/php/main/php.h:31,
                 from /opt/m/phpx/include/phpx.h:21,
                 from /opt/m/phpx/src/exec.cc:17:
/opt/m/phpx/include/phpx.h: In member function 'bool php::Array::sort()':
/opt/m/phpx/include/phpx.h:1059:50: error: invalid conversion from 'int (*)(const void*, const void*)' to 'bucket_compare_func_t' {aka 'int (*)(_Bucket*, _Bucket*)'} [-fpermissive]
         return zend_hash_sort(Z_ARRVAL_P(ptr()), array_data_compare, 1) == SUCCESS;
                                                  ^~~~~~~~~~~~~~~~~~
/usr/local/php8/include/php/Zend/zend_hash.h:272:35: note: in definition of macro 'zend_hash_sort'
  zend_hash_sort_ex(ht, zend_sort, compare_func, renumber)
                                   ^~~~~~~~~~~~
/usr/local/php8/include/php/Zend/zend_hash.h:268:108: note:   initializing argument 3 of 'void zend_hash_sort_ex(HashTable*, sort_func_t, bucket_compare_func_t, zend_bool)'
 ZEND_API void  ZEND_FASTCALL zend_hash_sort_ex(HashTable *ht, sort_func_t sort_func, bucket_compare_func_t compare_func, zend_bool renumber);
                                                                                      ~~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~
In file included from /opt/m/phpx/src/exec.cc:17:
/opt/m/phpx/include/phpx.h:1059:73: error: no match for 'operator==' (operand types are 'void' and 'ZEND_RESULT_CODE')
         return zend_hash_sort(Z_ARRVAL_P(ptr()), array_data_compare, 1) == SUCCESS;
/opt/m/phpx/include/phpx.h: In destructor 'php::ArgInfo::~ArgInfo()':
/opt/m/phpx/include/phpx.h:1174:17: error: 'ZEND_TYPE_IS_CLASS' was not declared in this scope
             if (ZEND_TYPE_IS_CLASS(info[i].type))
                 ^~~~~~~~~~~~~~~~~~
/opt/m/phpx/include/phpx.h:1174:17: note: suggested alternative: 'ZEND_TYPE_HAS_CLASS'
             if (ZEND_TYPE_IS_CLASS(info[i].type))
                 ^~~~~~~~~~~~~~~~~~
                 ZEND_TYPE_HAS_CLASS
In file included from /usr/local/php8/include/php/Zend/zend.h:30,
                 from /usr/local/php8/include/php/main/php.h:31,
                 from /opt/m/phpx/include/phpx.h:21,
                 from /opt/m/phpx/src/exec.cc:17:
/opt/m/phpx/include/phpx.h:1176:39: error: invalid cast from type 'zend_type' to type 'void*'
                 efree((void* )info[i].type);
                                       ^~~~
/usr/local/php8/include/php/Zend/zend_alloc.h:161:34: note: in definition of macro 'efree'
 #define efree(ptr)       _efree((ptr) ZEND_FILE_LINE_CC ZEND_FILE_LINE_EMPTY_CC)
                                  ^~~
In file included from /opt/m/phpx/src/exec.cc:17:
/opt/m/phpx/include/phpx.h: In member function 'void php::ArgInfo::add(const char*, const char*, int, bool, bool, bool)':
/opt/m/phpx/include/phpx.h:1195:36: error: no matching function for call to 'zend_type::zend_type(char*&)'
                 type = (zend_type) _s;
                                    ^~
In file included from /usr/local/php8/include/php/Zend/zend.h:27,
                 from /usr/local/php8/include/php/main/php.h:31,
                 from /opt/m/phpx/include/phpx.h:21,
                 from /opt/m/phpx/src/exec.cc:17:
/usr/local/php8/include/php/Zend/zend_types.h:134:3: note: candidate: 'zend_type::zend_type()'
 } zend_type;
   ^~~~~~~~~
/usr/local/php8/include/php/Zend/zend_types.h:134:3: note:   candidate expects 0 arguments, 1 provided
/usr/local/php8/include/php/Zend/zend_types.h:134:3: note: candidate: 'constexpr zend_type::zend_type(const zend_type&)'
/usr/local/php8/include/php/Zend/zend_types.h:134:3: note:   no known conversion for argument 1 from 'char*' to 'const zend_type&'
/usr/local/php8/include/php/Zend/zend_types.h:134:3: note: candidate: 'constexpr zend_type::zend_type(zend_type&&)'
/usr/local/php8/include/php/Zend/zend_types.h:134:3: note:   no known conversion for argument 1 from 'char*' to 'zend_type&&'
In file included from /usr/local/php8/include/php/Zend/zend.h:30,
                 from /usr/local/php8/include/php/main/php.h:31,
                 from /opt/m/phpx/include/phpx.h:21,
                 from /opt/m/phpx/src/exec.cc:17:
/usr/local/php8/include/php/Zend/zend_alloc.h:170:80: error: no matching function for call to 'zend_type::zend_type(char*)'
 #define estrdup(s)       _estrdup((s) ZEND_FILE_LINE_CC ZEND_FILE_LINE_EMPTY_CC)
                                                                                ^
/opt/m/phpx/include/phpx.h:1199:36: note: in expansion of macro 'estrdup'
                 type = (zend_type) estrdup(class_name);
                                    ^~~~~~~
In file included from /usr/local/php8/include/php/Zend/zend.h:27,
                 from /usr/local/php8/include/php/main/php.h:31,
                 from /opt/m/phpx/include/phpx.h:21,
                 from /opt/m/phpx/src/exec.cc:17:
/usr/local/php8/include/php/Zend/zend_types.h:134:3: note: candidate: 'zend_type::zend_type()'
 } zend_type;
   ^~~~~~~~~
/usr/local/php8/include/php/Zend/zend_types.h:134:3: note:   candidate expects 0 arguments, 1 provided
/usr/local/php8/include/php/Zend/zend_types.h:134:3: note: candidate: 'constexpr zend_type::zend_type(const zend_type&)'
/usr/local/php8/include/php/Zend/zend_types.h:134:3: note:   no known conversion for argument 1 from 'char*' to 'const zend_type&'
/usr/local/php8/include/php/Zend/zend_types.h:134:3: note: candidate: 'constexpr zend_type::zend_type(zend_type&&)'
/usr/local/php8/include/php/Zend/zend_types.h:134:3: note:   no known conversion for argument 1 from 'char*' to 'zend_type&&'
In file included from /opt/m/phpx/src/exec.cc:17:
/opt/m/phpx/include/phpx.h:1204:20: error: 'ZEND_TYPE_ENCODE' was not declared in this scope
             type = ZEND_TYPE_ENCODE(type_hint, allow_null);
                    ^~~~~~~~~~~~~~~~
/opt/m/phpx/include/phpx.h:1204:20: note: suggested alternative: 'ZEND_TYPE_CE'
             type = ZEND_TYPE_ENCODE(type_hint, allow_null);
                    ^~~~~~~~~~~~~~~~
                    ZEND_TYPE_CE
/opt/m/phpx/include/phpx.h:1207:52: error: too many initializers for 'zend_internal_arg_info' {aka '_zend_internal_arg_info'}
         { name, type, pass_by_reference, variadic, };
                                                    ^
/opt/m/phpx/include/phpx.h: In member function 'zend_internal_arg_info* php::ArgInfo::get()':
/opt/m/phpx/include/phpx.h:1227:18: error: 'zend_internal_arg_info' {aka 'struct _zend_internal_arg_info'} has no member named 'pass_by_reference'
         _info[0].pass_by_reference = return_reference;
                  ^~~~~~~~~~~~~~~~~
In file included from /opt/m/phpx/src/exec.cc:17:
/opt/m/phpx/include/phpx.h: In function 'void php::throwException(const char*, const char*, int)':
/opt/m/phpx/include/phpx.h:1302:43: error: expected ')' before 'TSRMLS_CC'
     zend_throw_exception(ce, message, code TSRMLS_CC);
                         ~                 ^~~~~~~~~~
                                           )
In file included from /opt/m/phpx/include/phpx.h:34,
                 from /opt/m/phpx/src/exec.cc:17:
/opt/m/phpx/include/phpx.h: In member function 'php::Variant php::Object::callParentMethod(const char*)':
/opt/m/phpx/include/phpx.h:1359:43: error: cannot convert 'zval*' {aka '_zval_struct*'} to 'zend_object*' {aka '_zend_object*'}
         zend_call_method_with_0_params(ptr(), Z_OBJCE_P(ptr())->parent, NULL, func, retval.ptr());
                                        ~~~^~
/usr/local/php8/include/php/Zend/zend_interfaces.h:44:19: note: in definition of macro 'zend_call_method_with_0_params'
  zend_call_method(obj, obj_ce, fn_proxy, function_name, sizeof(function_name)-1, retval, 0, NULL, NULL)
                   ^~~
In file included from /opt/m/phpx/include/phpx.h:34,
                 from /opt/m/phpx/src/exec.cc:17:
/usr/local/php8/include/php/Zend/zend_interfaces.h:41:46: note:   initializing argument 1 of 'zval* zend_call_method(zend_object*, zend_class_entry*, zend_function**, const char*, size_t, zval*, uint32_t, zval*, zval*)'
 ZEND_API zval* zend_call_method(zend_object *object, zend_class_entry *obj_ce, zend_function **fn_proxy, const char *function_name, size_t function_name_len, zval *retval, uint32_t param_count, zval* arg1, zval* arg2);
                                 ~~~~~~~~~~~~~^~~~~~
In file included from /opt/m/phpx/include/phpx.h:34,
                 from /opt/m/phpx/src/exec.cc:17:
/opt/m/phpx/include/phpx.h: In member function 'php::Variant php::Object::callParentMethod(const char*, const php::Variant&)':
/opt/m/phpx/include/phpx.h:1365:43: error: cannot convert 'zval*' {aka '_zval_struct*'} to 'zend_object*' {aka '_zend_object*'}
         zend_call_method_with_1_params(ptr(), Z_OBJCE_P(ptr())->parent, NULL, func, retval.ptr(),
                                        ~~~^~
/usr/local/php8/include/php/Zend/zend_interfaces.h:47:19: note: in definition of macro 'zend_call_method_with_1_params'
  zend_call_method(obj, obj_ce, fn_proxy, function_name, sizeof(function_name)-1, retval, 1, arg1, NULL)
                   ^~~
In file included from /opt/m/phpx/include/phpx.h:34,
                 from /opt/m/phpx/src/exec.cc:17:
/usr/local/php8/include/php/Zend/zend_interfaces.h:41:46: note:   initializing argument 1 of 'zval* zend_call_method(zend_object*, zend_class_entry*, zend_function**, const char*, size_t, zval*, uint32_t, zval*, zval*)'
 ZEND_API zval* zend_call_method(zend_object *object, zend_class_entry *obj_ce, zend_function **fn_proxy, const char *function_name, size_t function_name_len, zval *retval, uint32_t param_count, zval* arg1, zval* arg2);
                                 ~~~~~~~~~~~~~^~~~~~
In file included from /opt/m/phpx/include/phpx.h:34,
                 from /opt/m/phpx/src/exec.cc:17:
/opt/m/phpx/include/phpx.h: In member function 'php::Variant php::Object::callParentMethod(const char*, const php::Variant&, const php::Variant&)':
/opt/m/phpx/include/phpx.h:1373:43: error: cannot convert 'zval*' {aka '_zval_struct*'} to 'zend_object*' {aka '_zend_object*'}
         zend_call_method_with_2_params(ptr(), Z_OBJCE_P(ptr())->parent, NULL, func, retval.ptr(),
                                        ~~~^~
/usr/local/php8/include/php/Zend/zend_interfaces.h:50:19: note: in definition of macro 'zend_call_method_with_2_params'
  zend_call_method(obj, obj_ce, fn_proxy, function_name, sizeof(function_name)-1, retval, 2, arg1, arg2)
                   ^~~
In file included from /opt/m/phpx/include/phpx.h:34,
                 from /opt/m/phpx/src/exec.cc:17:
/usr/local/php8/include/php/Zend/zend_interfaces.h:41:46: note:   initializing argument 1 of 'zval* zend_call_method(zend_object*, zend_class_entry*, zend_function**, const char*, size_t, zval*, uint32_t, zval*, zval*)'
 ZEND_API zval* zend_call_method(zend_object *object, zend_class_entry *obj_ce, zend_function **fn_proxy, const char *function_name, size_t function_name_len, zval *retval, uint32_t param_count, zval* arg1, zval* arg2);
                                 ~~~~~~~~~~~~~^~~~~~
In file included from /opt/m/phpx/src/exec.cc:17:
/opt/m/phpx/include/phpx.h: In member function 'php::Variant php::Object::get(const char*)':
/opt/m/phpx/include/phpx.h:1400:66: error: cannot convert 'zval*' {aka '_zval_struct*'} to 'zend_object*' {aka '_zend_object*'}
         zval *member_p = zend_read_property(Z_OBJCE_P(ptr()), ptr(), name, strlen(name), 0, &rv);
                                                               ~~~^~
In file included from /usr/local/php8/include/php/main/php.h:35,
                 from /opt/m/phpx/include/phpx.h:21,
                 from /opt/m/phpx/src/exec.cc:17:
/usr/local/php8/include/php/Zend/zend_API.h:407:73: note:   initializing argument 2 of 'zval* zend_read_property(zend_class_entry*, zend_object*, const char*, size_t, zend_bool, zval*)'
 ZEND_API zval *zend_read_property(zend_class_entry *scope, zend_object *object, const char *name, size_t name_length, zend_bool silent, zval *rv);
                                                            ~~~~~~~~~~~~~^~~~~~
In file included from /opt/m/phpx/src/exec.cc:17:
/opt/m/phpx/include/phpx.h: In member function 'void php::Object::set(const char*, const php::Variant&)':
/opt/m/phpx/include/phpx.h:1413:51: error: cannot convert 'zval*' {aka '_zval_struct*'} to 'zend_object*' {aka '_zend_object*'}
         zend_update_property(Z_OBJCE_P(ptr()), ptr(), name, strlen(name), const_cast<Variant &>(v).ptr());
                                                ~~~^~
In file included from /usr/local/php8/include/php/main/php.h:35,
                 from /opt/m/phpx/include/phpx.h:21,
                 from /opt/m/phpx/src/exec.cc:17:
/usr/local/php8/include/php/Zend/zend_API.h:387:74: note:   initializing argument 2 of 'void zend_update_property(zend_class_entry*, zend_object*, const char*, size_t, zval*)'
 ZEND_API void zend_update_property(zend_class_entry *scope, zend_object *object, const char *name, size_t name_length, zval *value);
                                                             ~~~~~~~~~~~~~^~~~~~
In file included from /opt/m/phpx/src/exec.cc:17:
/opt/m/phpx/include/phpx.h: In member function 'void php::Object::set(const char*, php::Array&)':
/opt/m/phpx/include/phpx.h:1417:51: error: cannot convert 'zval*' {aka '_zval_struct*'} to 'zend_object*' {aka '_zend_object*'}
         zend_update_property(Z_OBJCE_P(ptr()), ptr(), name, strlen(name), v.ptr());
                                                ~~~^~
In file included from /usr/local/php8/include/php/main/php.h:35,
                 from /opt/m/phpx/include/phpx.h:21,
                 from /opt/m/phpx/src/exec.cc:17:
/usr/local/php8/include/php/Zend/zend_API.h:387:74: note:   initializing argument 2 of 'void zend_update_property(zend_class_entry*, zend_object*, const char*, size_t, zval*)'
 ZEND_API void zend_update_property(zend_class_entry *scope, zend_object *object, const char *name, size_t name_length, zval *value);
                                                             ~~~~~~~~~~~~~^~~~~~
In file included from /opt/m/phpx/src/exec.cc:17:
/opt/m/phpx/include/phpx.h: In member function 'void php::Object::set(const char*, std::__cxx11::string&)':
/opt/m/phpx/include/phpx.h:1421:59: error: cannot convert 'zval*' {aka '_zval_struct*'} to 'zend_object*' {aka '_zend_object*'}
         zend_update_property_stringl(Z_OBJCE_P(ptr()), ptr(), name, strlen(name), v.c_str(), v.length());
                                                        ~~~^~
In file included from /usr/local/php8/include/php/main/php.h:35,
                 from /opt/m/phpx/include/phpx.h:21,
                 from /opt/m/phpx/src/exec.cc:17:
/usr/local/php8/include/php/Zend/zend_API.h:394:82: note:   initializing argument 2 of 'void zend_update_property_stringl(zend_class_entry*, zend_object*, const char*, size_t, const char*, size_t)'
 ZEND_API void zend_update_property_stringl(zend_class_entry *scope, zend_object *object, const char *name, size_t name_length, const char *value, size_t value_length);
                                                                     ~~~~~~~~~~~~~^~~~~~
In file included from /opt/m/phpx/src/exec.cc:17:
/opt/m/phpx/include/phpx.h: In member function 'void php::Object::set(const char*, std::__cxx11::string)':
/opt/m/phpx/include/phpx.h:1425:59: error: cannot convert 'zval*' {aka '_zval_struct*'} to 'zend_object*' {aka '_zend_object*'}
         zend_update_property_stringl(Z_OBJCE_P(ptr()), ptr(), name, strlen(name), v.c_str(), v.length());
                                                        ~~~^~
In file included from /usr/local/php8/include/php/main/php.h:35,
                 from /opt/m/phpx/include/phpx.h:21,
                 from /opt/m/phpx/src/exec.cc:17:
/usr/local/php8/include/php/Zend/zend_API.h:394:82: note:   initializing argument 2 of 'void zend_update_property_stringl(zend_class_entry*, zend_object*, const char*, size_t, const char*, size_t)'
 ZEND_API void zend_update_property_stringl(zend_class_entry *scope, zend_object *object, const char *name, size_t name_length, const char *value, size_t value_length);
                                                                     ~~~~~~~~~~~~~^~~~~~
In file included from /opt/m/phpx/src/exec.cc:17:
/opt/m/phpx/include/phpx.h: In member function 'void php::Object::set(const char*, const char*)':
/opt/m/phpx/include/phpx.h:1429:58: error: cannot convert 'zval*' {aka '_zval_struct*'} to 'zend_object*' {aka '_zend_object*'}
         zend_update_property_string(Z_OBJCE_P(ptr()), ptr(), name, strlen(name), v);
                                                       ~~~^~
In file included from /usr/local/php8/include/php/main/php.h:35,
                 from /opt/m/phpx/include/phpx.h:21,
                 from /opt/m/phpx/src/exec.cc:17:
/usr/local/php8/include/php/Zend/zend_API.h:393:81: note:   initializing argument 2 of 'void zend_update_property_string(zend_class_entry*, zend_object*, const char*, size_t, const char*)'
 ZEND_API void zend_update_property_string(zend_class_entry *scope, zend_object *object, const char *name, size_t name_length, const char *value);
                                                                    ~~~~~~~~~~~~~^~~~~~
In file included from /opt/m/phpx/src/exec.cc:17:
/opt/m/phpx/include/phpx.h: In member function 'void php::Object::set(const char*, int)':
/opt/m/phpx/include/phpx.h:1433:56: error: cannot convert 'zval*' {aka '_zval_struct*'} to 'zend_object*' {aka '_zend_object*'}
         zend_update_property_long(Z_OBJCE_P(ptr()), ptr(), name, strlen(name), v);
                                                     ~~~^~
In file included from /usr/local/php8/include/php/main/php.h:35,
                 from /opt/m/phpx/include/phpx.h:21,
                 from /opt/m/phpx/src/exec.cc:17:
/usr/local/php8/include/php/Zend/zend_API.h:390:79: note:   initializing argument 2 of 'void zend_update_property_long(zend_class_entry*, zend_object*, const char*, size_t, zend_long)'
 ZEND_API void zend_update_property_long(zend_class_entry *scope, zend_object *object, const char *name, size_t name_length, zend_long value);
                                                                  ~~~~~~~~~~~~~^~~~~~
In file included from /opt/m/phpx/src/exec.cc:17:
/opt/m/phpx/include/phpx.h: In member function 'void php::Object::set(const char*, long int)':
/opt/m/phpx/include/phpx.h:1437:56: error: cannot convert 'zval*' {aka '_zval_struct*'} to 'zend_object*' {aka '_zend_object*'}
         zend_update_property_long(Z_OBJCE_P(ptr()), ptr(), name, strlen(name), v);
                                                     ~~~^~
In file included from /usr/local/php8/include/php/main/php.h:35,
                 from /opt/m/phpx/include/phpx.h:21,
                 from /opt/m/phpx/src/exec.cc:17:
/usr/local/php8/include/php/Zend/zend_API.h:390:79: note:   initializing argument 2 of 'void zend_update_property_long(zend_class_entry*, zend_object*, const char*, size_t, zend_long)'
 ZEND_API void zend_update_property_long(zend_class_entry *scope, zend_object *object, const char *name, size_t name_length, zend_long value);
                                                                  ~~~~~~~~~~~~~^~~~~~
In file included from /opt/m/phpx/src/exec.cc:17:
/opt/m/phpx/include/phpx.h: In member function 'void php::Object::set(const char*, double)':
/opt/m/phpx/include/phpx.h:1441:58: error: cannot convert 'zval*' {aka '_zval_struct*'} to 'zend_object*' {aka '_zend_object*'}
         zend_update_property_double(Z_OBJCE_P(ptr()), ptr(), name, strlen(name), v);
                                                       ~~~^~
In file included from /usr/local/php8/include/php/main/php.h:35,
                 from /opt/m/phpx/include/phpx.h:21,
                 from /opt/m/phpx/src/exec.cc:17:
/usr/local/php8/include/php/Zend/zend_API.h:391:81: note:   initializing argument 2 of 'void zend_update_property_double(zend_class_entry*, zend_object*, const char*, size_t, double)'
 ZEND_API void zend_update_property_double(zend_class_entry *scope, zend_object *object, const char *name, size_t name_length, double value);
                                                                    ~~~~~~~~~~~~~^~~~~~
In file included from /opt/m/phpx/src/exec.cc:17:
/opt/m/phpx/include/phpx.h: In member function 'void php::Object::set(const char*, float)':
/opt/m/phpx/include/phpx.h:1445:58: error: cannot convert 'zval*' {aka '_zval_struct*'} to 'zend_object*' {aka '_zend_object*'}
         zend_update_property_double(Z_OBJCE_P(ptr()), ptr(), name, strlen(name), (double) v);
                                                       ~~~^~
In file included from /usr/local/php8/include/php/main/php.h:35,
                 from /opt/m/phpx/include/phpx.h:21,
                 from /opt/m/phpx/src/exec.cc:17:
/usr/local/php8/include/php/Zend/zend_API.h:391:81: note:   initializing argument 2 of 'void zend_update_property_double(zend_class_entry*, zend_object*, const char*, size_t, double)'
 ZEND_API void zend_update_property_double(zend_class_entry *scope, zend_object *object, const char *name, size_t name_length, double value);
                                                                    ~~~~~~~~~~~~~^~~~~~
In file included from /opt/m/phpx/src/exec.cc:17:
/opt/m/phpx/include/phpx.h: In member function 'void php::Object::set(const char*, bool)':
/opt/m/phpx/include/phpx.h:1449:56: error: cannot convert 'zval*' {aka '_zval_struct*'} to 'zend_object*' {aka '_zend_object*'}
         zend_update_property_bool(Z_OBJCE_P(ptr()), ptr(), name, strlen(name), v ? 1 : 0);
                                                     ~~~^~
In file included from /usr/local/php8/include/php/main/php.h:35,
                 from /opt/m/phpx/include/phpx.h:21,
                 from /opt/m/phpx/src/exec.cc:17:
/usr/local/php8/include/php/Zend/zend_API.h:389:79: note:   initializing argument 2 of 'void zend_update_property_bool(zend_class_entry*, zend_object*, const char*, size_t, zend_long)'
 ZEND_API void zend_update_property_bool(zend_class_entry *scope, zend_object *object, const char *name, size_t name_length, zend_long value);
                                                                  ~~~~~~~~~~~~~^~~~~~
In file included from /opt/m/phpx/src/exec.cc:17:
/opt/m/phpx/include/phpx.h: At global scope:
/opt/m/phpx/include/phpx.h:1584:16: error: 'ZEND_ACC_DTOR' was not declared in this scope
     DESTRUCT = ZEND_ACC_DTOR,
                ^~~~~~~~~~~~~
/opt/m/phpx/include/phpx.h:1584:16: note: suggested alternative: 'ZEND_ACC_CTOR'
     DESTRUCT = ZEND_ACC_DTOR,
                ^~~~~~~~~~~~~
                ZEND_ACC_CTOR
/opt/m/phpx/include/phpx.h: In member function 'bool php::Interface::activate()':
/opt/m/phpx/include/phpx.h:1748:51: error: expected ')' before 'TSRMLS_CC'
         ce = zend_register_internal_interface(&_ce TSRMLS_CC);
                                              ~    ^~~~~~~~~~
                                                   )
/opt/m/phpx/include/phpx.h: At global scope:
/opt/m/phpx/include/phpx.h:1794:5: error: invalid conversion from 'int (*)(int, int)' to 'zend_result (*)(int, int)' {aka 'ZEND_RESULT_CODE (*)(int, int)'} [-fpermissive]
     };
     ^
/opt/m/phpx/include/phpx.h:1794:5: error: invalid conversion from 'int (*)(int, int)' to 'zend_result (*)(int, int)' {aka 'ZEND_RESULT_CODE (*)(int, int)'} [-fpermissive]
/opt/m/phpx/include/phpx.h:1794:5: error: invalid conversion from 'int (*)(int, int)' to 'zend_result (*)(int, int)' {aka 'ZEND_RESULT_CODE (*)(int, int)'} [-fpermissive]
/opt/m/phpx/include/phpx.h:1794:5: error: invalid conversion from 'int (*)(int, int)' to 'zend_result (*)(int, int)' {aka 'ZEND_RESULT_CODE (*)(int, int)'} [-fpermissive]
make[2]: *** [CMakeFiles/phpx.dir/build.make:102: CMakeFiles/phpx.dir/src/exec.o] Error 1
make[1]: *** [CMakeFiles/Makefile2:105: CMakeFiles/phpx.dir/all] Error 2
make: *** [Makefile:130: all] Error 2
[root@11ffc26fd4a5 phpx]# ls
CMakeCache.txt  LICENSE    aliyun_rocker_mq  build.sh             examples              lib       phpinfo.php  script
CMakeFiles      Makefile   bin               cmake_install.cmake  include               logo.png  phpx.phar    src
CMakeLists.txt  README.md  build             console              install_manifest.txt  mango     rocketmq
[root@11ffc26fd4a5 phpx]# make -j 4
Scanning dependencies of target phpx
Scanning dependencies of target phpx_static
[ 13%] Building CXX object CMakeFiles/phpx.dir/src/array.o
[ 13%] Building CXX object CMakeFiles/phpx.dir/src/base.o
[ 13%] Building CXX object CMakeFiles/phpx.dir/src/class.o
[ 18%] Building CXX object CMakeFiles/phpx_static.dir/src/array.o
In file included from /opt/m/phpx/src/base.cc:17:
/opt/m/phpx/include/phpx.h: In member function 'php::String php::Array::join(php::String&)':
/opt/m/phpx/include/phpx.h:1049:37: error: cannot convert 'zval*' {aka '_zval_struct*'} to 'HashTable*' {aka '_zend_array*'}
         php_implode(delim.ptr(), ptr(), retval.ptr());
                                  ~~~^~
In file included from /usr/local/php8/include/php/ext/standard/php_standard.h:19,
                 from /opt/m/phpx/include/phpx.h:46,
                 from /opt/m/phpx/src/base.cc:17:
/usr/local/php8/include/php/ext/standard/php_string.h:56:62: note:   initializing argument 2 of 'void php_implode(const zend_string*, HashTable*, zval*)'
 PHPAPI void php_implode(const zend_string *delim, HashTable *arr, zval *return_value);
                                                   ~~~~~~~~~~~^~~
In file included from /usr/local/php8/include/php/Zend/zend.h:33,
                 from /usr/local/php8/include/php/main/php.h:31,
                 from /opt/m/phpx/include/phpx.h:21,
                 from /opt/m/phpx/src/base.cc:17:
/opt/m/phpx/include/phpx.h: In member function 'bool php::Array::sort()':
/opt/m/phpx/include/phpx.h:1059:50: error: invalid conversion from 'int (*)(const void*, const void*)' to 'bucket_compare_func_t' {aka 'int (*)(_Bucket*, _Bucket*)'} [-fpermissive]
         return zend_hash_sort(Z_ARRVAL_P(ptr()), array_data_compare, 1) == SUCCESS;
                                                  ^~~~~~~~~~~~~~~~~~
/usr/local/php8/include/php/Zend/zend_hash.h:272:35: note: in definition of macro 'zend_hash_sort'
  zend_hash_sort_ex(ht, zend_sort, compare_func, renumber)
                                   ^~~~~~~~~~~~
/usr/local/php8/include/php/Zend/zend_hash.h:268:108: note:   initializing argument 3 of 'void zend_hash_sort_ex(HashTable*, sort_func_t, bucket_compare_func_t, zend_bool)'
 ZEND_API void  ZEND_FASTCALL zend_hash_sort_ex(HashTable *ht, sort_func_t sort_func, bucket_compare_func_t compare_func, zend_bool renumber);
                                                                                      ~~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~
In file included from /opt/m/phpx/src/base.cc:17:
/opt/m/phpx/include/phpx.h:1059:73: error: no match for 'operator==' (operand types are 'void' and 'ZEND_RESULT_CODE')
         return zend_hash_sort(Z_ARRVAL_P(ptr()), array_data_compare, 1) == SUCCESS;
In file included from /opt/m/phpx/src/class.cc:17:
/opt/m/phpx/include/phpx.h: In member function 'php::String php::Array::join(php::String&)':
/opt/m/phpx/include/phpx.h:1049:37: error: cannot convert 'zval*' {aka '_zval_struct*'} to 'HashTable*' {aka '_zend_array*'}
         php_implode(delim.ptr(), ptr(), retval.ptr());
                                  ~~~^~
In file included from /usr/local/php8/include/php/ext/standard/php_standard.h:19,
                 from /opt/m/phpx/include/phpx.h:46,
                 from /opt/m/phpx/src/class.cc:17:
/usr/local/php8/include/php/ext/standard/php_string.h:56:62: note:   initializing argument 2 of 'void php_implode(const zend_string*, HashTable*, zval*)'
 PHPAPI void php_implode(const zend_string *delim, HashTable *arr, zval *return_value);
                                                   ~~~~~~~~~~~^~~
In file included from /usr/local/php8/include/php/Zend/zend.h:33,
                 from /usr/local/php8/include/php/main/php.h:31,
                 from /opt/m/phpx/include/phpx.h:21,
                 from /opt/m/phpx/src/class.cc:17:
/opt/m/phpx/include/phpx.h: In member function 'bool php::Array::sort()':
/opt/m/phpx/include/phpx.h:1059:50: error: invalid conversion from 'int (*)(const void*, const void*)' to 'bucket_compare_func_t' {aka 'int (*)(_Bucket*, _Bucket*)'} [-fpermissive]
         return zend_hash_sort(Z_ARRVAL_P(ptr()), array_data_compare, 1) == SUCCESS;
                                                  ^~~~~~~~~~~~~~~~~~
/usr/local/php8/include/php/Zend/zend_hash.h:272:35: note: in definition of macro 'zend_hash_sort'
  zend_hash_sort_ex(ht, zend_sort, compare_func, renumber)
                                   ^~~~~~~~~~~~
/opt/m/phpx/include/phpx.h: In destructor 'php::ArgInfo::~ArgInfo()':
/opt/m/phpx/include/phpx.h:1174:17: error: 'ZEND_TYPE_IS_CLASS' was not declared in this scope
             if (ZEND_TYPE_IS_CLASS(info[i].type))
                 ^~~~~~~~~~~~~~~~~~
/usr/local/php8/include/php/Zend/zend_hash.h:268:108: note:   initializing argument 3 of 'void zend_hash_sort_ex(HashTable*, sort_func_t, bucket_compare_func_t, zend_bool)'
 ZEND_API void  ZEND_FASTCALL zend_hash_sort_ex(HashTable *ht, sort_func_t sort_func, bucket_compare_func_t compare_func, zend_bool renumber);
                                                                                      ~~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~
In file included from /opt/m/phpx/src/class.cc:17:
/opt/m/phpx/include/phpx.h:1059:73: error: no match for 'operator==' (operand types are 'void' and 'ZEND_RESULT_CODE')
         return zend_hash_sort(Z_ARRVAL_P(ptr()), array_data_compare, 1) == SUCCESS;
/opt/m/phpx/include/phpx.h: In destructor 'php::ArgInfo::~ArgInfo()':
/opt/m/phpx/include/phpx.h:1174:17: error: 'ZEND_TYPE_IS_CLASS' was not declared in this scope
             if (ZEND_TYPE_IS_CLASS(info[i].type))
                 ^~~~~~~~~~~~~~~~~~
/opt/m/phpx/include/phpx.h:1174:17: note: suggested alternative: 'ZEND_TYPE_HAS_CLASS'
             if (ZEND_TYPE_IS_CLASS(info[i].type))
                 ^~~~~~~~~~~~~~~~~~
                 ZEND_TYPE_HAS_CLASS
In file included from /usr/local/php8/include/php/Zend/zend.h:30,
                 from /usr/local/php8/include/php/main/php.h:31,
                 from /opt/m/phpx/include/phpx.h:21,
                 from /opt/m/phpx/src/base.cc:17:
/opt/m/phpx/include/phpx.h:1176:39: error: invalid cast from type 'zend_type' to type 'void*'
                 efree((void* )info[i].type);
                                       ^~~~
/usr/local/php8/include/php/Zend/zend_alloc.h:161:34: note: in definition of macro 'efree'
 #define efree(ptr)       _efree((ptr) ZEND_FILE_LINE_CC ZEND_FILE_LINE_EMPTY_CC)
                                  ^~~
In file included from /opt/m/phpx/src/base.cc:17:
/opt/m/phpx/include/phpx.h: In member function 'void php::ArgInfo::add(const char*, const char*, int, bool, bool, bool)':
/opt/m/phpx/include/phpx.h:1195:36: error: no matching function for call to 'zend_type::zend_type(char*&)'
                 type = (zend_type) _s;
                                    ^~
In file included from /usr/local/php8/include/php/Zend/zend.h:27,
                 from /usr/local/php8/include/php/main/php.h:31,
                 from /opt/m/phpx/include/phpx.h:21,
                 from /opt/m/phpx/src/base.cc:17:
/usr/local/php8/include/php/Zend/zend_types.h:134:3: note: candidate: 'zend_type::zend_type()'
 } zend_type;
   ^~~~~~~~~
/usr/local/php8/include/php/Zend/zend_types.h:134:3: note:   candidate expects 0 arguments, 1 provided
/usr/local/php8/include/php/Zend/zend_types.h:134:3: note: candidate: 'constexpr zend_type::zend_type(const zend_type&)'
/usr/local/php8/include/php/Zend/zend_types.h:134:3: note:   no known conversion for argument 1 from 'char*' to 'const zend_type&'
/usr/local/php8/include/php/Zend/zend_types.h:134:3: note: candidate: 'constexpr zend_type::zend_type(zend_type&&)'
/usr/local/php8/include/php/Zend/zend_types.h:134:3: note:   no known conversion for argument 1 from 'char*' to 'zend_type&&'
In file included from /usr/local/php8/include/php/Zend/zend.h:30,
                 from /usr/local/php8/include/php/main/php.h:31,
                 from /opt/m/phpx/include/phpx.h:21,
                 from /opt/m/phpx/src/base.cc:17:
/usr/local/php8/include/php/Zend/zend_alloc.h:170:80: error: no matching function for call to 'zend_type::zend_type(char*)'
 #define estrdup(s)       _estrdup((s) ZEND_FILE_LINE_CC ZEND_FILE_LINE_EMPTY_CC)
                                                                                ^
/opt/m/phpx/include/phpx.h:1199:36: note: in expansion of macro 'estrdup'
                 type = (zend_type) estrdup(class_name);
                                    ^~~~~~~
In file included from /usr/local/php8/include/php/Zend/zend.h:27,
                 from /usr/local/php8/include/php/main/php.h:31,
                 from /opt/m/phpx/include/phpx.h:21,
                 from /opt/m/phpx/src/base.cc:17:
/usr/local/php8/include/php/Zend/zend_types.h:134:3: note: candidate: 'zend_type::zend_type()'
 } zend_type;
   ^~~~~~~~~
/usr/local/php8/include/php/Zend/zend_types.h:134:3: note:   candidate expects 0 arguments, 1 provided
/usr/local/php8/include/php/Zend/zend_types.h:134:3: note: candidate: 'constexpr zend_type::zend_type(const zend_type&)'
/usr/local/php8/include/php/Zend/zend_types.h:134:3: note:   no known conversion for argument 1 from 'char*' to 'const zend_type&'
/usr/local/php8/include/php/Zend/zend_types.h:134:3: note: candidate: 'constexpr zend_type::zend_type(zend_type&&)'
/usr/local/php8/include/php/Zend/zend_types.h:134:3: note:   no known conversion for argument 1 from 'char*' to 'zend_type&&'
In file included from /opt/m/phpx/src/base.cc:17:
/opt/m/phpx/include/phpx.h:1204:20: error: 'ZEND_TYPE_ENCODE' was not declared in this scope
             type = ZEND_TYPE_ENCODE(type_hint, allow_null);
                    ^~~~~~~~~~~~~~~~
/opt/m/phpx/include/phpx.h:1174:17: note: suggested alternative: 'ZEND_TYPE_HAS_CLASS'
             if (ZEND_TYPE_IS_CLASS(info[i].type))
                 ^~~~~~~~~~~~~~~~~~
                 ZEND_TYPE_HAS_CLASS
In file included from /usr/local/php8/include/php/Zend/zend.h:30,
                 from /usr/local/php8/include/php/main/php.h:31,
                 from /opt/m/phpx/include/phpx.h:21,
                 from /opt/m/phpx/src/class.cc:17:
/opt/m/phpx/include/phpx.h:1176:39: error: invalid cast from type 'zend_type' to type 'void*'
                 efree((void* )info[i].type);
                                       ^~~~
/usr/local/php8/include/php/Zend/zend_alloc.h:161:34: note: in definition of macro 'efree'
 #define efree(ptr)       _efree((ptr) ZEND_FILE_LINE_CC ZEND_FILE_LINE_EMPTY_CC)
                                  ^~~
In file included from /opt/m/phpx/src/class.cc:17:
/opt/m/phpx/include/phpx.h: In member function 'void php::ArgInfo::add(const char*, const char*, int, bool, bool, bool)':
/opt/m/phpx/include/phpx.h:1195:36: error: no matching function for call to 'zend_type::zend_type(char*&)'
                 type = (zend_type) _s;
                                    ^~
In file included from /usr/local/php8/include/php/Zend/zend.h:27,
                 from /usr/local/php8/include/php/main/php.h:31,
                 from /opt/m/phpx/include/phpx.h:21,
                 from /opt/m/phpx/src/class.cc:17:
/usr/local/php8/include/php/Zend/zend_types.h:134:3: note: candidate: 'zend_type::zend_type()'
 } zend_type;
   ^~~~~~~~~
/usr/local/php8/include/php/Zend/zend_types.h:134:3: note:   candidate expects 0 arguments, 1 provided
/usr/local/php8/include/php/Zend/zend_types.h:134:3: note: candidate: 'constexpr zend_type::zend_type(const zend_type&)'
/usr/local/php8/include/php/Zend/zend_types.h:134:3: note:   no known conversion for argument 1 from 'char*' to 'const zend_type&'
/usr/local/php8/include/php/Zend/zend_types.h:134:3: note: candidate: 'constexpr zend_type::zend_type(zend_type&&)'
/usr/local/php8/include/php/Zend/zend_types.h:134:3: note:   no known conversion for argument 1 from 'char*' to 'zend_type&&'
In file included from /usr/local/php8/include/php/Zend/zend.h:30,
                 from /usr/local/php8/include/php/main/php.h:31,
                 from /opt/m/phpx/include/phpx.h:21,
                 from /opt/m/phpx/src/class.cc:17:
/usr/local/php8/include/php/Zend/zend_alloc.h:170:80: error: no matching function for call to 'zend_type::zend_type(char*)'
 #define estrdup(s)       _estrdup((s) ZEND_FILE_LINE_CC ZEND_FILE_LINE_EMPTY_CC)
                                                                                ^
/opt/m/phpx/include/phpx.h:1199:36: note: in expansion of macro 'estrdup'
                 type = (zend_type) estrdup(class_name);
                                    ^~~~~~~
In file included from /usr/local/php8/include/php/Zend/zend.h:27,
                 from /usr/local/php8/include/php/main/php.h:31,
                 from /opt/m/phpx/include/phpx.h:21,
                 from /opt/m/phpx/src/class.cc:17:
/usr/local/php8/include/php/Zend/zend_types.h:134:3: note: candidate: 'zend_type::zend_type()'
 } zend_type;
   ^~~~~~~~~
/usr/local/php8/include/php/Zend/zend_types.h:134:3: note:   candidate expects 0 arguments, 1 provided
/usr/local/php8/include/php/Zend/zend_types.h:134:3: note: candidate: 'constexpr zend_type::zend_type(const zend_type&)'
/usr/local/php8/include/php/Zend/zend_types.h:134:3: note:   no known conversion for argument 1 from 'char*' to 'const zend_type&'
/usr/local/php8/include/php/Zend/zend_types.h:134:3: note: candidate: 'constexpr zend_type::zend_type(zend_type&&)'
/usr/local/php8/include/php/Zend/zend_types.h:134:3: note:   no known conversion for argument 1 from 'char*' to 'zend_type&&'
In file included from /opt/m/phpx/src/class.cc:17:
/opt/m/phpx/include/phpx.h:1204:20: error: 'ZEND_TYPE_ENCODE' was not declared in this scope
             type = ZEND_TYPE_ENCODE(type_hint, allow_null);
                    ^~~~~~~~~~~~~~~~
/opt/m/phpx/include/phpx.h:1204:20: note: suggested alternative: 'ZEND_TYPE_CE'
             type = ZEND_TYPE_ENCODE(type_hint, allow_null);
                    ^~~~~~~~~~~~~~~~
                    ZEND_TYPE_CE
/opt/m/phpx/include/phpx.h:1207:52: error: too many initializers for 'zend_internal_arg_info' {aka '_zend_internal_arg_info'}
         { name, type, pass_by_reference, variadic, };
                                                    ^
/opt/m/phpx/include/phpx.h: In member function 'zend_internal_arg_info* php::ArgInfo::get()':
/opt/m/phpx/include/phpx.h:1227:18: error: 'zend_internal_arg_info' {aka 'struct _zend_internal_arg_info'} has no member named 'pass_by_reference'
         _info[0].pass_by_reference = return_reference;
                  ^~~~~~~~~~~~~~~~~
In file included from /opt/m/phpx/src/base.cc:17:
/opt/m/phpx/include/phpx.h: In function 'void php::throwException(const char*, const char*, int)':
/opt/m/phpx/include/phpx.h:1302:43: error: expected ')' before 'TSRMLS_CC'
     zend_throw_exception(ce, message, code TSRMLS_CC);
                         ~                 ^~~~~~~~~~
                                           )
In file included from /opt/m/phpx/include/phpx.h:34,
                 from /opt/m/phpx/src/base.cc:17:
/opt/m/phpx/include/phpx.h: In member function 'php::Variant php::Object::callParentMethod(const char*)':
/opt/m/phpx/include/phpx.h:1359:43: error: cannot convert 'zval*' {aka '_zval_struct*'} to 'zend_object*' {aka '_zend_object*'}
         zend_call_method_with_0_params(ptr(), Z_OBJCE_P(ptr())->parent, NULL, func, retval.ptr());
                                        ~~~^~
/usr/local/php8/include/php/Zend/zend_interfaces.h:44:19: note: in definition of macro 'zend_call_method_with_0_params'
  zend_call_method(obj, obj_ce, fn_proxy, function_name, sizeof(function_name)-1, retval, 0, NULL, NULL)
                   ^~~
In file included from /opt/m/phpx/include/phpx.h:34,
                 from /opt/m/phpx/src/base.cc:17:
/usr/local/php8/include/php/Zend/zend_interfaces.h:41:46: note:   initializing argument 1 of 'zval* zend_call_method(zend_object*, zend_class_entry*, zend_function**, const char*, size_t, zval*, uint32_t, zval*, zval*)'
 ZEND_API zval* zend_call_method(zend_object *object, zend_class_entry *obj_ce, zend_function **fn_proxy, const char *function_name, size_t function_name_len, zval *retval, uint32_t param_count, zval* arg1, zval* arg2);
                                 ~~~~~~~~~~~~~^~~~~~
In file included from /opt/m/phpx/include/phpx.h:34,
                 from /opt/m/phpx/src/base.cc:17:
/opt/m/phpx/include/phpx.h: In member function 'php::Variant php::Object::callParentMethod(const char*, const php::Variant&)':
/opt/m/phpx/include/phpx.h:1365:43: error: cannot convert 'zval*' {aka '_zval_struct*'} to 'zend_object*' {aka '_zend_object*'}
         zend_call_method_with_1_params(ptr(), Z_OBJCE_P(ptr())->parent, NULL, func, retval.ptr(),
                                        ~~~^~
/usr/local/php8/include/php/Zend/zend_interfaces.h:47:19: note: in definition of macro 'zend_call_method_with_1_params'
  zend_call_method(obj, obj_ce, fn_proxy, function_name, sizeof(function_name)-1, retval, 1, arg1, NULL)
                   ^~~
In file included from /opt/m/phpx/include/phpx.h:34,
                 from /opt/m/phpx/src/base.cc:17:
/usr/local/php8/include/php/Zend/zend_interfaces.h:41:46: note:   initializing argument 1 of 'zval* zend_call_method(zend_object*, zend_class_entry*, zend_function**, const char*, size_t, zval*, uint32_t, zval*, zval*)'
 ZEND_API zval* zend_call_method(zend_object *object, zend_class_entry *obj_ce, zend_function **fn_proxy, const char *function_name, size_t function_name_len, zval *retval, uint32_t param_count, zval* arg1, zval* arg2);
                                 ~~~~~~~~~~~~~^~~~~~
In file included from /opt/m/phpx/include/phpx.h:34,
                 from /opt/m/phpx/src/base.cc:17:
/opt/m/phpx/include/phpx.h: In member function 'php::Variant php::Object::callParentMethod(const char*, const php::Variant&, const php::Variant&)':
/opt/m/phpx/include/phpx.h:1373:43: error: cannot convert 'zval*' {aka '_zval_struct*'} to 'zend_object*' {aka '_zend_object*'}
         zend_call_method_with_2_params(ptr(), Z_OBJCE_P(ptr())->parent, NULL, func, retval.ptr(),
                                        ~~~^~
/usr/local/php8/include/php/Zend/zend_interfaces.h:50:19: note: in definition of macro 'zend_call_method_with_2_params'
  zend_call_method(obj, obj_ce, fn_proxy, function_name, sizeof(function_name)-1, retval, 2, arg1, arg2)
                   ^~~
In file included from /opt/m/phpx/include/phpx.h:34,
                 from /opt/m/phpx/src/base.cc:17:
/usr/local/php8/include/php/Zend/zend_interfaces.h:41:46: note:   initializing argument 1 of 'zval* zend_call_method(zend_object*, zend_class_entry*, zend_function**, const char*, size_t, zval*, uint32_t, zval*, zval*)'
 ZEND_API zval* zend_call_method(zend_object *object, zend_class_entry *obj_ce, zend_function **fn_proxy, const char *function_name, size_t function_name_len, zval *retval, uint32_t param_count, zval* arg1, zval* arg2);
                                 ~~~~~~~~~~~~~^~~~~~
In file included from /opt/m/phpx/src/base.cc:17:
/opt/m/phpx/include/phpx.h: In member function 'php::Variant php::Object::get(const char*)':
/opt/m/phpx/include/phpx.h:1400:66: error: cannot convert 'zval*' {aka '_zval_struct*'} to 'zend_object*' {aka '_zend_object*'}
         zval *member_p = zend_read_property(Z_OBJCE_P(ptr()), ptr(), name, strlen(name), 0, &rv);
                                                               ~~~^~
In file included from /usr/local/php8/include/php/main/php.h:35,
                 from /opt/m/phpx/include/phpx.h:21,
                 from /opt/m/phpx/src/base.cc:17:
/usr/local/php8/include/php/Zend/zend_API.h:407:73: note:   initializing argument 2 of 'zval* zend_read_property(zend_class_entry*, zend_object*, const char*, size_t, zend_bool, zval*)'
 ZEND_API zval *zend_read_property(zend_class_entry *scope, zend_object *object, const char *name, size_t name_length, zend_bool silent, zval *rv);
                                                            ~~~~~~~~~~~~~^~~~~~
In file included from /opt/m/phpx/src/base.cc:17:
/opt/m/phpx/include/phpx.h: In member function 'void php::Object::set(const char*, const php::Variant&)':
/opt/m/phpx/include/phpx.h:1413:51: error: cannot convert 'zval*' {aka '_zval_struct*'} to 'zend_object*' {aka '_zend_object*'}
         zend_update_property(Z_OBJCE_P(ptr()), ptr(), name, strlen(name), const_cast<Variant &>(v).ptr());
                                                ~~~^~
In file included from /usr/local/php8/include/php/main/php.h:35,
                 from /opt/m/phpx/include/phpx.h:21,
                 from /opt/m/phpx/src/base.cc:17:
/usr/local/php8/include/php/Zend/zend_API.h:387:74: note:   initializing argument 2 of 'void zend_update_property(zend_class_entry*, zend_object*, const char*, size_t, zval*)'
 ZEND_API void zend_update_property(zend_class_entry *scope, zend_object *object, const char *name, size_t name_length, zval *value);
                                                             ~~~~~~~~~~~~~^~~~~~
In file included from /opt/m/phpx/src/base.cc:17:
/opt/m/phpx/include/phpx.h: In member function 'void php::Object::set(const char*, php::Array&)':
/opt/m/phpx/include/phpx.h:1417:51: error: cannot convert 'zval*' {aka '_zval_struct*'} to 'zend_object*' {aka '_zend_object*'}
         zend_update_property(Z_OBJCE_P(ptr()), ptr(), name, strlen(name), v.ptr());
                                                ~~~^~
In file included from /usr/local/php8/include/php/main/php.h:35,
                 from /opt/m/phpx/include/phpx.h:21,
                 from /opt/m/phpx/src/base.cc:17:
/usr/local/php8/include/php/Zend/zend_API.h:387:74: note:   initializing argument 2 of 'void zend_update_property(zend_class_entry*, zend_object*, const char*, size_t, zval*)'
 ZEND_API void zend_update_property(zend_class_entry *scope, zend_object *object, const char *name, size_t name_length, zval *value);
                                                             ~~~~~~~~~~~~~^~~~~~
In file included from /opt/m/phpx/src/base.cc:17:
/opt/m/phpx/include/phpx.h: In member function 'void php::Object::set(const char*, std::__cxx11::string&)':
/opt/m/phpx/include/phpx.h:1421:59: error: cannot convert 'zval*' {aka '_zval_struct*'} to 'zend_object*' {aka '_zend_object*'}
         zend_update_property_stringl(Z_OBJCE_P(ptr()), ptr(), name, strlen(name), v.c_str(), v.length());
                                                        ~~~^~
In file included from /usr/local/php8/include/php/main/php.h:35,
                 from /opt/m/phpx/include/phpx.h:21,
                 from /opt/m/phpx/src/base.cc:17:
/usr/local/php8/include/php/Zend/zend_API.h:394:82: note:   initializing argument 2 of 'void zend_update_property_stringl(zend_class_entry*, zend_object*, const char*, size_t, const char*, size_t)'
 ZEND_API void zend_update_property_stringl(zend_class_entry *scope, zend_object *object, const char *name, size_t name_length, const char *value, size_t value_length);
                                                                     ~~~~~~~~~~~~~^~~~~~
In file included from /opt/m/phpx/src/base.cc:17:
/opt/m/phpx/include/phpx.h: In member function 'void php::Object::set(const char*, std::__cxx11::string)':
/opt/m/phpx/include/phpx.h:1425:59: error: cannot convert 'zval*' {aka '_zval_struct*'} to 'zend_object*' {aka '_zend_object*'}
         zend_update_property_stringl(Z_OBJCE_P(ptr()), ptr(), name, strlen(name), v.c_str(), v.length());
                                                        ~~~^~
In file included from /usr/local/php8/include/php/main/php.h:35,
                 from /opt/m/phpx/include/phpx.h:21,
                 from /opt/m/phpx/src/base.cc:17:
/usr/local/php8/include/php/Zend/zend_API.h:394:82: note:   initializing argument 2 of 'void zend_update_property_stringl(zend_class_entry*, zend_object*, const char*, size_t, const char*, size_t)'
 ZEND_API void zend_update_property_stringl(zend_class_entry *scope, zend_object *object, const char *name, size_t name_length, const char *value, size_t value_length);
                                                                     ~~~~~~~~~~~~~^~~~~~
In file included from /opt/m/phpx/src/base.cc:17:
/opt/m/phpx/include/phpx.h: In member function 'void php::Object::set(const char*, const char*)':
/opt/m/phpx/include/phpx.h:1429:58: error: cannot convert 'zval*' {aka '_zval_struct*'} to 'zend_object*' {aka '_zend_object*'}
         zend_update_property_string(Z_OBJCE_P(ptr()), ptr(), name, strlen(name), v);
                                                       ~~~^~
In file included from /usr/local/php8/include/php/main/php.h:35,
                 from /opt/m/phpx/include/phpx.h:21,
                 from /opt/m/phpx/src/base.cc:17:
/usr/local/php8/include/php/Zend/zend_API.h:393:81: note:   initializing argument 2 of 'void zend_update_property_string(zend_class_entry*, zend_object*, const char*, size_t, const char*)'
 ZEND_API void zend_update_property_string(zend_class_entry *scope, zend_object *object, const char *name, size_t name_length, const char *value);
                                                                    ~~~~~~~~~~~~~^~~~~~
In file included from /opt/m/phpx/src/base.cc:17:
/opt/m/phpx/include/phpx.h: In member function 'void php::Object::set(const char*, int)':
/opt/m/phpx/include/phpx.h:1433:56: error: cannot convert 'zval*' {aka '_zval_struct*'} to 'zend_object*' {aka '_zend_object*'}
         zend_update_property_long(Z_OBJCE_P(ptr()), ptr(), name, strlen(name), v);
                                                     ~~~^~
In file included from /usr/local/php8/include/php/main/php.h:35,
                 from /opt/m/phpx/include/phpx.h:21,
                 from /opt/m/phpx/src/base.cc:17:
/usr/local/php8/include/php/Zend/zend_API.h:390:79: note:   initializing argument 2 of 'void zend_update_property_long(zend_class_entry*, zend_object*, const char*, size_t, zend_long)'
 ZEND_API void zend_update_property_long(zend_class_entry *scope, zend_object *object, const char *name, size_t name_length, zend_long value);
                                                                  ~~~~~~~~~~~~~^~~~~~
In file included from /opt/m/phpx/src/base.cc:17:
/opt/m/phpx/include/phpx.h: In member function 'void php::Object::set(const char*, long int)':
/opt/m/phpx/include/phpx.h:1437:56: error: cannot convert 'zval*' {aka '_zval_struct*'} to 'zend_object*' {aka '_zend_object*'}
         zend_update_property_long(Z_OBJCE_P(ptr()), ptr(), name, strlen(name), v);
                                                     ~~~^~
In file included from /usr/local/php8/include/php/main/php.h:35,
                 from /opt/m/phpx/include/phpx.h:21,
                 from /opt/m/phpx/src/base.cc:17:
/usr/local/php8/include/php/Zend/zend_API.h:390:79: note:   initializing argument 2 of 'void zend_update_property_long(zend_class_entry*, zend_object*, const char*, size_t, zend_long)'
 ZEND_API void zend_update_property_long(zend_class_entry *scope, zend_object *object, const char *name, size_t name_length, zend_long value);
                                                                  ~~~~~~~~~~~~~^~~~~~
In file included from /opt/m/phpx/src/base.cc:17:
/opt/m/phpx/include/phpx.h: In member function 'void php::Object::set(const char*, double)':
/opt/m/phpx/include/phpx.h:1441:58: error: cannot convert 'zval*' {aka '_zval_struct*'} to 'zend_object*' {aka '_zend_object*'}
         zend_update_property_double(Z_OBJCE_P(ptr()), ptr(), name, strlen(name), v);
                                                       ~~~^~
In file included from /usr/local/php8/include/php/main/php.h:35,
                 from /opt/m/phpx/include/phpx.h:21,
                 from /opt/m/phpx/src/base.cc:17:
/usr/local/php8/include/php/Zend/zend_API.h:391:81: note:   initializing argument 2 of 'void zend_update_property_double(zend_class_entry*, zend_object*, const char*, size_t, double)'
 ZEND_API void zend_update_property_double(zend_class_entry *scope, zend_object *object, const char *name, size_t name_length, double value);
                                                                    ~~~~~~~~~~~~~^~~~~~
In file included from /opt/m/phpx/src/base.cc:17:
/opt/m/phpx/include/phpx.h: In member function 'void php::Object::set(const char*, float)':
/opt/m/phpx/include/phpx.h:1445:58: error: cannot convert 'zval*' {aka '_zval_struct*'} to 'zend_object*' {aka '_zend_object*'}
         zend_update_property_double(Z_OBJCE_P(ptr()), ptr(), name, strlen(name), (double) v);
                                                       ~~~^~
In file included from /usr/local/php8/include/php/main/php.h:35,
                 from /opt/m/phpx/include/phpx.h:21,
                 from /opt/m/phpx/src/base.cc:17:
/usr/local/php8/include/php/Zend/zend_API.h:391:81: note:   initializing argument 2 of 'void zend_update_property_double(zend_class_entry*, zend_object*, const char*, size_t, double)'
 ZEND_API void zend_update_property_double(zend_class_entry *scope, zend_object *object, const char *name, size_t name_length, double value);
                                                                    ~~~~~~~~~~~~~^~~~~~
In file included from /opt/m/phpx/src/base.cc:17:
/opt/m/phpx/include/phpx.h: In member function 'void php::Object::set(const char*, bool)':
/opt/m/phpx/include/phpx.h:1449:56: error: cannot convert 'zval*' {aka '_zval_struct*'} to 'zend_object*' {aka '_zend_object*'}
         zend_update_property_bool(Z_OBJCE_P(ptr()), ptr(), name, strlen(name), v ? 1 : 0);
                                                     ~~~^~
In file included from /usr/local/php8/include/php/main/php.h:35,
                 from /opt/m/phpx/include/phpx.h:21,
                 from /opt/m/phpx/src/base.cc:17:
/usr/local/php8/include/php/Zend/zend_API.h:389:79: note:   initializing argument 2 of 'void zend_update_property_bool(zend_class_entry*, zend_object*, const char*, size_t, zend_long)'
 ZEND_API void zend_update_property_bool(zend_class_entry *scope, zend_object *object, const char *name, size_t name_length, zend_long value);
                                                                  ~~~~~~~~~~~~~^~~~~~
/opt/m/phpx/include/phpx.h:1204:20: note: suggested alternative: 'ZEND_TYPE_CE'
             type = ZEND_TYPE_ENCODE(type_hint, allow_null);
                    ^~~~~~~~~~~~~~~~
                    ZEND_TYPE_CE
/opt/m/phpx/include/phpx.h:1207:52: error: too many initializers for 'zend_internal_arg_info' {aka '_zend_internal_arg_info'}
         { name, type, pass_by_reference, variadic, };
                                                    ^
/opt/m/phpx/include/phpx.h: In member function 'zend_internal_arg_info* php::ArgInfo::get()':
/opt/m/phpx/include/phpx.h:1227:18: error: 'zend_internal_arg_info' {aka 'struct _zend_internal_arg_info'} has no member named 'pass_by_reference'
         _info[0].pass_by_reference = return_reference;
                  ^~~~~~~~~~~~~~~~~
In file included from /opt/m/phpx/src/base.cc:17:
/opt/m/phpx/include/phpx.h: At global scope:
/opt/m/phpx/include/phpx.h:1584:16: error: 'ZEND_ACC_DTOR' was not declared in this scope
     DESTRUCT = ZEND_ACC_DTOR,
                ^~~~~~~~~~~~~
In file included from /opt/m/phpx/src/class.cc:17:
/opt/m/phpx/include/phpx.h: In function 'void php::throwException(const char*, const char*, int)':
/opt/m/phpx/include/phpx.h:1302:43: error: expected ')' before 'TSRMLS_CC'
     zend_throw_exception(ce, message, code TSRMLS_CC);
                         ~                 ^~~~~~~~~~
                                           )
In file included from /opt/m/phpx/include/phpx.h:34,
                 from /opt/m/phpx/src/class.cc:17:
/opt/m/phpx/include/phpx.h: In member function 'php::Variant php::Object::callParentMethod(const char*)':
/opt/m/phpx/include/phpx.h:1359:43: error: cannot convert 'zval*' {aka '_zval_struct*'} to 'zend_object*' {aka '_zend_object*'}
         zend_call_method_with_0_params(ptr(), Z_OBJCE_P(ptr())->parent, NULL, func, retval.ptr());
                                        ~~~^~
/usr/local/php8/include/php/Zend/zend_interfaces.h:44:19: note: in definition of macro 'zend_call_method_with_0_params'
  zend_call_method(obj, obj_ce, fn_proxy, function_name, sizeof(function_name)-1, retval, 0, NULL, NULL)
                   ^~~
In file included from /opt/m/phpx/include/phpx.h:34,
                 from /opt/m/phpx/src/class.cc:17:
/usr/local/php8/include/php/Zend/zend_interfaces.h:41:46: note:   initializing argument 1 of 'zval* zend_call_method(zend_object*, zend_class_entry*, zend_function**, const char*, size_t, zval*, uint32_t, zval*, zval*)'
 ZEND_API zval* zend_call_method(zend_object *object, zend_class_entry *obj_ce, zend_function **fn_proxy, const char *function_name, size_t function_name_len, zval *retval, uint32_t param_count, zval* arg1, zval* arg2);
                                 ~~~~~~~~~~~~~^~~~~~
In file included from /opt/m/phpx/include/phpx.h:34,
                 from /opt/m/phpx/src/class.cc:17:
/opt/m/phpx/include/phpx.h: In member function 'php::Variant php::Object::callParentMethod(const char*, const php::Variant&)':
/opt/m/phpx/include/phpx.h:1365:43: error: cannot convert 'zval*' {aka '_zval_struct*'} to 'zend_object*' {aka '_zend_object*'}
         zend_call_method_with_1_params(ptr(), Z_OBJCE_P(ptr())->parent, NULL, func, retval.ptr(),
                                        ~~~^~
/usr/local/php8/include/php/Zend/zend_interfaces.h:47:19: note: in definition of macro 'zend_call_method_with_1_params'
  zend_call_method(obj, obj_ce, fn_proxy, function_name, sizeof(function_name)-1, retval, 1, arg1, NULL)
                   ^~~
In file included from /opt/m/phpx/include/phpx.h:34,
                 from /opt/m/phpx/src/class.cc:17:
/usr/local/php8/include/php/Zend/zend_interfaces.h:41:46: note:   initializing argument 1 of 'zval* zend_call_method(zend_object*, zend_class_entry*, zend_function**, const char*, size_t, zval*, uint32_t, zval*, zval*)'
 ZEND_API zval* zend_call_method(zend_object *object, zend_class_entry *obj_ce, zend_function **fn_proxy, const char *function_name, size_t function_name_len, zval *retval, uint32_t param_count, zval* arg1, zval* arg2);
                                 ~~~~~~~~~~~~~^~~~~~
In file included from /opt/m/phpx/include/phpx.h:34,
                 from /opt/m/phpx/src/class.cc:17:
/opt/m/phpx/include/phpx.h: In member function 'php::Variant php::Object::callParentMethod(const char*, const php::Variant&, const php::Variant&)':
/opt/m/phpx/include/phpx.h:1373:43: error: cannot convert 'zval*' {aka '_zval_struct*'} to 'zend_object*' {aka '_zend_object*'}
         zend_call_method_with_2_params(ptr(), Z_OBJCE_P(ptr())->parent, NULL, func, retval.ptr(),
                                        ~~~^~
/usr/local/php8/include/php/Zend/zend_interfaces.h:50:19: note: in definition of macro 'zend_call_method_with_2_params'
  zend_call_method(obj, obj_ce, fn_proxy, function_name, sizeof(function_name)-1, retval, 2, arg1, arg2)
                   ^~~
In file included from /opt/m/phpx/include/phpx.h:34,
                 from /opt/m/phpx/src/class.cc:17:
/usr/local/php8/include/php/Zend/zend_interfaces.h:41:46: note:   initializing argument 1 of 'zval* zend_call_method(zend_object*, zend_class_entry*, zend_function**, const char*, size_t, zval*, uint32_t, zval*, zval*)'
 ZEND_API zval* zend_call_method(zend_object *object, zend_class_entry *obj_ce, zend_function **fn_proxy, const char *function_name, size_t function_name_len, zval *retval, uint32_t param_count, zval* arg1, zval* arg2);
                                 ~~~~~~~~~~~~~^~~~~~
In file included from /opt/m/phpx/src/class.cc:17:
/opt/m/phpx/include/phpx.h: In member function 'php::Variant php::Object::get(const char*)':
/opt/m/phpx/include/phpx.h:1400:66: error: cannot convert 'zval*' {aka '_zval_struct*'} to 'zend_object*' {aka '_zend_object*'}
         zval *member_p = zend_read_property(Z_OBJCE_P(ptr()), ptr(), name, strlen(name), 0, &rv);
                                                               ~~~^~
In file included from /opt/m/phpx/src/array.cc:17:
/opt/m/phpx/include/phpx.h: In member function 'php::String php::Array::join(php::String&)':
/opt/m/phpx/include/phpx.h:1049:37: error: cannot convert 'zval*' {aka '_zval_struct*'} to 'HashTable*' {aka '_zend_array*'}
         php_implode(delim.ptr(), ptr(), retval.ptr());
                                  ~~~^~
/opt/m/phpx/include/phpx.h:1584:16: note: suggested alternative: 'ZEND_ACC_CTOR'
     DESTRUCT = ZEND_ACC_DTOR,
                ^~~~~~~~~~~~~
                ZEND_ACC_CTOR
In file included from /usr/local/php8/include/php/ext/standard/php_standard.h:19,
                 from /opt/m/phpx/include/phpx.h:46,
                 from /opt/m/phpx/src/array.cc:17:
/usr/local/php8/include/php/ext/standard/php_string.h:56:62: note:   initializing argument 2 of 'void php_implode(const zend_string*, HashTable*, zval*)'
 PHPAPI void php_implode(const zend_string *delim, HashTable *arr, zval *return_value);
                                                   ~~~~~~~~~~~^~~
In file included from /usr/local/php8/include/php/main/php.h:35,
                 from /opt/m/phpx/include/phpx.h:21,
                 from /opt/m/phpx/src/class.cc:17:
/usr/local/php8/include/php/Zend/zend_API.h:407:73: note:   initializing argument 2 of 'zval* zend_read_property(zend_class_entry*, zend_object*, const char*, size_t, zend_bool, zval*)'
 ZEND_API zval *zend_read_property(zend_class_entry *scope, zend_object *object, const char *name, size_t name_length, zend_bool silent, zval *rv);
                                                            ~~~~~~~~~~~~~^~~~~~
In file included from /opt/m/phpx/src/array.cc:17:
/opt/m/phpx/include/phpx.h: In member function 'php::String php::Array::join(php::String&)':
/opt/m/phpx/include/phpx.h:1049:37: error: cannot convert 'zval*' {aka '_zval_struct*'} to 'HashTable*' {aka '_zend_array*'}
         php_implode(delim.ptr(), ptr(), retval.ptr());
                                  ~~~^~
In file included from /usr/local/php8/include/php/Zend/zend.h:33,
                 from /usr/local/php8/include/php/main/php.h:31,
                 from /opt/m/phpx/include/phpx.h:21,
                 from /opt/m/phpx/src/array.cc:17:
/opt/m/phpx/include/phpx.h: In member function 'bool php::Array::sort()':
/opt/m/phpx/include/phpx.h:1059:50: error: invalid conversion from 'int (*)(const void*, const void*)' to 'bucket_compare_func_t' {aka 'int (*)(_Bucket*, _Bucket*)'} [-fpermissive]
         return zend_hash_sort(Z_ARRVAL_P(ptr()), array_data_compare, 1) == SUCCESS;
                                                  ^~~~~~~~~~~~~~~~~~
/usr/local/php8/include/php/Zend/zend_hash.h:272:35: note: in definition of macro 'zend_hash_sort'
  zend_hash_sort_ex(ht, zend_sort, compare_func, renumber)
                                   ^~~~~~~~~~~~
/usr/local/php8/include/php/Zend/zend_hash.h:268:108: note:   initializing argument 3 of 'void zend_hash_sort_ex(HashTable*, sort_func_t, bucket_compare_func_t, zend_bool)'
 ZEND_API void  ZEND_FASTCALL zend_hash_sort_ex(HashTable *ht, sort_func_t sort_func, bucket_compare_func_t compare_func, zend_bool renumber);
                                                                                      ~~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~
In file included from /opt/m/phpx/src/array.cc:17:
/opt/m/phpx/include/phpx.h:1059:73: error: no match for 'operator==' (operand types are 'void' and 'ZEND_RESULT_CODE')
         return zend_hash_sort(Z_ARRVAL_P(ptr()), array_data_compare, 1) == SUCCESS;
In file included from /usr/local/php8/include/php/ext/standard/php_standard.h:19,
                 from /opt/m/phpx/include/phpx.h:46,
                 from /opt/m/phpx/src/array.cc:17:
/usr/local/php8/include/php/ext/standard/php_string.h:56:62: note:   initializing argument 2 of 'void php_implode(const zend_string*, HashTable*, zval*)'
 PHPAPI void php_implode(const zend_string *delim, HashTable *arr, zval *return_value);
                                                   ~~~~~~~~~~~^~~
In file included from /opt/m/phpx/src/class.cc:17:
/opt/m/phpx/include/phpx.h: In member function 'void php::Object::set(const char*, const php::Variant&)':
/opt/m/phpx/include/phpx.h:1413:51: error: cannot convert 'zval*' {aka '_zval_struct*'} to 'zend_object*' {aka '_zend_object*'}
         zend_update_property(Z_OBJCE_P(ptr()), ptr(), name, strlen(name), const_cast<Variant &>(v).ptr());
                                                ~~~^~
In file included from /usr/local/php8/include/php/main/php.h:35,
                 from /opt/m/phpx/include/phpx.h:21,
                 from /opt/m/phpx/src/class.cc:17:
/usr/local/php8/include/php/Zend/zend_API.h:387:74: note:   initializing argument 2 of 'void zend_update_property(zend_class_entry*, zend_object*, const char*, size_t, zval*)'
 ZEND_API void zend_update_property(zend_class_entry *scope, zend_object *object, const char *name, size_t name_length, zval *value);
                                                             ~~~~~~~~~~~~~^~~~~~
In file included from /opt/m/phpx/src/class.cc:17:
/opt/m/phpx/include/phpx.h: In member function 'void php::Object::set(const char*, php::Array&)':
/opt/m/phpx/include/phpx.h:1417:51: error: cannot convert 'zval*' {aka '_zval_struct*'} to 'zend_object*' {aka '_zend_object*'}
         zend_update_property(Z_OBJCE_P(ptr()), ptr(), name, strlen(name), v.ptr());
                                                ~~~^~
In file included from /usr/local/php8/include/php/main/php.h:35,
                 from /opt/m/phpx/include/phpx.h:21,
                 from /opt/m/phpx/src/class.cc:17:
/usr/local/php8/include/php/Zend/zend_API.h:387:74: note:   initializing argument 2 of 'void zend_update_property(zend_class_entry*, zend_object*, const char*, size_t, zval*)'
 ZEND_API void zend_update_property(zend_class_entry *scope, zend_object *object, const char *name, size_t name_length, zval *value);
                                                             ~~~~~~~~~~~~~^~~~~~
In file included from /opt/m/phpx/src/class.cc:17:
/opt/m/phpx/include/phpx.h: In member function 'void php::Object::set(const char*, std::__cxx11::string&)':
/opt/m/phpx/include/phpx.h:1421:59: error: cannot convert 'zval*' {aka '_zval_struct*'} to 'zend_object*' {aka '_zend_object*'}
         zend_update_property_stringl(Z_OBJCE_P(ptr()), ptr(), name, strlen(name), v.c_str(), v.length());
                                                        ~~~^~
In file included from /usr/local/php8/include/php/main/php.h:35,
                 from /opt/m/phpx/include/phpx.h:21,
                 from /opt/m/phpx/src/class.cc:17:
/usr/local/php8/include/php/Zend/zend_API.h:394:82: note:   initializing argument 2 of 'void zend_update_property_stringl(zend_class_entry*, zend_object*, const char*, size_t, const char*, size_t)'
 ZEND_API void zend_update_property_stringl(zend_class_entry *scope, zend_object *object, const char *name, size_t name_length, const char *value, size_t value_length);
                                                                     ~~~~~~~~~~~~~^~~~~~
In file included from /opt/m/phpx/src/class.cc:17:
/opt/m/phpx/include/phpx.h: In member function 'void php::Object::set(const char*, std::__cxx11::string)':
/opt/m/phpx/include/phpx.h:1425:59: error: cannot convert 'zval*' {aka '_zval_struct*'} to 'zend_object*' {aka '_zend_object*'}
         zend_update_property_stringl(Z_OBJCE_P(ptr()), ptr(), name, strlen(name), v.c_str(), v.length());
                                                        ~~~^~
In file included from /usr/local/php8/include/php/main/php.h:35,
                 from /opt/m/phpx/include/phpx.h:21,
                 from /opt/m/phpx/src/class.cc:17:
/usr/local/php8/include/php/Zend/zend_API.h:394:82: note:   initializing argument 2 of 'void zend_update_property_stringl(zend_class_entry*, zend_object*, const char*, size_t, const char*, size_t)'
 ZEND_API void zend_update_property_stringl(zend_class_entry *scope, zend_object *object, const char *name, size_t name_length, const char *value, size_t value_length);
                                                                     ~~~~~~~~~~~~~^~~~~~
In file included from /usr/local/php8/include/php/Zend/zend.h:33,
                 from /usr/local/php8/include/php/main/php.h:31,
                 from /opt/m/phpx/include/phpx.h:21,
                 from /opt/m/phpx/src/array.cc:17:
/opt/m/phpx/include/phpx.h: In member function 'bool php::Array::sort()':
/opt/m/phpx/include/phpx.h:1059:50: error: invalid conversion from 'int (*)(const void*, const void*)' to 'bucket_compare_func_t' {aka 'int (*)(_Bucket*, _Bucket*)'} [-fpermissive]
         return zend_hash_sort(Z_ARRVAL_P(ptr()), array_data_compare, 1) == SUCCESS;
                                                  ^~~~~~~~~~~~~~~~~~
/usr/local/php8/include/php/Zend/zend_hash.h:272:35: note: in definition of macro 'zend_hash_sort'
  zend_hash_sort_ex(ht, zend_sort, compare_func, renumber)
                                   ^~~~~~~~~~~~
/usr/local/php8/include/php/Zend/zend_hash.h:268:108: note:   initializing argument 3 of 'void zend_hash_sort_ex(HashTable*, sort_func_t, bucket_compare_func_t, zend_bool)'
 ZEND_API void  ZEND_FASTCALL zend_hash_sort_ex(HashTable *ht, sort_func_t sort_func, bucket_compare_func_t compare_func, zend_bool renumber);
                                                                                      ~~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~
In file included from /opt/m/phpx/src/class.cc:17:
/opt/m/phpx/include/phpx.h: In member function 'void php::Object::set(const char*, const char*)':
/opt/m/phpx/include/phpx.h:1429:58: error: cannot convert 'zval*' {aka '_zval_struct*'} to 'zend_object*' {aka '_zend_object*'}
         zend_update_property_string(Z_OBJCE_P(ptr()), ptr(), name, strlen(name), v);
                                                       ~~~^~
In file included from /opt/m/phpx/src/array.cc:17:
/opt/m/phpx/include/phpx.h:1059:73: error: no match for 'operator==' (operand types are 'void' and 'ZEND_RESULT_CODE')
         return zend_hash_sort(Z_ARRVAL_P(ptr()), array_data_compare, 1) == SUCCESS;
In file included from /usr/local/php8/include/php/main/php.h:35,
                 from /opt/m/phpx/include/phpx.h:21,
                 from /opt/m/phpx/src/class.cc:17:
/usr/local/php8/include/php/Zend/zend_API.h:393:81: note:   initializing argument 2 of 'void zend_update_property_string(zend_class_entry*, zend_object*, const char*, size_t, const char*)'
 ZEND_API void zend_update_property_string(zend_class_entry *scope, zend_object *object, const char *name, size_t name_length, const char *value);
                                                                    ~~~~~~~~~~~~~^~~~~~
In file included from /opt/m/phpx/src/class.cc:17:
/opt/m/phpx/include/phpx.h: In member function 'void php::Object::set(const char*, int)':
/opt/m/phpx/include/phpx.h:1433:56: error: cannot convert 'zval*' {aka '_zval_struct*'} to 'zend_object*' {aka '_zend_object*'}
         zend_update_property_long(Z_OBJCE_P(ptr()), ptr(), name, strlen(name), v);
                                                     ~~~^~
In file included from /usr/local/php8/include/php/main/php.h:35,
                 from /opt/m/phpx/include/phpx.h:21,
                 from /opt/m/phpx/src/class.cc:17:
/usr/local/php8/include/php/Zend/zend_API.h:390:79: note:   initializing argument 2 of 'void zend_update_property_long(zend_class_entry*, zend_object*, const char*, size_t, zend_long)'
 ZEND_API void zend_update_property_long(zend_class_entry *scope, zend_object *object, const char *name, size_t name_length, zend_long value);
                                                                  ~~~~~~~~~~~~~^~~~~~
In file included from /opt/m/phpx/src/class.cc:17:
/opt/m/phpx/include/phpx.h: In member function 'void php::Object::set(const char*, long int)':
/opt/m/phpx/include/phpx.h:1437:56: error: cannot convert 'zval*' {aka '_zval_struct*'} to 'zend_object*' {aka '_zend_object*'}
         zend_update_property_long(Z_OBJCE_P(ptr()), ptr(), name, strlen(name), v);
                                                     ~~~^~
In file included from /usr/local/php8/include/php/main/php.h:35,
                 from /opt/m/phpx/include/phpx.h:21,
                 from /opt/m/phpx/src/class.cc:17:
/usr/local/php8/include/php/Zend/zend_API.h:390:79: note:   initializing argument 2 of 'void zend_update_property_long(zend_class_entry*, zend_object*, const char*, size_t, zend_long)'
 ZEND_API void zend_update_property_long(zend_class_entry *scope, zend_object *object, const char *name, size_t name_length, zend_long value);
                                                                  ~~~~~~~~~~~~~^~~~~~
In file included from /opt/m/phpx/src/class.cc:17:
/opt/m/phpx/include/phpx.h: In member function 'void php::Object::set(const char*, double)':
/opt/m/phpx/include/phpx.h:1441:58: error: cannot convert 'zval*' {aka '_zval_struct*'} to 'zend_object*' {aka '_zend_object*'}
         zend_update_property_double(Z_OBJCE_P(ptr()), ptr(), name, strlen(name), v);
                                                       ~~~^~
In file included from /usr/local/php8/include/php/main/php.h:35,
                 from /opt/m/phpx/include/phpx.h:21,
                 from /opt/m/phpx/src/class.cc:17:
/usr/local/php8/include/php/Zend/zend_API.h:391:81: note:   initializing argument 2 of 'void zend_update_property_double(zend_class_entry*, zend_object*, const char*, size_t, double)'
 ZEND_API void zend_update_property_double(zend_class_entry *scope, zend_object *object, const char *name, size_t name_length, double value);
                                                                    ~~~~~~~~~~~~~^~~~~~
In file included from /opt/m/phpx/src/class.cc:17:
/opt/m/phpx/include/phpx.h: In member function 'void php::Object::set(const char*, float)':
/opt/m/phpx/include/phpx.h:1445:58: error: cannot convert 'zval*' {aka '_zval_struct*'} to 'zend_object*' {aka '_zend_object*'}
         zend_update_property_double(Z_OBJCE_P(ptr()), ptr(), name, strlen(name), (double) v);
                                                       ~~~^~
In file included from /usr/local/php8/include/php/main/php.h:35,
                 from /opt/m/phpx/include/phpx.h:21,
                 from /opt/m/phpx/src/class.cc:17:
/usr/local/php8/include/php/Zend/zend_API.h:391:81: note:   initializing argument 2 of 'void zend_update_property_double(zend_class_entry*, zend_object*, const char*, size_t, double)'
 ZEND_API void zend_update_property_double(zend_class_entry *scope, zend_object *object, const char *name, size_t name_length, double value);
                                                                    ~~~~~~~~~~~~~^~~~~~
In file included from /opt/m/phpx/src/class.cc:17:
/opt/m/phpx/include/phpx.h: In member function 'void php::Object::set(const char*, bool)':
/opt/m/phpx/include/phpx.h:1449:56: error: cannot convert 'zval*' {aka '_zval_struct*'} to 'zend_object*' {aka '_zend_object*'}
         zend_update_property_bool(Z_OBJCE_P(ptr()), ptr(), name, strlen(name), v ? 1 : 0);
                                                     ~~~^~
In file included from /usr/local/php8/include/php/main/php.h:35,
                 from /opt/m/phpx/include/phpx.h:21,
                 from /opt/m/phpx/src/class.cc:17:
/usr/local/php8/include/php/Zend/zend_API.h:389:79: note:   initializing argument 2 of 'void zend_update_property_bool(zend_class_entry*, zend_object*, const char*, size_t, zend_long)'
 ZEND_API void zend_update_property_bool(zend_class_entry *scope, zend_object *object, const char *name, size_t name_length, zend_long value);
                                                                  ~~~~~~~~~~~~~^~~~~~
/opt/m/phpx/include/phpx.h: In destructor 'php::ArgInfo::~ArgInfo()':
/opt/m/phpx/include/phpx.h:1174:17: error: 'ZEND_TYPE_IS_CLASS' was not declared in this scope
             if (ZEND_TYPE_IS_CLASS(info[i].type))
                 ^~~~~~~~~~~~~~~~~~
/opt/m/phpx/include/phpx.h: In destructor 'php::ArgInfo::~ArgInfo()':
/opt/m/phpx/include/phpx.h:1174:17: error: 'ZEND_TYPE_IS_CLASS' was not declared in this scope
             if (ZEND_TYPE_IS_CLASS(info[i].type))
                 ^~~~~~~~~~~~~~~~~~
In file included from /opt/m/phpx/src/class.cc:17:
/opt/m/phpx/include/phpx.h: At global scope:
/opt/m/phpx/include/phpx.h:1584:16: error: 'ZEND_ACC_DTOR' was not declared in this scope
     DESTRUCT = ZEND_ACC_DTOR,
                ^~~~~~~~~~~~~
/opt/m/phpx/include/phpx.h:1584:16: note: suggested alternative: 'ZEND_ACC_CTOR'
     DESTRUCT = ZEND_ACC_DTOR,
                ^~~~~~~~~~~~~
                ZEND_ACC_CTOR
/opt/m/phpx/include/phpx.h:1174:17: note: suggested alternative: 'ZEND_TYPE_HAS_CLASS'
             if (ZEND_TYPE_IS_CLASS(info[i].type))
                 ^~~~~~~~~~~~~~~~~~
                 ZEND_TYPE_HAS_CLASS
In file included from /usr/local/php8/include/php/Zend/zend.h:30,
                 from /usr/local/php8/include/php/main/php.h:31,
                 from /opt/m/phpx/include/phpx.h:21,
                 from /opt/m/phpx/src/array.cc:17:
/opt/m/phpx/include/phpx.h:1176:39: error: invalid cast from type 'zend_type' to type 'void*'
                 efree((void* )info[i].type);
                                       ^~~~
/usr/local/php8/include/php/Zend/zend_alloc.h:161:34: note: in definition of macro 'efree'
 #define efree(ptr)       _efree((ptr) ZEND_FILE_LINE_CC ZEND_FILE_LINE_EMPTY_CC)
                                  ^~~
/opt/m/phpx/include/phpx.h:1174:17: note: suggested alternative: 'ZEND_TYPE_HAS_CLASS'
             if (ZEND_TYPE_IS_CLASS(info[i].type))
                 ^~~~~~~~~~~~~~~~~~
                 ZEND_TYPE_HAS_CLASS
In file included from /usr/local/php8/include/php/Zend/zend.h:30,
                 from /usr/local/php8/include/php/main/php.h:31,
                 from /opt/m/phpx/include/phpx.h:21,
                 from /opt/m/phpx/src/array.cc:17:
/opt/m/phpx/include/phpx.h:1176:39: error: invalid cast from type 'zend_type' to type 'void*'
                 efree((void* )info[i].type);
                                       ^~~~
/usr/local/php8/include/php/Zend/zend_alloc.h:161:34: note: in definition of macro 'efree'
 #define efree(ptr)       _efree((ptr) ZEND_FILE_LINE_CC ZEND_FILE_LINE_EMPTY_CC)
                                  ^~~
In file included from /opt/m/phpx/src/array.cc:17:
/opt/m/phpx/include/phpx.h: In member function 'void php::ArgInfo::add(const char*, const char*, int, bool, bool, bool)':
/opt/m/phpx/include/phpx.h:1195:36: error: no matching function for call to 'zend_type::zend_type(char*&)'
                 type = (zend_type) _s;
                                    ^~
In file included from /usr/local/php8/include/php/Zend/zend.h:27,
                 from /usr/local/php8/include/php/main/php.h:31,
                 from /opt/m/phpx/include/phpx.h:21,
                 from /opt/m/phpx/src/array.cc:17:
/usr/local/php8/include/php/Zend/zend_types.h:134:3: note: candidate: 'zend_type::zend_type()'
 } zend_type;
   ^~~~~~~~~
/usr/local/php8/include/php/Zend/zend_types.h:134:3: note:   candidate expects 0 arguments, 1 provided
/usr/local/php8/include/php/Zend/zend_types.h:134:3: note: candidate: 'constexpr zend_type::zend_type(const zend_type&)'
/usr/local/php8/include/php/Zend/zend_types.h:134:3: note:   no known conversion for argument 1 from 'char*' to 'const zend_type&'
/usr/local/php8/include/php/Zend/zend_types.h:134:3: note: candidate: 'constexpr zend_type::zend_type(zend_type&&)'
/usr/local/php8/include/php/Zend/zend_types.h:134:3: note:   no known conversion for argument 1 from 'char*' to 'zend_type&&'
In file included from /usr/local/php8/include/php/Zend/zend.h:30,
                 from /usr/local/php8/include/php/main/php.h:31,
                 from /opt/m/phpx/include/phpx.h:21,
                 from /opt/m/phpx/src/array.cc:17:
/usr/local/php8/include/php/Zend/zend_alloc.h:170:80: error: no matching function for call to 'zend_type::zend_type(char*)'
 #define estrdup(s)       _estrdup((s) ZEND_FILE_LINE_CC ZEND_FILE_LINE_EMPTY_CC)
                                                                                ^
/opt/m/phpx/include/phpx.h:1199:36: note: in expansion of macro 'estrdup'
                 type = (zend_type) estrdup(class_name);
                                    ^~~~~~~
In file included from /usr/local/php8/include/php/Zend/zend.h:27,
                 from /usr/local/php8/include/php/main/php.h:31,
                 from /opt/m/phpx/include/phpx.h:21,
                 from /opt/m/phpx/src/array.cc:17:
/usr/local/php8/include/php/Zend/zend_types.h:134:3: note: candidate: 'zend_type::zend_type()'
 } zend_type;
   ^~~~~~~~~
/usr/local/php8/include/php/Zend/zend_types.h:134:3: note:   candidate expects 0 arguments, 1 provided
/usr/local/php8/include/php/Zend/zend_types.h:134:3: note: candidate: 'constexpr zend_type::zend_type(const zend_type&)'
/usr/local/php8/include/php/Zend/zend_types.h:134:3: note:   no known conversion for argument 1 from 'char*' to 'const zend_type&'
/usr/local/php8/include/php/Zend/zend_types.h:134:3: note: candidate: 'constexpr zend_type::zend_type(zend_type&&)'
/usr/local/php8/include/php/Zend/zend_types.h:134:3: note:   no known conversion for argument 1 from 'char*' to 'zend_type&&'
In file included from /opt/m/phpx/src/array.cc:17:
/opt/m/phpx/include/phpx.h: In member function 'void php::ArgInfo::add(const char*, const char*, int, bool, bool, bool)':
/opt/m/phpx/include/phpx.h:1195:36: error: no matching function for call to 'zend_type::zend_type(char*&)'
                 type = (zend_type) _s;
                                    ^~
In file included from /opt/m/phpx/src/array.cc:17:
/opt/m/phpx/include/phpx.h:1204:20: error: 'ZEND_TYPE_ENCODE' was not declared in this scope
             type = ZEND_TYPE_ENCODE(type_hint, allow_null);
                    ^~~~~~~~~~~~~~~~
In file included from /usr/local/php8/include/php/Zend/zend.h:27,
                 from /usr/local/php8/include/php/main/php.h:31,
                 from /opt/m/phpx/include/phpx.h:21,
                 from /opt/m/phpx/src/array.cc:17:
/usr/local/php8/include/php/Zend/zend_types.h:134:3: note: candidate: 'zend_type::zend_type()'
 } zend_type;
   ^~~~~~~~~
/usr/local/php8/include/php/Zend/zend_types.h:134:3: note:   candidate expects 0 arguments, 1 provided
/usr/local/php8/include/php/Zend/zend_types.h:134:3: note: candidate: 'constexpr zend_type::zend_type(const zend_type&)'
/usr/local/php8/include/php/Zend/zend_types.h:134:3: note:   no known conversion for argument 1 from 'char*' to 'const zend_type&'
/usr/local/php8/include/php/Zend/zend_types.h:134:3: note: candidate: 'constexpr zend_type::zend_type(zend_type&&)'
/usr/local/php8/include/php/Zend/zend_types.h:134:3: note:   no known conversion for argument 1 from 'char*' to 'zend_type&&'
In file included from /usr/local/php8/include/php/Zend/zend.h:30,
                 from /usr/local/php8/include/php/main/php.h:31,
                 from /opt/m/phpx/include/phpx.h:21,
                 from /opt/m/phpx/src/array.cc:17:
/usr/local/php8/include/php/Zend/zend_alloc.h:170:80: error: no matching function for call to 'zend_type::zend_type(char*)'
 #define estrdup(s)       _estrdup((s) ZEND_FILE_LINE_CC ZEND_FILE_LINE_EMPTY_CC)
                                                                                ^
/opt/m/phpx/include/phpx.h:1199:36: note: in expansion of macro 'estrdup'
                 type = (zend_type) estrdup(class_name);
                                    ^~~~~~~
In file included from /usr/local/php8/include/php/Zend/zend.h:27,
                 from /usr/local/php8/include/php/main/php.h:31,
                 from /opt/m/phpx/include/phpx.h:21,
                 from /opt/m/phpx/src/array.cc:17:
/usr/local/php8/include/php/Zend/zend_types.h:134:3: note: candidate: 'zend_type::zend_type()'
 } zend_type;
   ^~~~~~~~~
/usr/local/php8/include/php/Zend/zend_types.h:134:3: note:   candidate expects 0 arguments, 1 provided
/usr/local/php8/include/php/Zend/zend_types.h:134:3: note: candidate: 'constexpr zend_type::zend_type(const zend_type&)'
/usr/local/php8/include/php/Zend/zend_types.h:134:3: note:   no known conversion for argument 1 from 'char*' to 'const zend_type&'
/usr/local/php8/include/php/Zend/zend_types.h:134:3: note: candidate: 'constexpr zend_type::zend_type(zend_type&&)'
/usr/local/php8/include/php/Zend/zend_types.h:134:3: note:   no known conversion for argument 1 from 'char*' to 'zend_type&&'
In file included from /opt/m/phpx/src/array.cc:17:
/opt/m/phpx/include/phpx.h:1204:20: error: 'ZEND_TYPE_ENCODE' was not declared in this scope
             type = ZEND_TYPE_ENCODE(type_hint, allow_null);
                    ^~~~~~~~~~~~~~~~
/opt/m/phpx/include/phpx.h: In member function 'bool php::Interface::activate()':
/opt/m/phpx/include/phpx.h:1748:51: error: expected ')' before 'TSRMLS_CC'
         ce = zend_register_internal_interface(&_ce TSRMLS_CC);
                                              ~    ^~~~~~~~~~
                                                   )
/opt/m/phpx/include/phpx.h: At global scope:
/opt/m/phpx/include/phpx.h:1794:5: error: invalid conversion from 'int (*)(int, int)' to 'zend_result (*)(int, int)' {aka 'ZEND_RESULT_CODE (*)(int, int)'} [-fpermissive]
     };
     ^
/opt/m/phpx/include/phpx.h:1794:5: error: invalid conversion from 'int (*)(int, int)' to 'zend_result (*)(int, int)' {aka 'ZEND_RESULT_CODE (*)(int, int)'} [-fpermissive]
/opt/m/phpx/include/phpx.h:1794:5: error: invalid conversion from 'int (*)(int, int)' to 'zend_result (*)(int, int)' {aka 'ZEND_RESULT_CODE (*)(int, int)'} [-fpermissive]
/opt/m/phpx/include/phpx.h:1794:5: error: invalid conversion from 'int (*)(int, int)' to 'zend_result (*)(int, int)' {aka 'ZEND_RESULT_CODE (*)(int, int)'} [-fpermissive]
/opt/m/phpx/include/phpx.h:1204:20: note: suggested alternative: 'ZEND_TYPE_CE'
             type = ZEND_TYPE_ENCODE(type_hint, allow_null);
                    ^~~~~~~~~~~~~~~~
                    ZEND_TYPE_CE
/opt/m/phpx/include/phpx.h:1207:52: error: too many initializers for 'zend_internal_arg_info' {aka '_zend_internal_arg_info'}
         { name, type, pass_by_reference, variadic, };
                                                    ^
/opt/m/phpx/include/phpx.h: In member function 'zend_internal_arg_info* php::ArgInfo::get()':
/opt/m/phpx/include/phpx.h:1227:18: error: 'zend_internal_arg_info' {aka 'struct _zend_internal_arg_info'} has no member named 'pass_by_reference'
         _info[0].pass_by_reference = return_reference;
                  ^~~~~~~~~~~~~~~~~
In file included from /opt/m/phpx/src/array.cc:17:
/opt/m/phpx/include/phpx.h: In function 'void php::throwException(const char*, const char*, int)':
/opt/m/phpx/include/phpx.h:1302:43: error: expected ')' before 'TSRMLS_CC'
     zend_throw_exception(ce, message, code TSRMLS_CC);
                         ~                 ^~~~~~~~~~
                                           )
In file included from /opt/m/phpx/include/phpx.h:34,
                 from /opt/m/phpx/src/array.cc:17:
/opt/m/phpx/include/phpx.h: In member function 'php::Variant php::Object::callParentMethod(const char*)':
/opt/m/phpx/include/phpx.h:1359:43: error: cannot convert 'zval*' {aka '_zval_struct*'} to 'zend_object*' {aka '_zend_object*'}
         zend_call_method_with_0_params(ptr(), Z_OBJCE_P(ptr())->parent, NULL, func, retval.ptr());
                                        ~~~^~
/usr/local/php8/include/php/Zend/zend_interfaces.h:44:19: note: in definition of macro 'zend_call_method_with_0_params'
  zend_call_method(obj, obj_ce, fn_proxy, function_name, sizeof(function_name)-1, retval, 0, NULL, NULL)
                   ^~~
In file included from /opt/m/phpx/include/phpx.h:34,
                 from /opt/m/phpx/src/array.cc:17:
/usr/local/php8/include/php/Zend/zend_interfaces.h:41:46: note:   initializing argument 1 of 'zval* zend_call_method(zend_object*, zend_class_entry*, zend_function**, const char*, size_t, zval*, uint32_t, zval*, zval*)'
 ZEND_API zval* zend_call_method(zend_object *object, zend_class_entry *obj_ce, zend_function **fn_proxy, const char *function_name, size_t function_name_len, zval *retval, uint32_t param_count, zval* arg1, zval* arg2);
                                 ~~~~~~~~~~~~~^~~~~~
In file included from /opt/m/phpx/include/phpx.h:34,
                 from /opt/m/phpx/src/array.cc:17:
/opt/m/phpx/include/phpx.h: In member function 'php::Variant php::Object::callParentMethod(const char*, const php::Variant&)':
/opt/m/phpx/include/phpx.h:1365:43: error: cannot convert 'zval*' {aka '_zval_struct*'} to 'zend_object*' {aka '_zend_object*'}
         zend_call_method_with_1_params(ptr(), Z_OBJCE_P(ptr())->parent, NULL, func, retval.ptr(),
                                        ~~~^~
/usr/local/php8/include/php/Zend/zend_interfaces.h:47:19: note: in definition of macro 'zend_call_method_with_1_params'
  zend_call_method(obj, obj_ce, fn_proxy, function_name, sizeof(function_name)-1, retval, 1, arg1, NULL)
                   ^~~
In file included from /opt/m/phpx/include/phpx.h:34,
                 from /opt/m/phpx/src/array.cc:17:
/usr/local/php8/include/php/Zend/zend_interfaces.h:41:46: note:   initializing argument 1 of 'zval* zend_call_method(zend_object*, zend_class_entry*, zend_function**, const char*, size_t, zval*, uint32_t, zval*, zval*)'
 ZEND_API zval* zend_call_method(zend_object *object, zend_class_entry *obj_ce, zend_function **fn_proxy, const char *function_name, size_t function_name_len, zval *retval, uint32_t param_count, zval* arg1, zval* arg2);
                                 ~~~~~~~~~~~~~^~~~~~
In file included from /opt/m/phpx/include/phpx.h:34,
                 from /opt/m/phpx/src/array.cc:17:
/opt/m/phpx/include/phpx.h: In member function 'php::Variant php::Object::callParentMethod(const char*, const php::Variant&, const php::Variant&)':
/opt/m/phpx/include/phpx.h:1373:43: error: cannot convert 'zval*' {aka '_zval_struct*'} to 'zend_object*' {aka '_zend_object*'}
         zend_call_method_with_2_params(ptr(), Z_OBJCE_P(ptr())->parent, NULL, func, retval.ptr(),
                                        ~~~^~
/usr/local/php8/include/php/Zend/zend_interfaces.h:50:19: note: in definition of macro 'zend_call_method_with_2_params'
  zend_call_method(obj, obj_ce, fn_proxy, function_name, sizeof(function_name)-1, retval, 2, arg1, arg2)
                   ^~~
In file included from /opt/m/phpx/include/phpx.h:34,
                 from /opt/m/phpx/src/array.cc:17:
/usr/local/php8/include/php/Zend/zend_interfaces.h:41:46: note:   initializing argument 1 of 'zval* zend_call_method(zend_object*, zend_class_entry*, zend_function**, const char*, size_t, zval*, uint32_t, zval*, zval*)'
 ZEND_API zval* zend_call_method(zend_object *object, zend_class_entry *obj_ce, zend_function **fn_proxy, const char *function_name, size_t function_name_len, zval *retval, uint32_t param_count, zval* arg1, zval* arg2);
                                 ~~~~~~~~~~~~~^~~~~~
In file included from /opt/m/phpx/src/array.cc:17:
/opt/m/phpx/include/phpx.h: In member function 'php::Variant php::Object::get(const char*)':
/opt/m/phpx/include/phpx.h:1400:66: error: cannot convert 'zval*' {aka '_zval_struct*'} to 'zend_object*' {aka '_zend_object*'}
         zval *member_p = zend_read_property(Z_OBJCE_P(ptr()), ptr(), name, strlen(name), 0, &rv);
                                                               ~~~^~
In file included from /usr/local/php8/include/php/main/php.h:35,
                 from /opt/m/phpx/include/phpx.h:21,
                 from /opt/m/phpx/src/array.cc:17:
/usr/local/php8/include/php/Zend/zend_API.h:407:73: note:   initializing argument 2 of 'zval* zend_read_property(zend_class_entry*, zend_object*, const char*, size_t, zend_bool, zval*)'
 ZEND_API zval *zend_read_property(zend_class_entry *scope, zend_object *object, const char *name, size_t name_length, zend_bool silent, zval *rv);
                                                            ~~~~~~~~~~~~~^~~~~~
In file included from /opt/m/phpx/src/array.cc:17:
/opt/m/phpx/include/phpx.h: In member function 'void php::Object::set(const char*, const php::Variant&)':
/opt/m/phpx/include/phpx.h:1413:51: error: cannot convert 'zval*' {aka '_zval_struct*'} to 'zend_object*' {aka '_zend_object*'}
         zend_update_property(Z_OBJCE_P(ptr()), ptr(), name, strlen(name), const_cast<Variant &>(v).ptr());
                                                ~~~^~
In file included from /usr/local/php8/include/php/main/php.h:35,
                 from /opt/m/phpx/include/phpx.h:21,
                 from /opt/m/phpx/src/array.cc:17:
/usr/local/php8/include/php/Zend/zend_API.h:387:74: note:   initializing argument 2 of 'void zend_update_property(zend_class_entry*, zend_object*, const char*, size_t, zval*)'
 ZEND_API void zend_update_property(zend_class_entry *scope, zend_object *object, const char *name, size_t name_length, zval *value);
                                                             ~~~~~~~~~~~~~^~~~~~
In file included from /opt/m/phpx/src/array.cc:17:
/opt/m/phpx/include/phpx.h: In member function 'void php::Object::set(const char*, php::Array&)':
/opt/m/phpx/include/phpx.h:1417:51: error: cannot convert 'zval*' {aka '_zval_struct*'} to 'zend_object*' {aka '_zend_object*'}
         zend_update_property(Z_OBJCE_P(ptr()), ptr(), name, strlen(name), v.ptr());
                                                ~~~^~
In file included from /usr/local/php8/include/php/main/php.h:35,
                 from /opt/m/phpx/include/phpx.h:21,
                 from /opt/m/phpx/src/array.cc:17:
/usr/local/php8/include/php/Zend/zend_API.h:387:74: note:   initializing argument 2 of 'void zend_update_property(zend_class_entry*, zend_object*, const char*, size_t, zval*)'
 ZEND_API void zend_update_property(zend_class_entry *scope, zend_object *object, const char *name, size_t name_length, zval *value);
                                                             ~~~~~~~~~~~~~^~~~~~
In file included from /opt/m/phpx/src/array.cc:17:
/opt/m/phpx/include/phpx.h: In member function 'void php::Object::set(const char*, std::__cxx11::string&)':
/opt/m/phpx/include/phpx.h:1421:59: error: cannot convert 'zval*' {aka '_zval_struct*'} to 'zend_object*' {aka '_zend_object*'}
         zend_update_property_stringl(Z_OBJCE_P(ptr()), ptr(), name, strlen(name), v.c_str(), v.length());
                                                        ~~~^~
In file included from /usr/local/php8/include/php/main/php.h:35,
                 from /opt/m/phpx/include/phpx.h:21,
                 from /opt/m/phpx/src/array.cc:17:
/usr/local/php8/include/php/Zend/zend_API.h:394:82: note:   initializing argument 2 of 'void zend_update_property_stringl(zend_class_entry*, zend_object*, const char*, size_t, const char*, size_t)'
 ZEND_API void zend_update_property_stringl(zend_class_entry *scope, zend_object *object, const char *name, size_t name_length, const char *value, size_t value_length);
                                                                     ~~~~~~~~~~~~~^~~~~~
In file included from /opt/m/phpx/src/array.cc:17:
/opt/m/phpx/include/phpx.h: In member function 'void php::Object::set(const char*, std::__cxx11::string)':
/opt/m/phpx/include/phpx.h:1425:59: error: cannot convert 'zval*' {aka '_zval_struct*'} to 'zend_object*' {aka '_zend_object*'}
         zend_update_property_stringl(Z_OBJCE_P(ptr()), ptr(), name, strlen(name), v.c_str(), v.length());
                                                        ~~~^~
In file included from /usr/local/php8/include/php/main/php.h:35,
                 from /opt/m/phpx/include/phpx.h:21,
                 from /opt/m/phpx/src/array.cc:17:
/usr/local/php8/include/php/Zend/zend_API.h:394:82: note:   initializing argument 2 of 'void zend_update_property_stringl(zend_class_entry*, zend_object*, const char*, size_t, const char*, size_t)'
 ZEND_API void zend_update_property_stringl(zend_class_entry *scope, zend_object *object, const char *name, size_t name_length, const char *value, size_t value_length);
                                                                     ~~~~~~~~~~~~~^~~~~~
In file included from /opt/m/phpx/src/array.cc:17:
/opt/m/phpx/include/phpx.h: In member function 'void php::Object::set(const char*, const char*)':
/opt/m/phpx/include/phpx.h:1429:58: error: cannot convert 'zval*' {aka '_zval_struct*'} to 'zend_object*' {aka '_zend_object*'}
         zend_update_property_string(Z_OBJCE_P(ptr()), ptr(), name, strlen(name), v);
                                                       ~~~^~
In file included from /usr/local/php8/include/php/main/php.h:35,
                 from /opt/m/phpx/include/phpx.h:21,
                 from /opt/m/phpx/src/array.cc:17:
/usr/local/php8/include/php/Zend/zend_API.h:393:81: note:   initializing argument 2 of 'void zend_update_property_string(zend_class_entry*, zend_object*, const char*, size_t, const char*)'
 ZEND_API void zend_update_property_string(zend_class_entry *scope, zend_object *object, const char *name, size_t name_length, const char *value);
                                                                    ~~~~~~~~~~~~~^~~~~~
In file included from /opt/m/phpx/src/array.cc:17:
/opt/m/phpx/include/phpx.h: In member function 'void php::Object::set(const char*, int)':
/opt/m/phpx/include/phpx.h:1433:56: error: cannot convert 'zval*' {aka '_zval_struct*'} to 'zend_object*' {aka '_zend_object*'}
         zend_update_property_long(Z_OBJCE_P(ptr()), ptr(), name, strlen(name), v);
                                                     ~~~^~
In file included from /usr/local/php8/include/php/main/php.h:35,
                 from /opt/m/phpx/include/phpx.h:21,
                 from /opt/m/phpx/src/array.cc:17:
/usr/local/php8/include/php/Zend/zend_API.h:390:79: note:   initializing argument 2 of 'void zend_update_property_long(zend_class_entry*, zend_object*, const char*, size_t, zend_long)'
 ZEND_API void zend_update_property_long(zend_class_entry *scope, zend_object *object, const char *name, size_t name_length, zend_long value);
                                                                  ~~~~~~~~~~~~~^~~~~~
In file included from /opt/m/phpx/src/array.cc:17:
/opt/m/phpx/include/phpx.h: In member function 'void php::Object::set(const char*, long int)':
/opt/m/phpx/include/phpx.h:1437:56: error: cannot convert 'zval*' {aka '_zval_struct*'} to 'zend_object*' {aka '_zend_object*'}
         zend_update_property_long(Z_OBJCE_P(ptr()), ptr(), name, strlen(name), v);
                                                     ~~~^~
In file included from /usr/local/php8/include/php/main/php.h:35,
                 from /opt/m/phpx/include/phpx.h:21,
                 from /opt/m/phpx/src/array.cc:17:
/usr/local/php8/include/php/Zend/zend_API.h:390:79: note:   initializing argument 2 of 'void zend_update_property_long(zend_class_entry*, zend_object*, const char*, size_t, zend_long)'
 ZEND_API void zend_update_property_long(zend_class_entry *scope, zend_object *object, const char *name, size_t name_length, zend_long value);
                                                                  ~~~~~~~~~~~~~^~~~~~
In file included from /opt/m/phpx/src/array.cc:17:
/opt/m/phpx/include/phpx.h: In member function 'void php::Object::set(const char*, double)':
/opt/m/phpx/include/phpx.h:1441:58: error: cannot convert 'zval*' {aka '_zval_struct*'} to 'zend_object*' {aka '_zend_object*'}
         zend_update_property_double(Z_OBJCE_P(ptr()), ptr(), name, strlen(name), v);
                                                       ~~~^~
In file included from /usr/local/php8/include/php/main/php.h:35,
                 from /opt/m/phpx/include/phpx.h:21,
                 from /opt/m/phpx/src/array.cc:17:
/usr/local/php8/include/php/Zend/zend_API.h:391:81: note:   initializing argument 2 of 'void zend_update_property_double(zend_class_entry*, zend_object*, const char*, size_t, double)'
 ZEND_API void zend_update_property_double(zend_class_entry *scope, zend_object *object, const char *name, size_t name_length, double value);
                                                                    ~~~~~~~~~~~~~^~~~~~
In file included from /opt/m/phpx/src/array.cc:17:
/opt/m/phpx/include/phpx.h: In member function 'void php::Object::set(const char*, float)':
/opt/m/phpx/include/phpx.h:1445:58: error: cannot convert 'zval*' {aka '_zval_struct*'} to 'zend_object*' {aka '_zend_object*'}
         zend_update_property_double(Z_OBJCE_P(ptr()), ptr(), name, strlen(name), (double) v);
                                                       ~~~^~
In file included from /usr/local/php8/include/php/main/php.h:35,
                 from /opt/m/phpx/include/phpx.h:21,
                 from /opt/m/phpx/src/array.cc:17:
/usr/local/php8/include/php/Zend/zend_API.h:391:81: note:   initializing argument 2 of 'void zend_update_property_double(zend_class_entry*, zend_object*, const char*, size_t, double)'
 ZEND_API void zend_update_property_double(zend_class_entry *scope, zend_object *object, const char *name, size_t name_length, double value);
                                                                    ~~~~~~~~~~~~~^~~~~~
In file included from /opt/m/phpx/src/array.cc:17:
/opt/m/phpx/include/phpx.h: In member function 'void php::Object::set(const char*, bool)':
/opt/m/phpx/include/phpx.h:1449:56: error: cannot convert 'zval*' {aka '_zval_struct*'} to 'zend_object*' {aka '_zend_object*'}
         zend_update_property_bool(Z_OBJCE_P(ptr()), ptr(), name, strlen(name), v ? 1 : 0);
                                                     ~~~^~
In file included from /usr/local/php8/include/php/main/php.h:35,
                 from /opt/m/phpx/include/phpx.h:21,
                 from /opt/m/phpx/src/array.cc:17:
/usr/local/php8/include/php/Zend/zend_API.h:389:79: note:   initializing argument 2 of 'void zend_update_property_bool(zend_class_entry*, zend_object*, const char*, size_t, zend_long)'
 ZEND_API void zend_update_property_bool(zend_class_entry *scope, zend_object *object, const char *name, size_t name_length, zend_long value);
                                                                  ~~~~~~~~~~~~~^~~~~~
/opt/m/phpx/include/phpx.h:1204:20: note: suggested alternative: 'ZEND_TYPE_CE'
             type = ZEND_TYPE_ENCODE(type_hint, allow_null);
                    ^~~~~~~~~~~~~~~~
                    ZEND_TYPE_CE
/opt/m/phpx/include/phpx.h:1207:52: error: too many initializers for 'zend_internal_arg_info' {aka '_zend_internal_arg_info'}
         { name, type, pass_by_reference, variadic, };
                                                    ^
/opt/m/phpx/include/phpx.h: In member function 'zend_internal_arg_info* php::ArgInfo::get()':
/opt/m/phpx/include/phpx.h:1227:18: error: 'zend_internal_arg_info' {aka 'struct _zend_internal_arg_info'} has no member named 'pass_by_reference'
         _info[0].pass_by_reference = return_reference;
                  ^~~~~~~~~~~~~~~~~
In file included from /opt/m/phpx/src/array.cc:17:
/opt/m/phpx/include/phpx.h: In function 'void php::throwException(const char*, const char*, int)':
/opt/m/phpx/include/phpx.h:1302:43: error: expected ')' before 'TSRMLS_CC'
     zend_throw_exception(ce, message, code TSRMLS_CC);
                         ~                 ^~~~~~~~~~
                                           )
In file included from /opt/m/phpx/include/phpx.h:34,
                 from /opt/m/phpx/src/array.cc:17:
/opt/m/phpx/include/phpx.h: In member function 'php::Variant php::Object::callParentMethod(const char*)':
/opt/m/phpx/include/phpx.h:1359:43: error: cannot convert 'zval*' {aka '_zval_struct*'} to 'zend_object*' {aka '_zend_object*'}
         zend_call_method_with_0_params(ptr(), Z_OBJCE_P(ptr())->parent, NULL, func, retval.ptr());
                                        ~~~^~
/usr/local/php8/include/php/Zend/zend_interfaces.h:44:19: note: in definition of macro 'zend_call_method_with_0_params'
  zend_call_method(obj, obj_ce, fn_proxy, function_name, sizeof(function_name)-1, retval, 0, NULL, NULL)
                   ^~~
In file included from /opt/m/phpx/include/phpx.h:34,
                 from /opt/m/phpx/src/array.cc:17:
/usr/local/php8/include/php/Zend/zend_interfaces.h:41:46: note:   initializing argument 1 of 'zval* zend_call_method(zend_object*, zend_class_entry*, zend_function**, const char*, size_t, zval*, uint32_t, zval*, zval*)'
 ZEND_API zval* zend_call_method(zend_object *object, zend_class_entry *obj_ce, zend_function **fn_proxy, const char *function_name, size_t function_name_len, zval *retval, uint32_t param_count, zval* arg1, zval* arg2);
                                 ~~~~~~~~~~~~~^~~~~~
In file included from /opt/m/phpx/include/phpx.h:34,
                 from /opt/m/phpx/src/array.cc:17:
/opt/m/phpx/include/phpx.h: In member function 'php::Variant php::Object::callParentMethod(const char*, const php::Variant&)':
/opt/m/phpx/include/phpx.h:1365:43: error: cannot convert 'zval*' {aka '_zval_struct*'} to 'zend_object*' {aka '_zend_object*'}
         zend_call_method_with_1_params(ptr(), Z_OBJCE_P(ptr())->parent, NULL, func, retval.ptr(),
                                        ~~~^~
/usr/local/php8/include/php/Zend/zend_interfaces.h:47:19: note: in definition of macro 'zend_call_method_with_1_params'
  zend_call_method(obj, obj_ce, fn_proxy, function_name, sizeof(function_name)-1, retval, 1, arg1, NULL)
                   ^~~
In file included from /opt/m/phpx/include/phpx.h:34,
                 from /opt/m/phpx/src/array.cc:17:
/usr/local/php8/include/php/Zend/zend_interfaces.h:41:46: note:   initializing argument 1 of 'zval* zend_call_method(zend_object*, zend_class_entry*, zend_function**, const char*, size_t, zval*, uint32_t, zval*, zval*)'
 ZEND_API zval* zend_call_method(zend_object *object, zend_class_entry *obj_ce, zend_function **fn_proxy, const char *function_name, size_t function_name_len, zval *retval, uint32_t param_count, zval* arg1, zval* arg2);
                                 ~~~~~~~~~~~~~^~~~~~
In file included from /opt/m/phpx/include/phpx.h:34,
                 from /opt/m/phpx/src/array.cc:17:
/opt/m/phpx/include/phpx.h: In member function 'php::Variant php::Object::callParentMethod(const char*, const php::Variant&, const php::Variant&)':
/opt/m/phpx/include/phpx.h:1373:43: error: cannot convert 'zval*' {aka '_zval_struct*'} to 'zend_object*' {aka '_zend_object*'}
         zend_call_method_with_2_params(ptr(), Z_OBJCE_P(ptr())->parent, NULL, func, retval.ptr(),
                                        ~~~^~
/usr/local/php8/include/php/Zend/zend_interfaces.h:50:19: note: in definition of macro 'zend_call_method_with_2_params'
  zend_call_method(obj, obj_ce, fn_proxy, function_name, sizeof(function_name)-1, retval, 2, arg1, arg2)
                   ^~~
In file included from /opt/m/phpx/include/phpx.h:34,
                 from /opt/m/phpx/src/array.cc:17:
/usr/local/php8/include/php/Zend/zend_interfaces.h:41:46: note:   initializing argument 1 of 'zval* zend_call_method(zend_object*, zend_class_entry*, zend_function**, const char*, size_t, zval*, uint32_t, zval*, zval*)'
 ZEND_API zval* zend_call_method(zend_object *object, zend_class_entry *obj_ce, zend_function **fn_proxy, const char *function_name, size_t function_name_len, zval *retval, uint32_t param_count, zval* arg1, zval* arg2);
                                 ~~~~~~~~~~~~~^~~~~~
In file included from /opt/m/phpx/src/array.cc:17:
/opt/m/phpx/include/phpx.h: At global scope:
/opt/m/phpx/include/phpx.h:1584:16: error: 'ZEND_ACC_DTOR' was not declared in this scope
     DESTRUCT = ZEND_ACC_DTOR,
                ^~~~~~~~~~~~~
In file included from /opt/m/phpx/src/array.cc:17:
/opt/m/phpx/include/phpx.h: In member function 'php::Variant php::Object::get(const char*)':
/opt/m/phpx/include/phpx.h:1400:66: error: cannot convert 'zval*' {aka '_zval_struct*'} to 'zend_object*' {aka '_zend_object*'}
         zval *member_p = zend_read_property(Z_OBJCE_P(ptr()), ptr(), name, strlen(name), 0, &rv);
                                                               ~~~^~
In file included from /usr/local/php8/include/php/main/php.h:35,
                 from /opt/m/phpx/include/phpx.h:21,
                 from /opt/m/phpx/src/array.cc:17:
/usr/local/php8/include/php/Zend/zend_API.h:407:73: note:   initializing argument 2 of 'zval* zend_read_property(zend_class_entry*, zend_object*, const char*, size_t, zend_bool, zval*)'
 ZEND_API zval *zend_read_property(zend_class_entry *scope, zend_object *object, const char *name, size_t name_length, zend_bool silent, zval *rv);
                                                            ~~~~~~~~~~~~~^~~~~~
In file included from /opt/m/phpx/src/array.cc:17:
/opt/m/phpx/include/phpx.h: In member function 'void php::Object::set(const char*, const php::Variant&)':
/opt/m/phpx/include/phpx.h:1413:51: error: cannot convert 'zval*' {aka '_zval_struct*'} to 'zend_object*' {aka '_zend_object*'}
         zend_update_property(Z_OBJCE_P(ptr()), ptr(), name, strlen(name), const_cast<Variant &>(v).ptr());
                                                ~~~^~
In file included from /usr/local/php8/include/php/main/php.h:35,
                 from /opt/m/phpx/include/phpx.h:21,
                 from /opt/m/phpx/src/array.cc:17:
/usr/local/php8/include/php/Zend/zend_API.h:387:74: note:   initializing argument 2 of 'void zend_update_property(zend_class_entry*, zend_object*, const char*, size_t, zval*)'
 ZEND_API void zend_update_property(zend_class_entry *scope, zend_object *object, const char *name, size_t name_length, zval *value);
                                                             ~~~~~~~~~~~~~^~~~~~
In file included from /opt/m/phpx/src/array.cc:17:
/opt/m/phpx/include/phpx.h: In member function 'void php::Object::set(const char*, php::Array&)':
/opt/m/phpx/include/phpx.h:1417:51: error: cannot convert 'zval*' {aka '_zval_struct*'} to 'zend_object*' {aka '_zend_object*'}
         zend_update_property(Z_OBJCE_P(ptr()), ptr(), name, strlen(name), v.ptr());
                                                ~~~^~
In file included from /usr/local/php8/include/php/main/php.h:35,
                 from /opt/m/phpx/include/phpx.h:21,
                 from /opt/m/phpx/src/array.cc:17:
/usr/local/php8/include/php/Zend/zend_API.h:387:74: note:   initializing argument 2 of 'void zend_update_property(zend_class_entry*, zend_object*, const char*, size_t, zval*)'
 ZEND_API void zend_update_property(zend_class_entry *scope, zend_object *object, const char *name, size_t name_length, zval *value);
                                                             ~~~~~~~~~~~~~^~~~~~
In file included from /opt/m/phpx/src/array.cc:17:
/opt/m/phpx/include/phpx.h: In member function 'void php::Object::set(const char*, std::__cxx11::string&)':
/opt/m/phpx/include/phpx.h:1421:59: error: cannot convert 'zval*' {aka '_zval_struct*'} to 'zend_object*' {aka '_zend_object*'}
         zend_update_property_stringl(Z_OBJCE_P(ptr()), ptr(), name, strlen(name), v.c_str(), v.length());
                                                        ~~~^~
In file included from /usr/local/php8/include/php/main/php.h:35,
                 from /opt/m/phpx/include/phpx.h:21,
                 from /opt/m/phpx/src/array.cc:17:
/usr/local/php8/include/php/Zend/zend_API.h:394:82: note:   initializing argument 2 of 'void zend_update_property_stringl(zend_class_entry*, zend_object*, const char*, size_t, const char*, size_t)'
 ZEND_API void zend_update_property_stringl(zend_class_entry *scope, zend_object *object, const char *name, size_t name_length, const char *value, size_t value_length);
                                                                     ~~~~~~~~~~~~~^~~~~~
In file included from /opt/m/phpx/src/array.cc:17:
/opt/m/phpx/include/phpx.h: In member function 'void php::Object::set(const char*, std::__cxx11::string)':
/opt/m/phpx/include/phpx.h:1425:59: error: cannot convert 'zval*' {aka '_zval_struct*'} to 'zend_object*' {aka '_zend_object*'}
         zend_update_property_stringl(Z_OBJCE_P(ptr()), ptr(), name, strlen(name), v.c_str(), v.length());
                                                        ~~~^~
In file included from /usr/local/php8/include/php/main/php.h:35,
                 from /opt/m/phpx/include/phpx.h:21,
                 from /opt/m/phpx/src/array.cc:17:
/usr/local/php8/include/php/Zend/zend_API.h:394:82: note:   initializing argument 2 of 'void zend_update_property_stringl(zend_class_entry*, zend_object*, const char*, size_t, const char*, size_t)'
 ZEND_API void zend_update_property_stringl(zend_class_entry *scope, zend_object *object, const char *name, size_t name_length, const char *value, size_t value_length);
                                                                     ~~~~~~~~~~~~~^~~~~~
In file included from /opt/m/phpx/src/array.cc:17:
/opt/m/phpx/include/phpx.h: In member function 'void php::Object::set(const char*, const char*)':
/opt/m/phpx/include/phpx.h:1429:58: error: cannot convert 'zval*' {aka '_zval_struct*'} to 'zend_object*' {aka '_zend_object*'}
         zend_update_property_string(Z_OBJCE_P(ptr()), ptr(), name, strlen(name), v);
                                                       ~~~^~
In file included from /usr/local/php8/include/php/main/php.h:35,
                 from /opt/m/phpx/include/phpx.h:21,
                 from /opt/m/phpx/src/array.cc:17:
/usr/local/php8/include/php/Zend/zend_API.h:393:81: note:   initializing argument 2 of 'void zend_update_property_string(zend_class_entry*, zend_object*, const char*, size_t, const char*)'
 ZEND_API void zend_update_property_string(zend_class_entry *scope, zend_object *object, const char *name, size_t name_length, const char *value);
                                                                    ~~~~~~~~~~~~~^~~~~~
In file included from /opt/m/phpx/src/array.cc:17:
/opt/m/phpx/include/phpx.h: In member function 'void php::Object::set(const char*, int)':
/opt/m/phpx/include/phpx.h:1433:56: error: cannot convert 'zval*' {aka '_zval_struct*'} to 'zend_object*' {aka '_zend_object*'}
         zend_update_property_long(Z_OBJCE_P(ptr()), ptr(), name, strlen(name), v);
                                                     ~~~^~
In file included from /usr/local/php8/include/php/main/php.h:35,
                 from /opt/m/phpx/include/phpx.h:21,
                 from /opt/m/phpx/src/array.cc:17:
/usr/local/php8/include/php/Zend/zend_API.h:390:79: note:   initializing argument 2 of 'void zend_update_property_long(zend_class_entry*, zend_object*, const char*, size_t, zend_long)'
 ZEND_API void zend_update_property_long(zend_class_entry *scope, zend_object *object, const char *name, size_t name_length, zend_long value);
                                                                  ~~~~~~~~~~~~~^~~~~~
In file included from /opt/m/phpx/src/array.cc:17:
/opt/m/phpx/include/phpx.h: In member function 'void php::Object::set(const char*, long int)':
/opt/m/phpx/include/phpx.h:1437:56: error: cannot convert 'zval*' {aka '_zval_struct*'} to 'zend_object*' {aka '_zend_object*'}
         zend_update_property_long(Z_OBJCE_P(ptr()), ptr(), name, strlen(name), v);
                                                     ~~~^~
In file included from /usr/local/php8/include/php/main/php.h:35,
                 from /opt/m/phpx/include/phpx.h:21,
                 from /opt/m/phpx/src/array.cc:17:
/usr/local/php8/include/php/Zend/zend_API.h:390:79: note:   initializing argument 2 of 'void zend_update_property_long(zend_class_entry*, zend_object*, const char*, size_t, zend_long)'
 ZEND_API void zend_update_property_long(zend_class_entry *scope, zend_object *object, const char *name, size_t name_length, zend_long value);
                                                                  ~~~~~~~~~~~~~^~~~~~
In file included from /opt/m/phpx/src/array.cc:17:
/opt/m/phpx/include/phpx.h: In member function 'void php::Object::set(const char*, double)':
/opt/m/phpx/include/phpx.h:1441:58: error: cannot convert 'zval*' {aka '_zval_struct*'} to 'zend_object*' {aka '_zend_object*'}
         zend_update_property_double(Z_OBJCE_P(ptr()), ptr(), name, strlen(name), v);
                                                       ~~~^~
In file included from /usr/local/php8/include/php/main/php.h:35,
                 from /opt/m/phpx/include/phpx.h:21,
                 from /opt/m/phpx/src/array.cc:17:
/usr/local/php8/include/php/Zend/zend_API.h:391:81: note:   initializing argument 2 of 'void zend_update_property_double(zend_class_entry*, zend_object*, const char*, size_t, double)'
 ZEND_API void zend_update_property_double(zend_class_entry *scope, zend_object *object, const char *name, size_t name_length, double value);
                                                                    ~~~~~~~~~~~~~^~~~~~
In file included from /opt/m/phpx/src/array.cc:17:
/opt/m/phpx/include/phpx.h: In member function 'void php::Object::set(const char*, float)':
/opt/m/phpx/include/phpx.h:1445:58: error: cannot convert 'zval*' {aka '_zval_struct*'} to 'zend_object*' {aka '_zend_object*'}
         zend_update_property_double(Z_OBJCE_P(ptr()), ptr(), name, strlen(name), (double) v);
                                                       ~~~^~
In file included from /usr/local/php8/include/php/main/php.h:35,
                 from /opt/m/phpx/include/phpx.h:21,
                 from /opt/m/phpx/src/array.cc:17:
/usr/local/php8/include/php/Zend/zend_API.h:391:81: note:   initializing argument 2 of 'void zend_update_property_double(zend_class_entry*, zend_object*, const char*, size_t, double)'
 ZEND_API void zend_update_property_double(zend_class_entry *scope, zend_object *object, const char *name, size_t name_length, double value);
                                                                    ~~~~~~~~~~~~~^~~~~~
In file included from /opt/m/phpx/src/array.cc:17:
/opt/m/phpx/include/phpx.h: In member function 'void php::Object::set(const char*, bool)':
/opt/m/phpx/include/phpx.h:1449:56: error: cannot convert 'zval*' {aka '_zval_struct*'} to 'zend_object*' {aka '_zend_object*'}
         zend_update_property_bool(Z_OBJCE_P(ptr()), ptr(), name, strlen(name), v ? 1 : 0);
                                                     ~~~^~
In file included from /usr/local/php8/include/php/main/php.h:35,
                 from /opt/m/phpx/include/phpx.h:21,
                 from /opt/m/phpx/src/array.cc:17:
/usr/local/php8/include/php/Zend/zend_API.h:389:79: note:   initializing argument 2 of 'void zend_update_property_bool(zend_class_entry*, zend_object*, const char*, size_t, zend_long)'
 ZEND_API void zend_update_property_bool(zend_class_entry *scope, zend_object *object, const char *name, size_t name_length, zend_long value);
                                                                  ~~~~~~~~~~~~~^~~~~~
/opt/m/phpx/include/phpx.h:1584:16: note: suggested alternative: 'ZEND_ACC_CTOR'
     DESTRUCT = ZEND_ACC_DTOR,
                ^~~~~~~~~~~~~
                ZEND_ACC_CTOR
/opt/m/phpx/include/phpx.h: In member function 'bool php::Interface::activate()':
/opt/m/phpx/include/phpx.h:1748:51: error: expected ')' before 'TSRMLS_CC'
         ce = zend_register_internal_interface(&_ce TSRMLS_CC);
                                              ~    ^~~~~~~~~~
                                                   )
In file included from /opt/m/phpx/src/array.cc:17:
/opt/m/phpx/include/phpx.h: At global scope:
/opt/m/phpx/include/phpx.h:1584:16: error: 'ZEND_ACC_DTOR' was not declared in this scope
     DESTRUCT = ZEND_ACC_DTOR,
                ^~~~~~~~~~~~~
/opt/m/phpx/include/phpx.h: At global scope:
/opt/m/phpx/include/phpx.h:1794:5: error: invalid conversion from 'int (*)(int, int)' to 'zend_result (*)(int, int)' {aka 'ZEND_RESULT_CODE (*)(int, int)'} [-fpermissive]
     };
     ^
/opt/m/phpx/include/phpx.h:1794:5: error: invalid conversion from 'int (*)(int, int)' to 'zend_result (*)(int, int)' {aka 'ZEND_RESULT_CODE (*)(int, int)'} [-fpermissive]
/opt/m/phpx/include/phpx.h:1794:5: error: invalid conversion from 'int (*)(int, int)' to 'zend_result (*)(int, int)' {aka 'ZEND_RESULT_CODE (*)(int, int)'} [-fpermissive]
/opt/m/phpx/include/phpx.h:1794:5: error: invalid conversion from 'int (*)(int, int)' to 'zend_result (*)(int, int)' {aka 'ZEND_RESULT_CODE (*)(int, int)'} [-fpermissive]
/opt/m/phpx/include/phpx.h:1584:16: note: suggested alternative: 'ZEND_ACC_CTOR'
     DESTRUCT = ZEND_ACC_DTOR,
                ^~~~~~~~~~~~~
                ZEND_ACC_CTOR
/opt/m/phpx/include/phpx.h: In member function 'bool php::Interface::activate()':
/opt/m/phpx/include/phpx.h:1748:51: error: expected ')' before 'TSRMLS_CC'
         ce = zend_register_internal_interface(&_ce TSRMLS_CC);
                                              ~    ^~~~~~~~~~
                                                   )
/opt/m/phpx/include/phpx.h: At global scope:
/opt/m/phpx/include/phpx.h:1794:5: error: invalid conversion from 'int (*)(int, int)' to 'zend_result (*)(int, int)' {aka 'ZEND_RESULT_CODE (*)(int, int)'} [-fpermissive]
     };
     ^
/opt/m/phpx/include/phpx.h:1794:5: error: invalid conversion from 'int (*)(int, int)' to 'zend_result (*)(int, int)' {aka 'ZEND_RESULT_CODE (*)(int, int)'} [-fpermissive]
/opt/m/phpx/include/phpx.h:1794:5: error: invalid conversion from 'int (*)(int, int)' to 'zend_result (*)(int, int)' {aka 'ZEND_RESULT_CODE (*)(int, int)'} [-fpermissive]
/opt/m/phpx/include/phpx.h:1794:5: error: invalid conversion from 'int (*)(int, int)' to 'zend_result (*)(int, int)' {aka 'ZEND_RESULT_CODE (*)(int, int)'} [-fpermissive]
/opt/m/phpx/src/base.cc: In function 'bool php::define(const char*, const php::Variant&, bool)':
/opt/m/phpx/src/base.cc:227:34: error: 'const zend_object_handlers' {aka 'const struct _zend_object_handlers'} has no member named 'get'; did you mean 'get_gc'?
             if (Z_OBJ_HT_P(val)->get)
                                  ^~~
                                  get_gc
/opt/m/phpx/src/base.cc:230:40: error: 'const zend_object_handlers' {aka 'const struct _zend_object_handlers'} has no member named 'get'; did you mean 'get_gc'?
                 val = Z_OBJ_HT_P(val)->get(val, &rv);
                                        ^~~
                                        get_gc
/opt/m/phpx/src/base.cc:236:75: error: cannot convert 'zval*' {aka '_zval_struct*'} to 'zend_object*' {aka '_zend_object*'} in argument passing
                 if (Z_OBJ_HT_P(val)->cast_object(val, &val_free, IS_STRING) == SUCCESS)
                                                                           ^
/opt/m/phpx/src/class.cc: In member function 'bool php::Class::activate()':
/opt/m/phpx/src/class.cc:177:47: error: expected ')' before 'TSRMLS_CC'
         ce = zend_register_internal_class(&_ce TSRMLS_CC);
                                          ~    ^~~~~~~~~~
                                               )
/opt/m/phpx/src/base.cc: In function 'ZEND_RESULT_CODE php::_check_args_num(zend_execute_data*, int)':
/opt/m/phpx/src/base.cc:382:9: error: 'zend_wrong_paramers_count_error' was not declared in this scope
         zend_wrong_paramers_count_error(num_args, min_num_args, max_num_args);
         ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
/opt/m/phpx/include/phpx.h: In member function 'bool php::Interface::activate()':
/opt/m/phpx/include/phpx.h:1748:51: error: expected ')' before 'TSRMLS_CC'
         ce = zend_register_internal_interface(&_ce TSRMLS_CC);
                                              ~    ^~~~~~~~~~
                                                   )
/opt/m/phpx/src/base.cc:382:9: note: suggested alternative: 'zend_wrong_parameters_count_error'
         zend_wrong_paramers_count_error(num_args, min_num_args, max_num_args);
         ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
         zend_wrong_parameters_count_error
/opt/m/phpx/include/phpx.h: At global scope:
/opt/m/phpx/include/phpx.h:1794:5: error: invalid conversion from 'int (*)(int, int)' to 'zend_result (*)(int, int)' {aka 'ZEND_RESULT_CODE (*)(int, int)'} [-fpermissive]
     };
     ^
/opt/m/phpx/include/phpx.h:1794:5: error: invalid conversion from 'int (*)(int, int)' to 'zend_result (*)(int, int)' {aka 'ZEND_RESULT_CODE (*)(int, int)'} [-fpermissive]
/opt/m/phpx/include/phpx.h:1794:5: error: invalid conversion from 'int (*)(int, int)' to 'zend_result (*)(int, int)' {aka 'ZEND_RESULT_CODE (*)(int, int)'} [-fpermissive]
/opt/m/phpx/include/phpx.h:1794:5: error: invalid conversion from 'int (*)(int, int)' to 'zend_result (*)(int, int)' {aka 'ZEND_RESULT_CODE (*)(int, int)'} [-fpermissive]
make[2]: *** [CMakeFiles/phpx_static.dir/build.make:63: CMakeFiles/phpx_static.dir/src/array.o] Error 1
make[1]: *** [CMakeFiles/Makefile2:68: CMakeFiles/phpx_static.dir/all] Error 2
make[1]: *** Waiting for unfinished jobs....
[ 22%] Building CXX object CMakeFiles/phpx.dir/src/exec.o
make[2]: *** [CMakeFiles/phpx.dir/build.make:63: CMakeFiles/phpx.dir/src/array.o] Error 1
make[2]: *** Waiting for unfinished jobs....
make[2]: *** [CMakeFiles/phpx.dir/build.make:89: CMakeFiles/phpx.dir/src/class.o] Error 1
make[2]: *** [CMakeFiles/phpx.dir/build.make:76: CMakeFiles/phpx.dir/src/base.o] Error 1
In file included from /opt/m/phpx/src/exec.cc:17:
/opt/m/phpx/include/phpx.h: In member function 'php::String php::Array::join(php::String&)':
/opt/m/phpx/include/phpx.h:1049:37: error: cannot convert 'zval*' {aka '_zval_struct*'} to 'HashTable*' {aka '_zend_array*'}
         php_implode(delim.ptr(), ptr(), retval.ptr());
                                  ~~~^~
In file included from /usr/local/php8/include/php/ext/standard/php_standard.h:19,
                 from /opt/m/phpx/include/phpx.h:46,
                 from /opt/m/phpx/src/exec.cc:17:
/usr/local/php8/include/php/ext/standard/php_string.h:56:62: note:   initializing argument 2 of 'void php_implode(const zend_string*, HashTable*, zval*)'
 PHPAPI void php_implode(const zend_string *delim, HashTable *arr, zval *return_value);
                                                   ~~~~~~~~~~~^~~
In file included from /usr/local/php8/include/php/Zend/zend.h:33,
                 from /usr/local/php8/include/php/main/php.h:31,
                 from /opt/m/phpx/include/phpx.h:21,
                 from /opt/m/phpx/src/exec.cc:17:
/opt/m/phpx/include/phpx.h: In member function 'bool php::Array::sort()':
/opt/m/phpx/include/phpx.h:1059:50: error: invalid conversion from 'int (*)(const void*, const void*)' to 'bucket_compare_func_t' {aka 'int (*)(_Bucket*, _Bucket*)'} [-fpermissive]
         return zend_hash_sort(Z_ARRVAL_P(ptr()), array_data_compare, 1) == SUCCESS;
                                                  ^~~~~~~~~~~~~~~~~~
/usr/local/php8/include/php/Zend/zend_hash.h:272:35: note: in definition of macro 'zend_hash_sort'
  zend_hash_sort_ex(ht, zend_sort, compare_func, renumber)
                                   ^~~~~~~~~~~~
/usr/local/php8/include/php/Zend/zend_hash.h:268:108: note:   initializing argument 3 of 'void zend_hash_sort_ex(HashTable*, sort_func_t, bucket_compare_func_t, zend_bool)'
 ZEND_API void  ZEND_FASTCALL zend_hash_sort_ex(HashTable *ht, sort_func_t sort_func, bucket_compare_func_t compare_func, zend_bool renumber);
                                                                                      ~~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~
In file included from /opt/m/phpx/src/exec.cc:17:
/opt/m/phpx/include/phpx.h:1059:73: error: no match for 'operator==' (operand types are 'void' and 'ZEND_RESULT_CODE')
         return zend_hash_sort(Z_ARRVAL_P(ptr()), array_data_compare, 1) == SUCCESS;
/opt/m/phpx/include/phpx.h: In destructor 'php::ArgInfo::~ArgInfo()':
/opt/m/phpx/include/phpx.h:1174:17: error: 'ZEND_TYPE_IS_CLASS' was not declared in this scope
             if (ZEND_TYPE_IS_CLASS(info[i].type))
                 ^~~~~~~~~~~~~~~~~~
/opt/m/phpx/include/phpx.h:1174:17: note: suggested alternative: 'ZEND_TYPE_HAS_CLASS'
             if (ZEND_TYPE_IS_CLASS(info[i].type))
                 ^~~~~~~~~~~~~~~~~~
                 ZEND_TYPE_HAS_CLASS
In file included from /usr/local/php8/include/php/Zend/zend.h:30,
                 from /usr/local/php8/include/php/main/php.h:31,
                 from /opt/m/phpx/include/phpx.h:21,
                 from /opt/m/phpx/src/exec.cc:17:
/opt/m/phpx/include/phpx.h:1176:39: error: invalid cast from type 'zend_type' to type 'void*'
                 efree((void* )info[i].type);
                                       ^~~~
/usr/local/php8/include/php/Zend/zend_alloc.h:161:34: note: in definition of macro 'efree'
 #define efree(ptr)       _efree((ptr) ZEND_FILE_LINE_CC ZEND_FILE_LINE_EMPTY_CC)
                                  ^~~
In file included from /opt/m/phpx/src/exec.cc:17:
/opt/m/phpx/include/phpx.h: In member function 'void php::ArgInfo::add(const char*, const char*, int, bool, bool, bool)':
/opt/m/phpx/include/phpx.h:1195:36: error: no matching function for call to 'zend_type::zend_type(char*&)'
                 type = (zend_type) _s;
                                    ^~
In file included from /usr/local/php8/include/php/Zend/zend.h:27,
                 from /usr/local/php8/include/php/main/php.h:31,
                 from /opt/m/phpx/include/phpx.h:21,
                 from /opt/m/phpx/src/exec.cc:17:
/usr/local/php8/include/php/Zend/zend_types.h:134:3: note: candidate: 'zend_type::zend_type()'
 } zend_type;
   ^~~~~~~~~
/usr/local/php8/include/php/Zend/zend_types.h:134:3: note:   candidate expects 0 arguments, 1 provided
/usr/local/php8/include/php/Zend/zend_types.h:134:3: note: candidate: 'constexpr zend_type::zend_type(const zend_type&)'
/usr/local/php8/include/php/Zend/zend_types.h:134:3: note:   no known conversion for argument 1 from 'char*' to 'const zend_type&'
/usr/local/php8/include/php/Zend/zend_types.h:134:3: note: candidate: 'constexpr zend_type::zend_type(zend_type&&)'
/usr/local/php8/include/php/Zend/zend_types.h:134:3: note:   no known conversion for argument 1 from 'char*' to 'zend_type&&'
In file included from /usr/local/php8/include/php/Zend/zend.h:30,
                 from /usr/local/php8/include/php/main/php.h:31,
                 from /opt/m/phpx/include/phpx.h:21,
                 from /opt/m/phpx/src/exec.cc:17:
/usr/local/php8/include/php/Zend/zend_alloc.h:170:80: error: no matching function for call to 'zend_type::zend_type(char*)'
 #define estrdup(s)       _estrdup((s) ZEND_FILE_LINE_CC ZEND_FILE_LINE_EMPTY_CC)
                                                                                ^
/opt/m/phpx/include/phpx.h:1199:36: note: in expansion of macro 'estrdup'
                 type = (zend_type) estrdup(class_name);
                                    ^~~~~~~
In file included from /usr/local/php8/include/php/Zend/zend.h:27,
                 from /usr/local/php8/include/php/main/php.h:31,
                 from /opt/m/phpx/include/phpx.h:21,
                 from /opt/m/phpx/src/exec.cc:17:
/usr/local/php8/include/php/Zend/zend_types.h:134:3: note: candidate: 'zend_type::zend_type()'
 } zend_type;
   ^~~~~~~~~
/usr/local/php8/include/php/Zend/zend_types.h:134:3: note:   candidate expects 0 arguments, 1 provided
/usr/local/php8/include/php/Zend/zend_types.h:134:3: note: candidate: 'constexpr zend_type::zend_type(const zend_type&)'
/usr/local/php8/include/php/Zend/zend_types.h:134:3: note:   no known conversion for argument 1 from 'char*' to 'const zend_type&'
/usr/local/php8/include/php/Zend/zend_types.h:134:3: note: candidate: 'constexpr zend_type::zend_type(zend_type&&)'
/usr/local/php8/include/php/Zend/zend_types.h:134:3: note:   no known conversion for argument 1 from 'char*' to 'zend_type&&'
In file included from /opt/m/phpx/src/exec.cc:17:
/opt/m/phpx/include/phpx.h:1204:20: error: 'ZEND_TYPE_ENCODE' was not declared in this scope
             type = ZEND_TYPE_ENCODE(type_hint, allow_null);
                    ^~~~~~~~~~~~~~~~
/opt/m/phpx/include/phpx.h:1204:20: note: suggested alternative: 'ZEND_TYPE_CE'
             type = ZEND_TYPE_ENCODE(type_hint, allow_null);
                    ^~~~~~~~~~~~~~~~
                    ZEND_TYPE_CE
/opt/m/phpx/include/phpx.h:1207:52: error: too many initializers for 'zend_internal_arg_info' {aka '_zend_internal_arg_info'}
         { name, type, pass_by_reference, variadic, };
                                                    ^
/opt/m/phpx/include/phpx.h: In member function 'zend_internal_arg_info* php::ArgInfo::get()':
/opt/m/phpx/include/phpx.h:1227:18: error: 'zend_internal_arg_info' {aka 'struct _zend_internal_arg_info'} has no member named 'pass_by_reference'
         _info[0].pass_by_reference = return_reference;
                  ^~~~~~~~~~~~~~~~~
In file included from /opt/m/phpx/src/exec.cc:17:
/opt/m/phpx/include/phpx.h: In function 'void php::throwException(const char*, const char*, int)':
/opt/m/phpx/include/phpx.h:1302:43: error: expected ')' before 'TSRMLS_CC'
     zend_throw_exception(ce, message, code TSRMLS_CC);
                         ~                 ^~~~~~~~~~
                                           )
In file included from /opt/m/phpx/include/phpx.h:34,
                 from /opt/m/phpx/src/exec.cc:17:
/opt/m/phpx/include/phpx.h: In member function 'php::Variant php::Object::callParentMethod(const char*)':
/opt/m/phpx/include/phpx.h:1359:43: error: cannot convert 'zval*' {aka '_zval_struct*'} to 'zend_object*' {aka '_zend_object*'}
         zend_call_method_with_0_params(ptr(), Z_OBJCE_P(ptr())->parent, NULL, func, retval.ptr());
                                        ~~~^~
/usr/local/php8/include/php/Zend/zend_interfaces.h:44:19: note: in definition of macro 'zend_call_method_with_0_params'
  zend_call_method(obj, obj_ce, fn_proxy, function_name, sizeof(function_name)-1, retval, 0, NULL, NULL)
                   ^~~
In file included from /opt/m/phpx/include/phpx.h:34,
                 from /opt/m/phpx/src/exec.cc:17:
/usr/local/php8/include/php/Zend/zend_interfaces.h:41:46: note:   initializing argument 1 of 'zval* zend_call_method(zend_object*, zend_class_entry*, zend_function**, const char*, size_t, zval*, uint32_t, zval*, zval*)'
 ZEND_API zval* zend_call_method(zend_object *object, zend_class_entry *obj_ce, zend_function **fn_proxy, const char *function_name, size_t function_name_len, zval *retval, uint32_t param_count, zval* arg1, zval* arg2);
                                 ~~~~~~~~~~~~~^~~~~~
In file included from /opt/m/phpx/include/phpx.h:34,
                 from /opt/m/phpx/src/exec.cc:17:
/opt/m/phpx/include/phpx.h: In member function 'php::Variant php::Object::callParentMethod(const char*, const php::Variant&)':
/opt/m/phpx/include/phpx.h:1365:43: error: cannot convert 'zval*' {aka '_zval_struct*'} to 'zend_object*' {aka '_zend_object*'}
         zend_call_method_with_1_params(ptr(), Z_OBJCE_P(ptr())->parent, NULL, func, retval.ptr(),
                                        ~~~^~
/usr/local/php8/include/php/Zend/zend_interfaces.h:47:19: note: in definition of macro 'zend_call_method_with_1_params'
  zend_call_method(obj, obj_ce, fn_proxy, function_name, sizeof(function_name)-1, retval, 1, arg1, NULL)
                   ^~~
In file included from /opt/m/phpx/include/phpx.h:34,
                 from /opt/m/phpx/src/exec.cc:17:
/usr/local/php8/include/php/Zend/zend_interfaces.h:41:46: note:   initializing argument 1 of 'zval* zend_call_method(zend_object*, zend_class_entry*, zend_function**, const char*, size_t, zval*, uint32_t, zval*, zval*)'
 ZEND_API zval* zend_call_method(zend_object *object, zend_class_entry *obj_ce, zend_function **fn_proxy, const char *function_name, size_t function_name_len, zval *retval, uint32_t param_count, zval* arg1, zval* arg2);
                                 ~~~~~~~~~~~~~^~~~~~
In file included from /opt/m/phpx/include/phpx.h:34,
                 from /opt/m/phpx/src/exec.cc:17:
/opt/m/phpx/include/phpx.h: In member function 'php::Variant php::Object::callParentMethod(const char*, const php::Variant&, const php::Variant&)':
/opt/m/phpx/include/phpx.h:1373:43: error: cannot convert 'zval*' {aka '_zval_struct*'} to 'zend_object*' {aka '_zend_object*'}
         zend_call_method_with_2_params(ptr(), Z_OBJCE_P(ptr())->parent, NULL, func, retval.ptr(),
                                        ~~~^~
/usr/local/php8/include/php/Zend/zend_interfaces.h:50:19: note: in definition of macro 'zend_call_method_with_2_params'
  zend_call_method(obj, obj_ce, fn_proxy, function_name, sizeof(function_name)-1, retval, 2, arg1, arg2)
                   ^~~
In file included from /opt/m/phpx/include/phpx.h:34,
                 from /opt/m/phpx/src/exec.cc:17:
/usr/local/php8/include/php/Zend/zend_interfaces.h:41:46: note:   initializing argument 1 of 'zval* zend_call_method(zend_object*, zend_class_entry*, zend_function**, const char*, size_t, zval*, uint32_t, zval*, zval*)'
 ZEND_API zval* zend_call_method(zend_object *object, zend_class_entry *obj_ce, zend_function **fn_proxy, const char *function_name, size_t function_name_len, zval *retval, uint32_t param_count, zval* arg1, zval* arg2);
                                 ~~~~~~~~~~~~~^~~~~~
In file included from /opt/m/phpx/src/exec.cc:17:
/opt/m/phpx/include/phpx.h: In member function 'php::Variant php::Object::get(const char*)':
/opt/m/phpx/include/phpx.h:1400:66: error: cannot convert 'zval*' {aka '_zval_struct*'} to 'zend_object*' {aka '_zend_object*'}
         zval *member_p = zend_read_property(Z_OBJCE_P(ptr()), ptr(), name, strlen(name), 0, &rv);
                                                               ~~~^~
In file included from /usr/local/php8/include/php/main/php.h:35,
                 from /opt/m/phpx/include/phpx.h:21,
                 from /opt/m/phpx/src/exec.cc:17:
/usr/local/php8/include/php/Zend/zend_API.h:407:73: note:   initializing argument 2 of 'zval* zend_read_property(zend_class_entry*, zend_object*, const char*, size_t, zend_bool, zval*)'
 ZEND_API zval *zend_read_property(zend_class_entry *scope, zend_object *object, const char *name, size_t name_length, zend_bool silent, zval *rv);
                                                            ~~~~~~~~~~~~~^~~~~~
In file included from /opt/m/phpx/src/exec.cc:17:
/opt/m/phpx/include/phpx.h: In member function 'void php::Object::set(const char*, const php::Variant&)':
/opt/m/phpx/include/phpx.h:1413:51: error: cannot convert 'zval*' {aka '_zval_struct*'} to 'zend_object*' {aka '_zend_object*'}
         zend_update_property(Z_OBJCE_P(ptr()), ptr(), name, strlen(name), const_cast<Variant &>(v).ptr());
                                                ~~~^~
In file included from /usr/local/php8/include/php/main/php.h:35,
                 from /opt/m/phpx/include/phpx.h:21,
                 from /opt/m/phpx/src/exec.cc:17:
/usr/local/php8/include/php/Zend/zend_API.h:387:74: note:   initializing argument 2 of 'void zend_update_property(zend_class_entry*, zend_object*, const char*, size_t, zval*)'
 ZEND_API void zend_update_property(zend_class_entry *scope, zend_object *object, const char *name, size_t name_length, zval *value);
                                                             ~~~~~~~~~~~~~^~~~~~
In file included from /opt/m/phpx/src/exec.cc:17:
/opt/m/phpx/include/phpx.h: In member function 'void php::Object::set(const char*, php::Array&)':
/opt/m/phpx/include/phpx.h:1417:51: error: cannot convert 'zval*' {aka '_zval_struct*'} to 'zend_object*' {aka '_zend_object*'}
         zend_update_property(Z_OBJCE_P(ptr()), ptr(), name, strlen(name), v.ptr());
                                                ~~~^~
In file included from /usr/local/php8/include/php/main/php.h:35,
                 from /opt/m/phpx/include/phpx.h:21,
                 from /opt/m/phpx/src/exec.cc:17:
/usr/local/php8/include/php/Zend/zend_API.h:387:74: note:   initializing argument 2 of 'void zend_update_property(zend_class_entry*, zend_object*, const char*, size_t, zval*)'
 ZEND_API void zend_update_property(zend_class_entry *scope, zend_object *object, const char *name, size_t name_length, zval *value);
                                                             ~~~~~~~~~~~~~^~~~~~
In file included from /opt/m/phpx/src/exec.cc:17:
/opt/m/phpx/include/phpx.h: In member function 'void php::Object::set(const char*, std::__cxx11::string&)':
/opt/m/phpx/include/phpx.h:1421:59: error: cannot convert 'zval*' {aka '_zval_struct*'} to 'zend_object*' {aka '_zend_object*'}
         zend_update_property_stringl(Z_OBJCE_P(ptr()), ptr(), name, strlen(name), v.c_str(), v.length());
                                                        ~~~^~
In file included from /usr/local/php8/include/php/main/php.h:35,
                 from /opt/m/phpx/include/phpx.h:21,
                 from /opt/m/phpx/src/exec.cc:17:
/usr/local/php8/include/php/Zend/zend_API.h:394:82: note:   initializing argument 2 of 'void zend_update_property_stringl(zend_class_entry*, zend_object*, const char*, size_t, const char*, size_t)'
 ZEND_API void zend_update_property_stringl(zend_class_entry *scope, zend_object *object, const char *name, size_t name_length, const char *value, size_t value_length);
                                                                     ~~~~~~~~~~~~~^~~~~~
In file included from /opt/m/phpx/src/exec.cc:17:
/opt/m/phpx/include/phpx.h: In member function 'void php::Object::set(const char*, std::__cxx11::string)':
/opt/m/phpx/include/phpx.h:1425:59: error: cannot convert 'zval*' {aka '_zval_struct*'} to 'zend_object*' {aka '_zend_object*'}
         zend_update_property_stringl(Z_OBJCE_P(ptr()), ptr(), name, strlen(name), v.c_str(), v.length());
                                                        ~~~^~
In file included from /usr/local/php8/include/php/main/php.h:35,
                 from /opt/m/phpx/include/phpx.h:21,
                 from /opt/m/phpx/src/exec.cc:17:
/usr/local/php8/include/php/Zend/zend_API.h:394:82: note:   initializing argument 2 of 'void zend_update_property_stringl(zend_class_entry*, zend_object*, const char*, size_t, const char*, size_t)'
 ZEND_API void zend_update_property_stringl(zend_class_entry *scope, zend_object *object, const char *name, size_t name_length, const char *value, size_t value_length);
                                                                     ~~~~~~~~~~~~~^~~~~~
In file included from /opt/m/phpx/src/exec.cc:17:
/opt/m/phpx/include/phpx.h: In member function 'void php::Object::set(const char*, const char*)':
/opt/m/phpx/include/phpx.h:1429:58: error: cannot convert 'zval*' {aka '_zval_struct*'} to 'zend_object*' {aka '_zend_object*'}
         zend_update_property_string(Z_OBJCE_P(ptr()), ptr(), name, strlen(name), v);
                                                       ~~~^~
In file included from /usr/local/php8/include/php/main/php.h:35,
                 from /opt/m/phpx/include/phpx.h:21,
                 from /opt/m/phpx/src/exec.cc:17:
/usr/local/php8/include/php/Zend/zend_API.h:393:81: note:   initializing argument 2 of 'void zend_update_property_string(zend_class_entry*, zend_object*, const char*, size_t, const char*)'
 ZEND_API void zend_update_property_string(zend_class_entry *scope, zend_object *object, const char *name, size_t name_length, const char *value);
                                                                    ~~~~~~~~~~~~~^~~~~~
In file included from /opt/m/phpx/src/exec.cc:17:
/opt/m/phpx/include/phpx.h: In member function 'void php::Object::set(const char*, int)':
/opt/m/phpx/include/phpx.h:1433:56: error: cannot convert 'zval*' {aka '_zval_struct*'} to 'zend_object*' {aka '_zend_object*'}
         zend_update_property_long(Z_OBJCE_P(ptr()), ptr(), name, strlen(name), v);
                                                     ~~~^~
In file included from /usr/local/php8/include/php/main/php.h:35,
                 from /opt/m/phpx/include/phpx.h:21,
                 from /opt/m/phpx/src/exec.cc:17:
/usr/local/php8/include/php/Zend/zend_API.h:390:79: note:   initializing argument 2 of 'void zend_update_property_long(zend_class_entry*, zend_object*, const char*, size_t, zend_long)'
 ZEND_API void zend_update_property_long(zend_class_entry *scope, zend_object *object, const char *name, size_t name_length, zend_long value);
                                                                  ~~~~~~~~~~~~~^~~~~~
In file included from /opt/m/phpx/src/exec.cc:17:
/opt/m/phpx/include/phpx.h: In member function 'void php::Object::set(const char*, long int)':
/opt/m/phpx/include/phpx.h:1437:56: error: cannot convert 'zval*' {aka '_zval_struct*'} to 'zend_object*' {aka '_zend_object*'}
         zend_update_property_long(Z_OBJCE_P(ptr()), ptr(), name, strlen(name), v);
                                                     ~~~^~
In file included from /usr/local/php8/include/php/main/php.h:35,
                 from /opt/m/phpx/include/phpx.h:21,
/usr/local/php8/include/php/Zend/zend_API.h:390:79: note:   initializing argument 2 of 'void zend_update_property_long(zend_class_entry*, zend_object*, const char*, size_t, zend_long)'
 ZEND_API void zend_update_property_long(zend_class_entry *scope, zend_object *object, const char *name, size_t name_length, zend_long value);
In file included from /opt/m/phpx/src/exec.cc:17:
/opt/m/phpx/include/phpx.h:1441:58: error: cannot convert 'zval*' {aka '_zval_struct*'} to 'zend_object*' {aka '_zend_object*'}
                                                       ~~~^~
In file included from /usr/local/php8/include/php/main/php.h:35,
                 from /opt/m/phpx/include/phpx.h:21,
                 from /opt/m/phpx/src/exec.cc:17:
/usr/local/php8/include/php/Zend/zend_API.h:391:81: note:   initializing argument 2 of 'void zend_update_property_double(zend_class_entry*, zend_object*, const char*, size_t, double)'
 ZEND_API void zend_update_property_double(zend_class_entry *scope, zend_object *object, const char *name, size_t name_length, double value);
                                                                    ~~~~~~~~~~~~~^~~~~~
In file included from /opt/m/phpx/src/exec.cc:17:
/opt/m/phpx/include/phpx.h: In member function 'void php::Object::set(const char*, float)':
/opt/m/phpx/include/phpx.h:1445:58: error: cannot convert 'zval*' {aka '_zval_struct*'} to 'zend_object*' {aka '_zend_object*'}
         zend_update_property_double(Z_OBJCE_P(ptr()), ptr(), name, strlen(name), (double) v);
                                                       ~~~^~
In file included from /usr/local/php8/include/php/main/php.h:35,
                 from /opt/m/phpx/include/phpx.h:21,
                 from /opt/m/phpx/src/exec.cc:17:
/usr/local/php8/include/php/Zend/zend_API.h:391:81: note:   initializing argument 2 of 'void zend_update_property_double(zend_class_entry*, zend_object*, const char*, size_t, double)'
 ZEND_API void zend_update_property_double(zend_class_entry *scope, zend_object *object, const char *name, size_t name_length, double value);
                                                                    ~~~~~~~~~~~~~^~~~~~
In file included from /opt/m/phpx/src/exec.cc:17:
/opt/m/phpx/include/phpx.h: In member function 'void php::Object::set(const char*, bool)':
/opt/m/phpx/include/phpx.h:1449:56: error: cannot convert 'zval*' {aka '_zval_struct*'} to 'zend_object*' {aka '_zend_object*'}
         zend_update_property_bool(Z_OBJCE_P(ptr()), ptr(), name, strlen(name), v ? 1 : 0);
                                                     ~~~^~
In file included from /usr/local/php8/include/php/main/php.h:35,
                 from /opt/m/phpx/include/phpx.h:21,
                 from /opt/m/phpx/src/exec.cc:17:
/usr/local/php8/include/php/Zend/zend_API.h:389:79: note:   initializing argument 2 of 'void zend_update_property_bool(zend_class_entry*, zend_object*, const char*, size_t, zend_long)'
 ZEND_API void zend_update_property_bool(zend_class_entry *scope, zend_object *object, const char *name, size_t name_length, zend_long value);
                                                                  ~~~~~~~~~~~~~^~~~~~
In file included from /opt/m/phpx/src/exec.cc:17:
/opt/m/phpx/include/phpx.h: At global scope:
/opt/m/phpx/include/phpx.h:1584:16: error: 'ZEND_ACC_DTOR' was not declared in this scope
     DESTRUCT = ZEND_ACC_DTOR,
                ^~~~~~~~~~~~~
/opt/m/phpx/include/phpx.h:1584:16: note: suggested alternative: 'ZEND_ACC_CTOR'
     DESTRUCT = ZEND_ACC_DTOR,
                ^~~~~~~~~~~~~
                ZEND_ACC_CTOR
/opt/m/phpx/include/phpx.h: In member function 'bool php::Interface::activate()':
/opt/m/phpx/include/phpx.h:1748:51: error: expected ')' before 'TSRMLS_CC'
         ce = zend_register_internal_interface(&_ce TSRMLS_CC);
                                              ~    ^~~~~~~~~~
                                                   )
/opt/m/phpx/include/phpx.h: At global scope:
/opt/m/phpx/include/phpx.h:1794:5: error: invalid conversion from 'int (*)(int, int)' to 'zend_result (*)(int, int)' {aka 'ZEND_RESULT_CODE (*)(int, int)'} [-fpermissive]
     };
     ^
/opt/m/phpx/include/phpx.h:1794:5: error: invalid conversion from 'int (*)(int, int)' to 'zend_result (*)(int, int)' {aka 'ZEND_RESULT_CODE (*)(int, int)'} [-fpermissive]
/opt/m/phpx/include/phpx.h:1794:5: error: invalid conversion from 'int (*)(int, int)' to 'zend_result (*)(int, int)' {aka 'ZEND_RESULT_CODE (*)(int, int)'} [-fpermissive]
/opt/m/phpx/include/phpx.h:1794:5: error: invalid conversion from 'int (*)(int, int)' to 'zend_result (*)(int, int)' {aka 'ZEND_RESULT_CODE (*)(int, int)'} [-fpermissive]
make[2]: *** [CMakeFiles/phpx.dir/build.make:102: CMakeFiles/phpx.dir/src/exec.o] Error 1
make[1]: *** [CMakeFiles/Makefile2:105: CMakeFiles/phpx.dir/all] Error 2
make: *** [Makefile:130: all] Error 2

PHP 7.3: make -j 4 報錯

System:

  • OS: Arch Linux, Linux Kernel 4.20.13
  • cmake: 3.13.4
  • gcc, g++: 8.2.1
  • phpize: PHP API Version 20180731, Zend Module Api No: 20180731, Zend Extension Api No: 320180731

Error Message:

Scanning dependencies of target phpx
[  9%] Building CXX object CMakeFiles/phpx.dir/src/exec.o
[ 18%] Building CXX object CMakeFiles/phpx.dir/src/class.o
[ 36%] Building CXX object CMakeFiles/phpx.dir/src/array.o
[ 36%] Building CXX object CMakeFiles/phpx.dir/src/base.o
/home/chivincent/tmp/phpx/src/class.cc: In member function 「bool php::Class::activate()」:
/home/chivincent/tmp/phpx/src/class.cc:226:75: 錯誤:too few arguments to function 「int zend_register_class_alias_ex(const char*, size_t, zend_class_entry*, int)」
if (zend_register_class_alias_ex(alias.c_str(), alias.length(), ce) < 0)
^
In file included from /usr/include/php/main/php.h:37,
from /home/chivincent/tmp/phpx/include/phpx.h:23,
from /home/chivincent/tmp/phpx/src/class.cc:19:
/usr/include/php/Zend/zend_API.h:289:14: 附註:declared here
ZEND_API int zend_register_class_alias_ex(const char *name, size_t name_len, zend_class_entry *ce, int persistent);
^~~~~~~~~~~~~~~~~~~~~~~~~~~~
/home/chivincent/tmp/phpx/src/base.cc: In function 「int php::validate_constant_array(HashTable*)」:
/home/chivincent/tmp/phpx/src/base.cc:74:13: 錯誤:「struct _zend_array::<unnamed union>::<unnamed>」 has no member named 「nApplyCount」
ht->u.v.nApplyCount++;
^~~~~~~~~~~
/home/chivincent/tmp/phpx/src/base.cc:84:46: 錯誤:「struct _zend_array::<unnamed union>::<unnamed>」 has no member named 「nApplyCount」
if (Z_ARRVAL_P(val)->u.v.nApplyCount > 0)
^~~~~~~~~~~
/home/chivincent/tmp/phpx/src/base.cc:106:13: 錯誤:「struct _zend_array::<unnamed union>::<unnamed>」 has no member named 「nApplyCount」
ht->u.v.nApplyCount--;
^~~~~~~~~~~
/home/chivincent/tmp/phpx/src/base.cc: In function 「bool php::define(const char*, const php::Variant&, bool)」:
/home/chivincent/tmp/phpx/src/base.cc:211:26: 錯誤:「zend_constant」 {aka 「struct _zend_constant」} has no member named 「flags」
register_constant: c.flags = case_sensitive ? CONST_CS : 0; /* non persistent */
^~~~~
/home/chivincent/tmp/phpx/src/base.cc:213:7: 錯誤:「zend_constant」 {aka 「struct _zend_constant」} has no member named 「module_number」
c.module_number = PHP_USER_CONSTANT;
^~~~~~~~~~~~~
/home/chivincent/tmp/phpx/src/base.cc: In function 「ZEND_RESULT_CODE php::_check_args_num(zend_execute_data*, int)」:
/home/chivincent/tmp/phpx/src/base.cc:342:82: 錯誤:too many arguments to function 「void zend_wrong_parameters_count_error(int, int)」
zend_wrong_parameters_count_error(1, num_args, min_num_args, max_num_args);
^
In file included from /usr/include/php/main/php.h:37,
from /home/chivincent/tmp/phpx/include/phpx.h:23,
from /home/chivincent/tmp/phpx/src/base.cc:19:
/usr/include/php/Zend/zend_API.h:701:39: 附註:declared here
ZEND_API ZEND_COLD void ZEND_FASTCALL zend_wrong_parameters_count_error(int min_num_args, int max_num_args);
^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
make[2]: *** [CMakeFiles/phpx.dir/build.make:89: CMakeFiles/phpx.dir/src/class.o] Error 1
make[2]: *** Waiting for unfinished jobs....
[ 45%] Building CXX object CMakeFiles/phpx.dir/src/extension.o
make[2]: *** [CMakeFiles/phpx.dir/build.make:76: CMakeFiles/phpx.dir/src/base.o] Error 1
/home/chivincent/tmp/phpx/src/extension.cc: In member function 「void php::Extension::registerIniEntries(int)」:
/home/chivincent/tmp/phpx/src/extension.cc:213:23: 警告:narrowing conversion of 「entry.php::Extension::IniEntry::modifiable」 from 「int」 to 「uint32_t」 {aka 「unsigned int」} inside { } [-Wnarrowing]
entry.modifiable, // modifiable
~~~~~~^~~~~~~~~~
/home/chivincent/tmp/phpx/src/extension.cc:214:17: 警告:narrowing conversion of 「(uint)entry.php::Extension::IniEntry::name.std::__cxx11::basic_string<char>::size()」 from 「uint」 {aka 「unsigned int」} to 「uint16_t」 {aka 「short unsigned int」} inside { } [-Wnarrowing]
(uint)entry.name.size(), // name_length
^~~~~~~~~~~~~~~~~~~~~~~
/home/chivincent/tmp/phpx/src/extension.cc:215:17: 警告:narrowing conversion of 「(uint)entry.php::Extension::IniEntry::default_value.std::__cxx11::basic_string<char>::size()」 from 「uint」 {aka 「unsigned int」} to 「uint8_t」 {aka 「unsigned char」} inside { } [-Wnarrowing]
(uint)entry.default_value.size(), // value_length
^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
make[1]: *** [CMakeFiles/Makefile2:73: CMakeFiles/phpx.dir/all] Error 2
make: *** [Makefile:130: all] Error 2

Errors 可能發生原因:

  1. zend_register_class_alias_ex 函式簽名改變:另外新增 int presistent 參數
  1. (_zend_array)hashTable->u.v.nApplyCount 未定義:改為 zend_uchar _unused
  1. _zend_constant 未包含 flagsmodule_number:使用 ZEND_CONSTANT_FLAGSZEND_CONSTANT_MODULE_NUMBER macro 計算 flasg 與 module_number
  1. zend_worng_parameters_count_error 函式簽名改變:不需再傳入 should_free 參數
  1. php_addslashes 函式簽名改變

Warnings 可能發生原因:

  1. _zend_ini_entry_def 結構內容改變

关于Variant计数管理设计

能否把Variant关于reference的逻辑直接干掉,统一走一致的引用计数管理?

    Variant(zval *v)
    {
        reference = false;
        ref_val = NULL;
        memcpy(&val, v, sizeof(zval));
        zval_add_ref(&val);
    }
    Variant(zval *v, bool ref)
    {
        ref_val = v;
        reference = ref;
    }

第二个构造函数引入了ref的概念,感觉很别扭。

问题是:能否直接干掉ref的设计,统一走zval的引用计数管理,这样会带来什么问题。

@matyhtf 辛苦解释下~

compile failed on windows with vs2017

Two errors occurred while compiling on win7:
phpx\src\class.cc(155): error C2440: “=”: 无法从“void (__cdecl *)(zend_execute_data *,zval *)”转换为“zif_handler”
phpx\src\extension.cc(169): error C2440: “=”: 无法从“void (__cdecl *)(zend_execute_data *,zval *)”转换为“zif_handler”

My env:
windows 7
php-7.3.22 TS
VS2017 (vc15)

phpdev需要的头文件都已经包含,编译预处理都已加过。vs2017新建工程然后把代码导入进来后者cmake转vs工程编译后都是一样的错误。

在macbookpro下面编译报错···

PHP-X/examples/cpp_ext~ make

c++ -DHAVE_CONFIG_H -g -o cpp_ext.so -O0 -fPIC -shared extension.cpp -std=c++11 -lphpx php-config --includes -Iphp-config --include-dir
Undefined symbols for architecture x86_64:
"___zend_malloc", referenced from:
php::Variant::Variant(char const*) in extension-21f5f7.o
php::String::String(char const*) in extension-21f5f7.o
"__array_init", referenced from:
php::Array::Array(php::Variant&) in extension-21f5f7.o

"__efree", referenced from:
php::String::~String() in extension-21f5f7.o
"__emalloc", referenced from:
php::Variant::Variant(char const*) in extension-21f5f7.o
php::String::String(char const*) in extension-21f5f7.o
"__zval_ptr_dtor", referenced from:
php::Variant::~Variant() in extension-21f5f7.o
"_add_index_zval", referenced from:
php::Array::set(int, php::Variant) in extension-21f5f7.o
"_zend_fetch_resource", referenced from:
php::String* php::Variant::toResourcephp::String(char const*) in extension-21f5f7.o
"_zend_read_property", referenced from:
php::Object::get(char const*) in extension-21f5f7.o
"_zend_register_resource", referenced from:
php::Variant php::newResourcephp::String(char const*, php::String*) in extension-21f5f7.o
"_zend_update_property", referenced from:
php::Object::set(char const*, php::Variant&) in extension-21f5f7.o
"_zval_add_ref", referenced from:
php::Variant::addRef() in extension-21f5f7.o
ld: symbol(s) not found for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)
make: *** [cpp_ext.so] Error 1

php-fpm下php::global("_SERVER")获取全局变量值为false

在PHP-X中使用php::global获取_SERVER变量,cli方式调用可拿到数据,php-fpm下调用返回false。
代码如下:
c++:

PHPX_FUNCTION(test) {
    Variant global_server_v = php::global("_SERVER");
    retval = global_server_v;
}

php:

$test = test();
var_dump($test);

PS: php-fpm方式下的_GET变量可正常获取,只是_SERVER获取不到。

扩展调用

我没有找到怎么调用另外的扩展,比如我想在我的扩展中调用swoole扩展,或者php自带的数组扩展。

Unable to load dynamic library cpp_ext.so

HI I tried all the options given above but couldnt able to resolve my issue.

here is the details.

[root@centos6x8-lnmp cpp_ext]# cat /etc/redhat-release 
CentOS release 6.8 (Final)

[root@centos6x8-lnmp cpp_ext]# php --version
PHP 7.1.0 (cli) (built: Apr 16 2017 12:16:13) ( NTS )
Copyright (c) 1997-2016 The PHP Group
Zend Engine v3.1.0-dev, Copyright (c) 1998-2016 Zend Technologies
    with Zend OPcache v7.1.0, Copyright (c) 1999-2016, by Zend Technologies

[root@centos6x8-lnmp cpp_ext]# php --ini
Configuration File (php.ini) Path: /usr/local/php7/lib
Loaded Configuration File:         /usr/local/php7/lib/php.ini
Scan for additional .ini files in: (none)
Additional .ini files parsed:      (none)

[root@centos6x8-lnmp cpp_ext]# php -i | grep extension
extension_dir => /usr/local/php7/lib/php/extensions/no-debug-non-zts-20160303 => /usr/local/php7/lib/php/extensions/no-debug-non-zts-20160303

[root@centos6x8-lnmp cpp_ext]# vim /usr/local/php7/lib/php.ini
# add extension
extension = cpp_ext.so

[root@centos6x8-lnmp cpp_ext]# ll /usr/local/php7/lib/php/extensions/no-debug-non-zts-20160303/cpp_ext.so 
-rwxr-xr-x 1 root root 497495 6月  20 00:55 /usr/local/php7/lib/php/extensions/no-debug-non-zts-20160303/cpp_ext.so

[root@centos6x8-lnmp cpp_ext]# php echo.php 
PHP Warning:  PHP Startup: Unable to load dynamic library '/usr/local/php7/lib/php/extensions/no-debug-non-zts-20160303/cpp_ext.so' - libphpx.so: cannot open shared object file: No such file or directory in Unknown on line 0

ArchLinux 上安装, libphpx.so 拷贝位置错误

在 ArchLinux 上执行:

bruce@Arch ~/s/PHP-X> sudo make install
[100%] Built target phpx
Install the project...
-- Install configuration: "Release"
Are you run command using root user?
-- Up-to-date: /usr/local/lib/libphpx.so
-- Up-to-date: /usr/local/include/phpx.h
-- Up-to-date: /usr/local/include/phpx_embed.h

拷贝的目标地址是 /usr/local/lib/libphpx.so
设置好 php.ini 后,执行 php -m,报警告信息:

PHP Warning:  PHP Startup: Unable to load dynamic library '/usr/lib/php/modules/cpp_ext.so' - libphpx.so: cannot open shared object file: No such file or directory in Unknown on line 0

执行:

sudo cp /usr/local/lib/libphpx.so /usr/lib/

即可解决。

能否更新一下swoole.com上的文档呢?

如题 感觉文档很久没更新了 内置函数中很多函数都没提到

比如php::exec php::call php::define等
即使无法更新用法 能否创建一下条目呢? 不创建条目的话 开发者连有哪些函数都不知道啊

[centos]使用php-x开发扩展的demo

我使用的环境是centos7/php7.1;
由于个人环境差异,命令应该不完全一致,本文目的是提供端到端的流程,加以命令的说明,供大家参考:

安装基本组件:
yum install -y cmake git gcc gcc-c++ wget

有个环境碰到gcc版本过低的问题,所以升级了gcc (可选):

yum install centos-release-scl-rh centos-release-scl
yum check-update
yum install devtoolset-4-gcc  devtoolset-4-gcc-c++
source /opt/rh/devtoolset-4/enable

下载php-x代码:
git clone https://github.com/swoole/PHP-X.git

进入目录
cd PHP-X

cmake带上php-config路径(使用php-config可以查看自己的路径)
cmake -DPHP_CONFIG_DIR=/usr/bin

make&&make install

make -j 4
sudo make install

添加动态链接库(和很多人一样,卡这里比较久)

echo /usr/local/lib>>/etc/ld.so.conf
ldconfig

以上php-x算安装完毕了。
下面编译个demo扩展:

cd examples/cpp_ext
make 
make install

配置扩展到php ini中:
echo extension=cpp_ext.so>/etc/php.d/99-cppext.ini

重启php-fpm:
systemctl restart php-fpm.service

完毕。此时phpinfo中已经可以看到 cpp_ext 这个扩展。

make -j 4编译时报错【php7.1.7 centos7.5】

make -j 4编译时报错【php7.1.7 centos7.5】,标错信息如下

[ 10%] [ 20%] Building CXX object CMakeFiles/phpx.dir/src/array.o
[ 30%] Building CXX object CMakeFiles/phpx.dir/src/base.o
Building CXX object CMakeFiles/phpx.dir/src/class.o
In file included from /root/PHP-X/src/array.cc:19:0:
/root/PHP-X/include/phpx.h:23:17: fatal error: php.h: No such file or directory
#include "php.h"
^
compilation terminated.
[ 40%] In file included from /root/PHP-X/src/class.cc:19:0:
/root/PHP-X/include/phpx.h:23:17: fatal error: php.h: No such file or directory
#include "php.h"
^
compilation terminated.
Building CXX object CMakeFiles/phpx.dir/src/exec.o
In file included from /root/PHP-X/src/base.cc:19:0:
/root/PHP-X/include/phpx.h:23:17: fatal error: php.h: No such file or directory
#include "php.h"
^
compilation terminated.
make[2]: *** [CMakeFiles/phpx.dir/src/array.o] Error 1
make[2]: *** Waiting for unfinished jobs....
In file included from /root/PHP-X/src/exec.cc:19:0:
/root/PHP-X/include/phpx.h:23:17: fatal error: php.h: No such file or directory
#include "php.h"
^
compilation terminated.
make[2]: *** [CMakeFiles/phpx.dir/src/class.o] Error 1
make[2]: *** [CMakeFiles/phpx.dir/src/base.o] Error 1
make[2]: *** [CMakeFiles/phpx.dir/src/exec.o] Error 1
make[1]: *** [CMakeFiles/phpx.dir/all] Error 2
make: *** [all] Error 2

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.