
# PHP函数开发概述
FunctionGraph目前支持以下PHP运行环境。
- PHP 7.3
- PHP 8.3
#### PHP函数接口定义
PHP函数的接口定义如下所示：
```
function handler($event, $context)
```
- 入口函数名（$handler）：入口函数名称， 需和函数执行入口处用户自定义的入口函数名称一致。
- 执行事件（$event）：函数执行界面由用户输入的执行事件参数， 格式为JSON对象。
- 上下文环境（$context）：Runtime提供的函数执行上下文，其接口定义在[SDK接口]说明。
- 函数执行入口： index.handler。
PHP函数的函数执行入口参数格式为：**\[文件名\].\[函数名\]** ，请参考[函数执行入口](https://support.huaweicloud.com/devg-functiongraph/functiongraph_02_0460.html#functiongraph_02_0460__fig1011811497293)通过FunctionGraph控制台进行配置或修改。
#### PHP的initializer入口介绍
关于函数初始化入口Initializer的具体介绍请参考[函数初始化入口Initializer](https://support.huaweicloud.com/devg-functiongraph/functiongraph_02_0532.html)。
PHP函数的Initializer格式为：**\[文件名\].\[initializer名\]**
示例：创建函数时指定的initializer为main.my_initializer，那么FunctionGraph会去加载main.php中定义的my_initializer函数。
在函数工作流服务中使用PHP实现initializer接口，需要定义一个PHP函数作为initializer入口，一个最简单的initializer示例如下。
```
<?php
Function my_initializer($context) {
    echo 'hello world' . PHP_EOL;
    }
?>
```
- 函数名 my_initializer需要与实现initializer接口时的initializer字段相对应。
  示例：实现initializer接口时指定的Initializer入口为main.my_initializer，那么FunctionGraph会去加载main.php中定义的my_initializer函数。
  
- context参数 context参数中包含一些函数的运行时信息，例如：request id、临时AccessKey、function meta等。
  
 #### SDK接口
Context类中提供了许多上下文方法供用户使用，其声明和功能如所示。
表1Context类上下文方法说明 
| **方法名**                           | **方法说明**                                                                                                                                                                                                                                                          |
|:---|:---|
| getRequestID()                    | 获取请求ID。                                                                                                                                                                                                                                                           |
| getRemainingTimeInMilliSeconds () | 获取函数剩余运行时间。                                                                                                                                                                                                                                                       |
| getAccessKey()                    | 获取用户委托的AccessKey（有效期24小时），使用该方法需要为函数配置委托。 **当前函数工作流已停止维护Runtime SDK 中getAccessKey接口，您将无法使用getAccessKey获取临时AK。**                                                                                                             |
| getSecretKey()                    | 获取用户委托的SecretKey（有效期24小时），使用该方法需要为函数配置委托。 **当前函数工作流已停止维护Runtime SDK 中getSecretKey接口，您将无法使用getSecretKey获取临时SK。**                                                                                                            |
| getSecurityAccessKey()            | 获取用户委托的SecurityAccessKey（有效期24小时），缓存时间为10分钟，即10分钟内再次获取的返回内容相同，使用该方法需要为函数配置委托。                                                                                                                                                                                     |
| getSecuritySecretKey()            | 获取用户委托的SecuritySecretKey（有效期24小时），缓存时间为10分钟，即10分钟内再次获取的返回内容相同，使用该方法需要为函数配置委托。                                                                                                                                                                                     |
| getSecurityToken()                | 获取用户委托的SecurityToken（有效期24小时），缓存时间为10分钟，即10分钟内再次获取的返回内容相同，使用该方法需要为函数配置委托。                                                                                                                                                                                         |
| getUserData(string key)           | 通过key获取用户通过环境变量传入的值。                                                                                                                                                                                                                                              |
| getFunctionName()                 | 获取函数名称。                                                                                                                                                                                                                                                           |
| getRunningTimeInSeconds ()        | 获取函数超时时间。                                                                                                                                                                                                                                                         |
| getVersion()                      | 获取函数的版本。                                                                                                                                                                                                                                                          |
| getMemorySize()                   | 分配的内存。                                                                                                                                                                                                                                                            |
| getCPUNumber()                    | 获取函数占用的CPU资源。                                                                                                                                                                                                                                                     |
| getPackage()                      | 获取函数组。                                                                                                                                                                                                                                                            |
| getToken()                        | 获取用户委托的token（有效期24小时），使用该方法需要为函数配置委托。                                                                                                                                                                                                                             |
| getLogger()                       | 获取context提供的logger方法，返回一个日志输出类，通过使用其info方法按"时间-请求ID-输出内容"的格式输出日志。 如调用info方法输出日志： $logger = $context-\>getLogger(); $logger-\>info("hello"); |
| getAlias()                        | 获取函数的别名                                                                                                                                                                                                                                                           |
   
