ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

第9章 Bootstrap

第9章 Bootstrap 第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 内部对象体系真正连接起来。
返回列表