PHP教程

PHP runkit7函数

runkit7 是一个 PHP 扩展,提供了修改常量、用户定义的函数和类的能力。此外,它还允许创建自定义的超全局变量。该软件包是 runkit 软件包的一个分支,专门为提供PHP 7支持而设计。本教程主要介绍了PHP runkit7的相关函数和使用方法。

一、运行时配置

runkit.superglobal 字符串:以逗号分隔的变量名列表,以超全局变量的形式处理。 此值应在系统范围的 php.ini 文件中设置,但可能有效 在 perdir 配置上下文中,具体取决于您的 SAPI。

示例:在 php.ini 中使用 runkit.superglobal=_FOO,_BAR 自定义超级全局

<?php
function show_values() {
echo "Foo is $_FOO\n";
echo "Bar is $_BAR\n";
echo "Baz is $_BAZ\n";
}
$_FOO = 'foo';
$_BAR = 'bar';
$_BAZ = 'baz';
/* Displays foo and bar, but not baz */
show_values();
?>

runkit.internal_override 布尔值:启用修改/重命名/删除内部功能的功能。

二、预定义常量

下列常量由此扩展定义,且仅在此扩展编译入 PHP 或在运行时动态载入时可用:

  • RUNKIT7_IMPORT_FUNCTIONS (int):runkit7_import() 标志,表示应从指定文件导入常规函数;
  • RUNKIT7_IMPORT_CLASS_METHODS (int):表示应从指定文件中导入类方法的 runkit7_import() 标志;
  • RUNKIT7_IMPORT_CLASS_CONSTS (int):表示应从指定文件中导入类常量的 runkit7_import() 标志;
  • RUNKIT7_IMPORT_CLASS_PROPS (int):表示应从指定文件中导入类标准属性的 runkit7_import() 标志;
  • RUNKIT7_IMPORT_CLASS_STATIC_PROPS (int):runkit7_import() 标志,表示应从指定文件中导入类的静态属性,自 Runkit 1.0.1 起可用;
  • RUNKIT7_IMPORT_CLASSES (int):runkit7_import() 标志,表示 RUNKIT7_IMPORT_CLASS_* 常量的 bitwise OR;
  • RUNKIT7_IMPORT_OVERRIDE (int):runkit7_import() 标志, 表示如果任何已导入的函数、 方法、 常量或属性已经存在, 则应将其替换为新定义。如果未设置此标志,则会丢弃任何已存在的导入定义;
  • RUNKIT7_ACC_RETURN_REFERENCE (int):包含此标志可使创建或重新声明的函数或方法返回引用;
  • RUNKIT7_ACC_PUBLIC (int):用于 runkit7_method_add() 和 runkit7_method_redefine() 的标志,使方法成为公共方法;
  • RUNKIT7_ACC_PROTECTED (int):用于 runkit7_method_add() 和 runkit7_method_redefine() 使方法受保护的标志;
  • RUNKIT7_ACC_PRIVATE (int):用于 runkit7_method_add() 和 runkit7_method_redefine() 将方法设为私有的标志;
  • RUNKIT7_ACC_STATIC (int):用于 runkit7_method_add() 和 runkit7_method_redefine() 使方法成为静态方法的标志;
  • RUNKIT7_FEATURE_MANIPULATION (int):如果启用了运行时操作,则值为 1,否则为 0;
  • RUNKIT7_FEATURE_SUPERGLOBALS (int):如果启用了自定义 superglobals,则值为 1,否则值为 0;
  • RUNKIT7_FEATURE_SANDBOX (int):始终为 0,因为在 php 7 中实现沙箱功能不切实际。

三、runkit7函数

1、runkit7_​constant_​add

runkit7_constant_add — 类似于 define(),但也允许在类定义中定义,使用方法:

runkit7_constant_add(string $constant_name, mixed $value, int $newVisibility = ?): bool

2、runkit7_​constant_​redefine

重新定义已定义的常量,使用方法:

runkit7_constant_redefine(string $constant_name, mixed $value, int $new_visibility = ?): bool

3、runkit7_​constant_​remove

移除/删除已定义的常量,使用方法:

runkit7_constant_remove(string $constant_name): bool

4、runkit7_​function_​add

添加一个新函数,类似于 create_function(),使用方法:

runkit7_function_add(
string $function_name,
string $argument_list,
string $code,
bool $return_by_reference = null,
string $doc_comment = null,
string $return_type = ?,
bool $is_strict = ?
): bool
runkit7_function_add(
string $function_name,
Closure $closure,
string $doc_comment = null,
string $return_type = ?,
bool $is_strict = ?
): bool

5、runkit7_​function_​copy

将函数复制到新的函数名称,使用方法:

runkit7_function_copy(string $source_name, string $target_name): bool

6、runkit7_​function_​redefine

用新的实现替换函数定义,使用方法:

runkit7_function_redefine(
string $function_name,
string $argument_list,
string $code,
bool $return_by_reference = null,
string $doc_comment = null,
string $return_type = ?,
bool $is_strict = ?
): bool
runkit7_function_redefine(
string $function_name,
Closure $closure,
string $doc_comment = null,
string $return_type = ?,
bool $is_strict = ?
): bool

注意:默认情况下,仅在用户空间可删除,重命名,或者修改函数。为了覆盖内部函数,必须启用 php.ini 中的 runkit.internal_override 设置。

7、runkit7_​function_​remove

删除函数定义,使用方法:

runkit7_function_remove(string $function_name): bool

8、runkit7_​function_​rename

更改函数的名称,使用方法:

runkit7_function_rename(string $source_name, string $target_name): bool

注意: 默认情况下,仅在用户空间可删除,重命名,或者修改函数。 为了覆盖内部函数,必须启用 php.ini 中的 runkit.internal_override 设置。

9、runkit7_​import

处理 PHP 文件导入函数和类定义,并在适当的情况下覆盖,使用方法:

runkit7_import(string $filename, int $flags = ?): bool

10、runkit7_​method_​add

动态地向给定类添加新方法,使用方法:

runkit7_method_add(
string $class_name,
string $method_name,
string $argument_list,
string $code,
int $flags = RUNKIT7_ACC_PUBLIC,
string $doc_comment = null,
string $return_type = ?,
bool $is_strict = ?
): bool
runkit7_method_add(
string $class_name,
string $method_name,
Closure $closure,
int $flags = RUNKIT7_ACC_PUBLIC,
string $doc_comment = null,
string $return_type = ?,
bool $is_strict = ?
): bool

11、runkit7_​method_​copy

将方法从类复制到另一个类,使用方法:

runkit7_method_copy(
string $destination_class,
string $destination_method_name,
string $source_class,
string $source_method_name = ?
): bool

12、runkit7_​method_​redefine

动态更改给定方法的代码,使用方法:

runkit7_method_redefine(
string $class_name,
string $method_name,
string $argument_list,
string $code,
int $flags = RUNKIT7_ACC_PUBLIC,
string $doc_comment = null,
string $return_type = ?,
bool $is_strict = ?
): bool
runkit7_method_redefine(
string $class_name,
string $method_name,
Closure $closure,
int $flags = RUNKIT7_ACC_PUBLIC,
string $doc_comment = null,
string $return_type = ?,
bool $is_strict = ?
): bool

13、runkit7_​method_​remove

动态删除给定的方法,使用方法:

runkit7_method_remove(string $class_name, string $method_name): bool

14、runkit7_​method_​rename

动态更改给定方法的名称,使用方法:

runkit7_method_rename(string $class_name, string $source_method_name, string $target_method_name): bool

15、runkit7_​object_​id

返回给定对象的整数对象句柄,使用方法:

runkit7_object_id(object $obj): int

16、runkit7_​superglobals

返回已注册的超全局变量的数字索引数组,使用方法:

runkit7_superglobals(): array

17、runkit7_​zval_​inspect

返回有关传入值的信息,包括数据类型、引用计数等,使用方法:

runkit7_zval_inspect(string $value): array
广告合作
QQ群号:707632017

温馨提示:

1、本网站发布的内容(图片、视频和文字)以原创、转载和分享网络内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。邮箱:2942802716#qq.com。(#改为@)

2、本站原创内容未经允许不得转裁,转载请注明出处“站长百科”和原文地址。

目录