protected function underscore($name) { if (isset(self::$underscoreCache[$name])) { return self::$underscoreCache[$name]; } $result = strtolower(preg_replace('/(.)([A-Z])/', '$1_$2', $name)); self::$underscoreCache[$name] = $result; return $result; }