serafim/castxml

此包已被弃用,不再维护。作者建议使用 php-ffi/ide-helper-generator 包。

PHP 的 CastXml 包装器

dev-master / 1.0.x-dev 2023-08-10 23:55 UTC

This package is auto-updated.

Last update: 2023-08-10 23:56:32 UTC


README

!!! 此包已弃用,请使用 https://github.com/php-ffi/ide-helper-generator 代替

CastXML PHP 包装器

CastXML 是一种用于输出 C 家族抽象语法树 XML 工具。

此项目由 Kitware 维护,以支持 ITK,即 Insight Segmentation and Registration Toolkit。

安装

库可以使用 Composer 依赖管理器安装到任何 PHP 应用程序中。

  • composer require serafim/castxml

为了访问库,请确保将 vendor/autoload.php 包含在您的文件中。

<?php

require __DIR__ . '/vendor/autoload.php';

二进制文件

别忘了安装二进制依赖项。如果您正在寻找预构建的二进制文件或构建此项目的紧凑方式,请参阅 CastXMLSuperbuild

此外,某些操作系统支持使用依赖管理器安装,例如

$ sudo apt update
$ apt install castxml

用法

要创建新的 CastXML,您可以使用可能的选项之一。

$castxml = new \Serafim\CastXml\CastXml();

// OR

$binary = '/path/to/binary/castxml';
$castxml = new \Serafim\CastXml\CastXml($binary);

Windows OS 也受支持,只需在 PATH 变量中写入 CastXML 的路径或将 castxml.exe 的路径添加到类构造函数中。

可用性检查

有关一切是否正常的信息,请简单地使用可访问性 isAvailable() 方法。

$castxml = new \Serafim\CastXml\CastXml();

$available = $castxml->isAvailable();

// - bool(true)  - CastXML is available
// - bool(false) - CastXML is not available

版本

要获取版本信息,请使用方法 getVersion()getClangVersion()

$castxml = new \Serafim\CastXml\CastXml();

echo $castxml->getVersion();
// For example: "0.4.2"

echo $castxml->getClangVersion();
// For example: "11.0.0"

解析

要解析原始头文件,只需使用 parse() 方法。该方法需要一个必需的 $pathname 参数和一个可选的 $cwd 字符串参数。

$castxml = new \Serafim\CastXml\CastXml();

$result = $castxml->parse('/path/to/header.h');
// OR
$result = $castxml->parse('/path/to/header.h', '/path/to/working_directory');

结果,您将获得一个 Serafim\CastXml\Result 对象。

$castxml = new \Serafim\CastXml\CastXml();
$result = $castxml->parse('/path/to/header.h');

echo $result->getContents(); // XML output
// OR
echo $result; // Same XML output

结果保存

$castxml = new \Serafim\CastXml\CastXml();
$result = $castxml->parse('/path/to/header.h');

// Save to file
$result->saveAs('/path/to/filename.xml');

// Save into directory
$result->saveIn('/path/to/directory');

结果解析

$castxml = new \Serafim\CastXml\CastXml();
$result = $castxml->parse('/path/to/header.h');

// Using SimpleXML
//  - ext-simplexml required
$simplexml = $result->toXml();

// Using XML Reader
//  - ext-xmlreader required
$reader = $result->toXmlReader();

// Using DOMDocument
//  - ext-dom required
$ast = $result->toDomDocument();

结果 PHP 类型

$castxml = new \Serafim\CastXml\CastXml();
$result = $castxml->parse('/path/to/header.h');

foreach ($result as $type) {
    var_dump($type);
}