Kohana:无法重新声明 class
Kohana: Cannot redeclare class
无法在 Kohana 中启动项目。我从 github 克隆了它,然后在配置文件中设置我的数据库信息并收到错误:无法重新声明 class.
我有两种自动加载函数的方法。
public static function auto_load($class, $directory = 'classes')
{
// Transform the class name according to PSR-0
$class = ltrim($class, '\');
$file = '';
$namespace = '';
if ($last_namespace_position = strripos($class, '\'))
{
$namespace = substr($class, 0, $last_namespace_position);
$class = substr($class, $last_namespace_position + 1);
$file = str_replace('\', DIRECTORY_SEPARATOR, $namespace).DIRECTORY_SEPARATOR;
}
$file .= str_replace('_', DIRECTORY_SEPARATOR, $class);
if ($path = Kohana::find_file($directory, $file))
{
// Load the class file
require_once $path;
// Class has been found
return TRUE;
}
// Class is not in the filesystem
return FALSE;
}
/**
* Provides auto-loading support of classes that follow Kohana's old class
* naming conventions.
*
* This is included for compatibility purposes with older modules.
*
* @param string $class Class name
* @param string $directory Directory to load from
* @return boolean
*/
public static function auto_load_lowercase($class, $directory = 'classes')
{
// Transform the class name into a path
$file = str_replace('_', DIRECTORY_SEPARATOR, strtolower($class));
if ($path = Kohana::find_file($directory, $file))
{
// Load the class file
require_once $path;
// Class has been found
return TRUE;
}
// Class is not in the filesystem
return FALSE;
}
我尝试在 require() 之前添加 class_exists() 但它不起作用&我应该如何开始一个项目?
可能需要 class 已包含在其他一些文件中。
我不知道你是如何检查 class 碰撞问题的,但你应该这样做:
function include_quietly($file) {
$conflicts = false;
$txt = file_get_contents($file);
preg_match_all("#class\s+(\w+)\s*{#muis", $txt, $matches, PREG_SET_ORDER);
foreach ($matches as $m) {
if (class_exists($m[1])) {
$conflicts = true;
break;
}
}
if (!$conflicts)
include_once $file;
else
echo "include conflicts in file {$file}\n";
}
include_quietly($path);
无法在 Kohana 中启动项目。我从 github 克隆了它,然后在配置文件中设置我的数据库信息并收到错误:无法重新声明 class.
我有两种自动加载函数的方法。
public static function auto_load($class, $directory = 'classes')
{
// Transform the class name according to PSR-0
$class = ltrim($class, '\');
$file = '';
$namespace = '';
if ($last_namespace_position = strripos($class, '\'))
{
$namespace = substr($class, 0, $last_namespace_position);
$class = substr($class, $last_namespace_position + 1);
$file = str_replace('\', DIRECTORY_SEPARATOR, $namespace).DIRECTORY_SEPARATOR;
}
$file .= str_replace('_', DIRECTORY_SEPARATOR, $class);
if ($path = Kohana::find_file($directory, $file))
{
// Load the class file
require_once $path;
// Class has been found
return TRUE;
}
// Class is not in the filesystem
return FALSE;
}
/**
* Provides auto-loading support of classes that follow Kohana's old class
* naming conventions.
*
* This is included for compatibility purposes with older modules.
*
* @param string $class Class name
* @param string $directory Directory to load from
* @return boolean
*/
public static function auto_load_lowercase($class, $directory = 'classes')
{
// Transform the class name into a path
$file = str_replace('_', DIRECTORY_SEPARATOR, strtolower($class));
if ($path = Kohana::find_file($directory, $file))
{
// Load the class file
require_once $path;
// Class has been found
return TRUE;
}
// Class is not in the filesystem
return FALSE;
}
我尝试在 require() 之前添加 class_exists() 但它不起作用&我应该如何开始一个项目?
可能需要 class 已包含在其他一些文件中。 我不知道你是如何检查 class 碰撞问题的,但你应该这样做:
function include_quietly($file) {
$conflicts = false;
$txt = file_get_contents($file);
preg_match_all("#class\s+(\w+)\s*{#muis", $txt, $matches, PREG_SET_ORDER);
foreach ($matches as $m) {
if (class_exists($m[1])) {
$conflicts = true;
break;
}
}
if (!$conflicts)
include_once $file;
else
echo "include conflicts in file {$file}\n";
}
include_quietly($path);