第9章 Bootstrap 2026年09月12日 东塬一老翁 第三篇 SAI Framework Core第9章 Bootstrap本章大纲Bootstrap 定义框架启动过程环境初始化自动加载配置加载Container 初始化Application 创建Central 初始化Individual 初始化Bootstrap 执行顺序完整代码启动测试9.1 Bootstrap 定义Bootstrap 可以理解为 SAI Framework 的启动引导程序。它不是 Individual也不是 Central更不是 Cognition、Reasoning 或 Decision。Bootstrap 的主要任务是环境准备↓自动加载↓配置加载↓Container 初始化↓Individual 初始化↓Central 初始化↓Application 创建↓Application 初始化↓Application 启动因此Bootstrap 负责把一个尚未运行的 PHP 程序逐步建立成为可以运行的 SAI Framework Runtime。可以把它理解成Bootstrap│├── PHP环境├── Autoload├── Config├── Container├── Individual├── Central└── Application│▼RunningBootstrap 本身不负责模拟人工智能。它只是负责启动人工个体运行所需要的基础环境和对象。9.2 框架启动过程一个 SAI Framework 程序不能直接从Individual开始运行。首先必须建立运行环境。完整过程可以表示为PHP Runtime↓Bootstrap↓Autoload↓Configuration↓Container↓Individual↓Central↓Application↓Initialize↓Start↓Run如果是 Web 环境则可能是Web Server↓public/index.php↓bootstrap.php↓Application↓Individual↓Central↓SAI Runtime如果不是 Web也可以CLI↓bootstrap.php↓Application↓Individual↓Central因此 Bootstrap 不属于 Web 专属机制。9.3 环境初始化Bootstrap 首先需要准备 PHP 运行环境。例如error_reporting(E_ALL);ini_set(display_errors, 1);开发环境可以打开错误显示error_reporting(E_ALL);ini_set(display_errors, 1);生产环境则通常应该关闭直接输出错误ini_set(display_errors, 0);Bootstrap 还可以准备基础路径配置路径Storage路径Extension路径日志路径运行环境时区错误处理异常处理例如date_default_timezone_set(Asia/Shanghai);于是环境初始化可以形成Bootstrap│├── Error├── Timezone├── Path├── Storage└── Runtime9.4 自动加载SAI Framework 使用大量 PHP Class。例如SAI\Core\ApplicationSAI\Core\ContainerSAI\Central\CentralSAI\Individual\IndividualSAI\Memory\MemorySAI\Reasoning\Reasoning如果每一个 Class 都手动require_once ...项目会非常复杂。因此 Bootstrap 建立自动加载机制。PHP 可以使用spl_autoload_register()例如spl_autoload_register(function ($class) {$prefix SAI\\;if (strpos($class, $prefix) ! 0) {return;}$relative substr($class, strlen($prefix));$file __DIR__. /app/. str_replace(\\, /, $relative). .php;if (is_file($file)) {require_once $file;}});例如use SAI\Individual\Individual;当 PHP 使用new Individual();自动加载器会寻找app/Individual/Individual.php因此Namespace↓Class↓Autoload↓PHP File↓Class Loaded自动加载的意义不是 SAI 智能机制而是PHP 工程基础设施。9.5 配置加载Bootstrap 第二个重要任务是加载 Framework 配置。例如config/└── app.php配置?phpreturn array(name SAI Framework,version 0.1.0,debug true);Bootstrap$config require __DIR__ . /config/app.php;得到$config例如echo $config[name];结果SAI Framework配置可以包括Framework名称版本DebugStorage路径日志路径Extension配置Individual配置运行模式配置的作用是告诉 Framework 应该以什么运行环境和参数启动。配置本身不是知识也不是 Memory。9.6 Container 初始化Container 是 Framework 的对象和服务管理容器。它可以负责保存ApplicationIndividualCentralMemoryCognitionReasoningDecisionBehavior等对象。一个最简单的 Container?phpnamespace SAI\Core;class Container{protected $items array();public function set($name, $object){$this-items[$name] $object;}public function get($name){if (isset($this-items[$name])) {return $this-items[$name];}return null;}public function has($name){return isset($this-items[$name]);}}Bootstrap$container new Container();然后$container-set(config, $config);之后可以$container-get(config);Container 的作用是创建对象↓保存对象↓提供对象↓统一管理对象依赖但是必须注意Container 不负责认知不负责推理也不负责决策。它只是 Framework 的对象管理基础设施。9.7 Application 创建Bootstrap 完成基础环境以后需要创建 Application。Application 是 Framework Runtime 的运行载体。关系Bootstrap↓Application↓Individual↓CentralApplication 可以接收$config$container$individual$central例如$app new Application($config,$container,$individual,$central);这里需要注意Bootstrap 创建 Application不等于Application 创建 Individual在较清晰的架构中可以让 Bootstrap 或专门的 Factory/Manager 完成对象建立再交给 Application 管理。这样职责更加清楚。9.8 Central 初始化Central 是 Individual 的内部协调中心。Bootstrap 可以先创建$central new Central();Central 的职责是协调InformationPerceptionCognitionMemoryReasoningDecisionBehaviorLearningFeedback例如Central│┌──────────────┼──────────────┐▼ ▼ ▼Cognition Memory Reasoning│ │ │└──────────────┼──────────────┘▼Decision│▼BehaviorCentral 自己并不等于Cognition也不等于Reasoning它主要负责协调 Individual 内部各个功能模块的运行。9.9 Individual 初始化Individual 是 SAI Framework 最终要构建的对象。例如$individual new Individual(sai_001,Indoor SAI);创建以后Individual├── Identity├── State├── Ability├── Memory├── Cognition├── Learning└── Behavior当前简单示例可能只有IDNameState但完整 SAI Individual 会逐渐增加MemoryCognitionReasoningDecisionBehaviorLearningAbilityBootstrap 的任务不是实现这些能力而是准备 Individual 对象↓交给 Application↓进入 Runtime9.10 Bootstrap 执行顺序Bootstrap 的执行顺序非常重要。推荐顺序① 环境初始化↓② 自动加载↓③ 配置加载↓④ Container 创建↓⑤ Individual 创建↓⑥ Central 创建↓⑦ Application 创建↓⑧ Application 初始化↓⑨ Application 启动↓⑩ Application 运行完整表示PHP│▼Bootstrap│├── Environment│├── Autoload│├── Config│├── Container│├── Individual│├── Central│└── Application│▼Initialize│▼Start│▼Run这个顺序形成Bootstrap → Application → Individual → Central需要进一步区分Bootstrap负责启动 Framework。Application负责管理 Runtime。Individual是模拟人工个体。Central负责 Individual 内部协调。9.11 完整代码下面给出一个教程级完整示例。注意下面代码用于说明第9章 Bootstrap 的结构和执行顺序。它是教程示例不代表当前已经在用户实际环境中创建或验证运行。目录sai-bootstrap-demo/│├── app/│ ├── Core/│ │ ├── Application.php│ │ └── Container.php│ ││ ├── Central/│ │ └── Central.php│ ││ └── Individual/│ └── Individual.php│├── config/│ └── app.php│├── bootstrap.php└── index.php9.11.1 Container.php?phpnamespace SAI\Core;class Container{protected $items array();public function set($name, $object){$this-items[$name] $object;}public function get($name){if (isset($this-items[$name])) {return $this-items[$name];}return null;}public function has($name){return isset($this-items[$name]);}}9.11.2 Individual.php?phpnamespace SAI\Individual;class Individual{protected $id;protected $name;protected $state;public function __construct($id, $name){$this-id $id;$this-name $name;$this-state created;}public function start(){$this-state running;}public function stop(){$this-state stopped;}public function getId(){return $this-id;}public function getName(){return $this-name;}public function getState(){return $this-state;}}9.11.3 Central.php?phpnamespace SAI\Central;class Central{protected $state;public function __construct(){$this-state created;}public function initialize(){$this-state initialized;}public function run(){$this-state running;}public function stop(){$this-state stopped;}public function getState(){return $this-state;}}9.11.4 Application.php?phpnamespace SAI\Core;class Application{protected $config;protected $container;protected $individual;protected $central;protected $state;public function __construct(array $config,Container $container,$individual,$central) {$this-config $config;$this-container $container;$this-individual $individual;$this-central $central;$this-state created;}public function initialize(){$this-central-initialize();$this-state initialized;}public function start(){$this-individual-start();$this-central-run();$this-state running;}public function stop(){$this-central-stop();$this-individual-stop();$this-state stopped;}public function getState(){return $this-state;}}这里可以看到 Application 负责 Runtime 生命周期initialize()start()stop()而不是think()reason()decide()learn()这些属于 Individual 内部能力体系。9.11.5 config/app.php?phpreturn array(name SAI Framework,version 0.1.0,debug true);9.11.6 bootstrap.php这是本章最重要的文件。?phperror_reporting(E_ALL);ini_set(display_errors, 1);date_default_timezone_set(Asia/Shanghai);/** SAI Framework Autoload*/spl_autoload_register(function ($class) {$prefix SAI\\;if (strpos($class, $prefix) ! 0) {return;}$relative substr($class, strlen($prefix));$file __DIR__. /app/. str_replace(\\, /, $relative). .php;if (is_file($file)) {require_once $file;}});/** Load Configuration*/$config require __DIR__ . /config/app.php;/** Create Container*/$container new SAI\Core\Container();$container-set(config,$config);/** Create Individual*/$individual new SAI\Individual\Individual(sai_001,Indoor SAI);/** Create Central*/$central new SAI\Central\Central();/** Create Application*/$app new SAI\Core\Application($config,$container,$individual,$central);/** Register core objects*/$container-set(individual, $individual);$container-set(central, $central);$container-set(application, $app);这里的执行顺序就是Environment↓Autoload↓Config↓Container↓Individual↓Central↓Application↓Register Objects9.11.7 index.php?phprequire_once __DIR__ . /bootstrap.php;$app-initialize();$app-start();echo pre;echo Framework: . $config[name]. PHP_EOL;echo Version: . $config[version]. PHP_EOL;echo PHP_EOL;echo Application State: . $app-getState(). PHP_EOL;echo Individual ID: . $individual-getId(). PHP_EOL;echo Individual Name: . $individual-getName(). PHP_EOL;echo Individual State: . $individual-getState(). PHP_EOL;echo Central State: . $central-getState(). PHP_EOL;echo /pre;9.12 启动测试如果按照上面的目录建立示例可以进行 PHP 语法检查。例如php -l bootstrap.php然后php -l index.php再检查php -l app/Core/Application.phpphp -l app/Core/Container.phpphp -l app/Individual/Individual.phpphp -l app/Central/Central.phpphp -l config/app.php最后运行php index.php按照上述代码预期结果应该是Framework: SAI FrameworkVersion: 0.1.0Application State: runningIndividual ID: sai_001Individual Name: Indoor SAIIndividual State: runningCentral State: running这里的“预期”是根据代码逻辑推导出的结果不是本次实际运行验证结果。9.13 Bootstrap 与 Application 的关系现在可以把第8章和第9章连接起来。第8章Application解决Framework Runtime 如何运行第9章Bootstrap解决Application 从哪里来Framework 如何启动因此Bootstrap││ 创建▼Application│├── Individual│└── Central更完整Bootstrap│├── Environment│├── Autoload│├── Configuration│├── Container│├── Individual│├── Central│└── Application│▼initialize()│▼start()│▼run()9.14 Bootstrap 与 Individual 的关系Bootstrap 不应该成为 Individual 的智能核心。错误设计Bootstrap├── Cognition├── Reasoning├── Decision├── Learning└── Behavior这样会让 Bootstrap 变成一个巨大的程序入口。更合理Bootstrap↓Application↓Individual↓Central↓各功能模块因此 Bootstrap 只负责准备创建注册启动而 Individual 负责感知认知记忆推理决策行为反馈学习9.15 Bootstrap 的最终职责边界可以将 Bootstrap 的职责限定为Bootstrap│├── Environment├── Autoload├── Configuration├── Container├── Object Initialization├── Application Creation└── Runtime Startup不负责CognitionReasoningDecisionBehaviorLearningMemory这些应该由 SAI Framework 的其他模块完成。最终形成Bootstrap│Framework Startup│▼Application│▼Individual│Central│┌─────────────┼─────────────┐▼ ▼ ▼Cognition Memory Reasoning│ │ │└─────────────┼─────────────┘▼Decision│▼Behavior本章小结Bootstrap 是 SAI Framework 的启动引导层。它完成环境初始化↓自动加载↓配置加载↓Container↓Individual↓Central↓Application↓Initialize↓Start↓Run其中最重要的关系是Bootstrap↓Application↓Individual↓Central↓SAI Modules同时必须保持清晰的职责边界组件 核心职责Bootstrap 启动 FrameworkApplication 管理 RuntimeContainer 管理对象与依赖Individual 模拟人工个体Central 协调 Individual 内部模块Cognition 认知Memory 记忆Reasoning 推理Decision 决策Behavior 行为Learning 学习因此第8章 Application 解决了“运行什么”第9章 Bootstrap 解决了“如何启动”。下一步自然进入第10章 Container进一步解决对象如何注册对象如何获取对象之间如何依赖Individual 如何获得 Memory、Cognition、ReasoningContainer 如何管理 SAI Framework 内部对象这会把 Bootstrap 与 Framework 内部对象体系真正连接起来。
