# an-processor **Repository Path**: chopins/an-processor ## Basic Information - **Project Name**: an-processor - **Description**: An Processor - **Primary Language**: Unknown - **License**: AGPL-3.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2023-10-09 - **Last Updated**: 2023-12-01 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # an-processor #### 介绍 An PHP processor #### 文件后缀 * `.ap` 源码脚本 * `.apo` opcode脚本 ### 变量作用域 * 作用域是指一个代码块。目前仅指所有类型函数的内部、类方法的内部。 * 全局变量,使用 `global` 关键字申明的变量,在所有脚本与所有作用域有效,可直接使用。类似PHP超全局变量`$_SERVER`,`$_POST` * 局部变量,在作用域内申明的变量,仅在作用域内有效,作用域外不可使用 * 局外变量,在作用域外申明的变量,仅在所有作用域外有效,可在作用域外直接使用。作用域内使用`outside` 关键字导入。类似PHP全局变量,使用`global`导入 ### 类型 * `int` 32位整数 * `long` 64位整数 * `bigint` 128位整数 * 标量数组:`int[]`, `long[]`, `bigint[]`,`string[]`,`float[]`,`bool[]` * 对象数组,`Object[]`,其中 `Object` 为类名 #### 关键字变更 | 序号 | php | An Processor | 描述 | | ---- | ----------------- | ----------------------- | ---------------------------------------------------- | | 1 | `include` | __Deleted__ | | | 2 | `include_once` | __Deleted__ | | | 3 | `require` | `include*` | 错误将抛异常 | | 4 | `require_once` | `include` | 错误将抛异常 | | 5 | `or` | | | | 6 | `xor` | | | | 7 | `and` | | | | 8 | `print` | | | | 9 | `yield` | | | | 10 | `yield from` | | | | 11 | `instanceof` | `is` | 可全部类型检查 | | 12 | `new` | | | | 13 | `clone` | | | | 14 | `exit` | | | | 15 | `if` | | | | 16 | `elseif` | | | | 17 | `else` | | | | 18 | `endif` | __Deleted__ | | | 19 | `echo` | __Deleted__ | | | 20 | `do` | | | | 21 | `while` | __Deleted__ | 用 `for(expr)`代替` | | 22 | `endwhile` | __Deleted__ | | | 23 | `for` | | | | 24 | `endfor` | __Deleted__ | | | 25 | `foreach` | __Deleted__ | 用`for(expr as var : var)`代替 | | 26 | `endforeach` | __Deleted__ | | | 27 | `declare` | | | | 28 | `enddeclare` | __Deleted__ | | | 29 | `as` | | | | 30 | `switch` | | | | 31 | `endswitch` | __Deleted__ | | | 32 | `case` | | | | 33 | `default` | | | | 34 | `match` | | | | 35 | `break` | | | | 36 | `continue` | | | | 37 | `goto` | | | | 38 | `function` | | | | 39 | `fn` | __Deleted__ | | | 40 | `const` | | | | 41 | `return` | | | | 42 | `try` | | | | 43 | `catch` | | | | 44 | `finally` | | | | 45 | `throw` | | | | 46 | `use` | | | | 47 | `insteadof` | `>>>` | | | 48 | `global` | `outside` | 改称局外变量 | | 49 | `static` | | | | 50 | `abstract` | | | | 51 | `final` | | | | 52 | `private` | `my` | | | 53 | `protected` | `our` | 类同样可申明为`our`,仅允许同命名空间及以下空间可调用 | | 54 | `public` | `any` | | | 55 | `readonly` | | | | 56 | `var` | | 增加声明为结构局部变量 | | 57 | `unset` | | | | 58 | `isset` | | | | 59 | `empty` | | | | 60 | `__halt_compiler` | | | | 61 | `class` | | | | 62 | `trait` | | | | 63 | `interface` | | | | 64 | `enum` | | | | 65 | `extends` | `+` | | | 66 | `implements` | `:` | | | 67 | `namespace` | | | | 68 | `list` | __Deleted__ | | | 69 | `array` | | | | 70 | `callable` | | | | 71 | `__LINE__` | `Object::__LINE__` | | | 72 | `__FILE__` | `Object::__FILE__` | | | 73 | `__DIR__` | `Object::__DIR__` | | | 74 | `__CLASS__` | `Object::__CLASS__` | | | 75 | `__TRAIT__` | `Object::__TRAIT__` | | | 76 | `__METHOD__` | `Object::__METHOD__` | | | 77 | `__FUNCTION__` | `Object::__FUNCTION__` | | | 78 | `__NAMESPACE__` | `Object::__NAMESPACE__` | | | 79 | `async` | __NEW__ | 异步操作关键字 | #### 符号变更 | 序号 | php | An Processor | 描述 | | ---- | ----------- | ------------ | ------------ | | 1 | `#[` | `@` | | | 2 | `+=` | | | | 3 | `-=` | | | | 4 | `*=` | | | | 5 | `/=` | | | | 6 | `.=` | `#=` | | | 7 | `%=` | | | | 8 | `&=` | | | | 9 | `\|=` | | | | 10 | `^=` | | | | 11 | `<<=` | | | | 12 | `>>=` | | | | 13 | `??=` | | | | 14 | `\|\|` | __Deleted__ | | | 15 | `&&` | __Deleted__ | | | 16 | `==` | | | | 17 | `!=` | | | | 18 | `===` | | | | 19 | `!==` | | | | 20 | `<=` | | | | 21 | `>=` | | | | 22 | `<=>` | | | | 23 | `<<` | | | | 24 | `>>` | | | | 25 | `++` | | | | 26 | `--` | | | | 27 | `->` | `.` | | | 28 | `?->` | `?.` | | | 29 | `=>` | `:` | | | 30 | `` | __Deleted__ | | | 32 | `::` | | | | 33 | `\` | `.` | | | 34 | `...` | | | | 35 | `??` | | | | 36 | `**` | | | | 37 | `**=` | | | | 38 | `&` | | | | 39 | `.` | `#` | | | 40 | `//` | | | | 41 | `/* */` | | | | 42 | `#` | __Deleted__ | 哈希注释删除 | | 43 | `=` | | | | 44 | `\|` | | | | 45 | `+` | | | | 46 | `-` | | | | 47 | `*` | | | | 48 | `/` | | | | 49 | `%` | | | | 50 | `!` | | | | 51 | `~` | | | | 52 | `? :` | | | | 53 | `@` | `@@` | | | 54 | ``` ` ` ``` | __Deleted__ | | | 55 | `^` | | | #### 预定义类变更 | 序号 | php | An Processor | 描述 | | ---- | -------- | ------------ | ---- | | 1 | self | my | | | 2 | stdClass | Object | | #### 预定义变量变更 | 序号 | php | An Processor | 描述 | | ---- | ------- | ------------ | ---- | | 1 | `$this` | `$my` | | #### 类方法声明删除 `function` 关键字,可见性修饰符不可省略 ```php //原PHP class A { public function method() {} } //An Processor 变更为 class A { public method(){} } ``` #### 新增类魔术方法申明简写模式 1. 省略可见性修饰符 `public` 2. 不为 `mixed` 类型时,类型已声明 3. 静态魔术方法可省略 `static` 关键字 4. 不可添加 `fianl`, `abstract`, `readonly`关键字 | 序号 | php | An Processor | 描述 | | ---- | ------------------------------------------------ | --------------------------------- | ------------ | | 1 | `__construct()` | 不可简写 | | | 2 | `__destruct()` | 不可简写 | | | 3 | `__call(string $name, array $args): mixed` | `call($name, $args): mixed` | | | 4 | `__callStatic(string $name, array $args): mixed` | `callStatic($name, $args): mixed` | 省略`static` | | 5 | `__get(string $name, mixed $value): void` | `get($name, mixed $value)` | | | 6 | `__set(string $name): mixed` | `set($name): mixed` | | | 7 | `__isset(string $name): bool` | `isset($name)` | | | 8 | `__unset(string $name): void` | `unset($name)` | | | 9 | `__sleep(): array` | `sleep()` | | | 10 | `__wakeup(): void` | `wakeup()` | | | 11 | `__serialize(): array` | `serialize()` | | | 12 | `__unserialize(array $data): void ` | `unserialize($data)` | | | 13 | `__toString(): string` | `toString()` | | | 14 | `__invoke(): mixed` | `invoke(): mixed` | | | 15 | `__set_state(array $properties): object` | `export($properties)` | 省略`static` | | 16 | `__clone()` | 不可简写 | | | 17 | `__debugInfo(): array` | `dump()` | | #### 异步循环函数 1. 异步函数采用解释器执行OPCODE循环间隔来完成,类似PHP tick事件。 2. 异步函数执行事件,在每个执行代码块开始与结束时将触发**异步函数执行事件**。具体如下: * 任何地方的函数、类方法的执行开始前与结束时触发 * 进入`for`前执行一次,以后每执行一次后触发。 * 流程控制结构在进入与离开结构时触发 * 脚本关闭时触发,然后清除所有未返回的异步函数 * 异步函数调用结束后并不会触发 * 直到异步函数被清除前,异步函数将会在每次事件触发时被调用 * 异步循环函数调用与普通函数调用一样 * 类方法同一可以被声明为异步循环函数 3. 语法格式:`async function async_function() { }` 1. 异步函数会返回一个`Async`类实例 2. `async` 异步函数声明关键字 3. 异步函数可以使用 `return` 返回一个值,同时将清除异步函数 4. 在异步函数内,使用 `continue $return;` 来结束本次执行,并返回`$return`值,异步函数不会被清除,等待下一执行点继续被调用执行 5. 异步函数未使用`return` 返回时,等效`return` 返回 `null`; 6. `clear(): bool` 清除异步函数调用 7. `getReturn(): array` 获取所有返回值,为多次返回值组成的数组 8. `static wait(): void` 静态方法,阻塞等待当前调用栈内所有异步调用直到全部结束 9. `isCleared(): bool` 是否被清理,包括在脚本最后被清理,均返回`true` 10. `isReturn(): bool` 是否执行结束,当使用`return`返回时为`true`,其他为`false` 11. `static suspend(mixed $value): mixed` 挂起异步函数,挂起的异步函数同样会在脚本最后会清除 12. `resume(mixed $vaue): mixed` 恢复已挂起的异步函数 13. `isSuspended(): bool` 异步函数是否被挂起 14. `trown(Throwable $exception): mixed` 当异步函数挂起时,在挂起位置抛出异常 ```php async function async_function() { static $i = 1; $i++; if($i % 2) { continue $i; } else if($i >= 1000) { return $i; } } $a = async_function(); Async::wait(); $a.getReturn();//all return value $a.clear(); async function timeout($start_time, $time) { if($start_time - time() >= $time) { echo "30秒后执行"; return true; } } timeout(time(), 30);//30秒后输出文本 ```