在寫一個開源框架,忽然發現php在多進程時執行的邏輯出現異常,導致子進程無法執行信號處理函數。經過一系列debug,發現php文件的靜態引入造成了bug的發生,而使用動態加載類文件將會有效的解決這個bug,具體代碼如下:
<?php
define("TOP_AUTOLOADER_PATH", dirname(__FILE__));
class Autoloader{
/**
* 類庫自動加載,寫死路徑,確保不加載其他文件。
* @param string $class 對象類名
* @return void
*/
public static function autoload($class) {
$name = $class;
if(false !== strpos($name,'\\')){
$name = explode('\\',$class);
$name = array_pop($name);
}
//這裏因工程目錄結構而定
$filename = TOP_AUTOLOADER_PATH."/lib/".$name.".php";
if(is_file($filename)) {
include $filename;
return;
}
}
}
spl_autoload_register('Autoloader::autoload');
至於原因暫時未明,先記錄一下這個坑。