How to solve this error: Declaration error in Phalcon
How to solve this error: Declaration error in Phalcon
当我运行用Phalcon做一个简单的项目时,没问题。但是我要去 运行 另一个人写的另一个 Phalcon 项目,但我得到一个错误:致命错误:Core\Config::toArray() 的声明必须与 Phalcon\Config 兼容: :toArray(): C:\xampp\htdocs\phalcon\phalcon\apps\Core\Config.php
中的数组
找了很多都没有解决这个问题
Core\Config代码:
class Config extends \Phalcon\Config
{
public function toArray()
{
$configArray = parent::toArray();
unset($configArray['index']);
return $configArray;
}
}
Phalcon\Config代码:
class Loader
{
/**
* Load config from file extension dynamical
*
* @param string $filePath
*
* @return Config
* @throws Exception
*/
public static function load($filePath)
{
if (!is_file($filePath)) {
throw new Exception('Config file not found');
}
$extension = strtolower(
pathinfo(
$filePath,
PATHINFO_EXTENSION
)
);
switch ($extension) {
case 'ini':
return new Ini($filePath);
case 'json':
return new Json($filePath);
case 'php':
case 'php5':
case 'inc':
return new Php($filePath);
case 'yml':
case 'yaml':
return new Yaml($filePath);
default:
throw new Exception(
'Config adapter for .' . $extension . ' files is not support'
);
}
}
}
您的问题仅部分与 Phalcon 有关。错误本身直接是 PHP 的子错误。 https://3v4l.org/F8EfM
class Something {
public function toArray(): array
{
return [];
}
}
class SomethingElse extends Something {
public function toArray()
{
return [];
}
}
实际上,父 class 定义了一个 return 类型提示,但子没有。这些被认为是不相容的。为了修复它,子 class 必须与父具有相同的声明。 https://3v4l.org/b3BGR
class SomethingElse extends Something {
public function toArray(): array
{
return [];
}
}
现在,也就是说,我确实提到它仅 partially
适用于 Phalcon。核心错误是 PHP,但根本原因是您的 Phalcon 版本与代码库相比。也就是说,正在运行的项目没有这样的问题,或者它使用了与代码相关的正确版本的 Phalcon。失败的项目可能是基于比您安装的旧版本的 Phalcon 构建的。使用 Return 类型提示是一种较新的范例。为了 'fix' 这个问题,你有两个选择。首先是升级代码以与较新版本的 Phalcon 兼容(只需将 Core\Config::toArray
编辑为 : array
)。但是,由于必须解决所有此类问题,这很快就会成为一个独立的项目。第二个选项是降级你安装的 Phalcon 版本以匹配它最初构建的版本。不幸的是,我无法确定它最初构建的版本。也有可能您可能需要降级 PHP 版本,但我并不肯定。
旁注:这种情况是我个人不再使用 XAMPP 而是通过 Rancher Desktop
使用 Docker 图片的原因之一。这样我就可以直接在image中显式设置Phalcon&PHP的版本
当我运行用Phalcon做一个简单的项目时,没问题。但是我要去 运行 另一个人写的另一个 Phalcon 项目,但我得到一个错误:致命错误:Core\Config::toArray() 的声明必须与 Phalcon\Config 兼容: :toArray(): C:\xampp\htdocs\phalcon\phalcon\apps\Core\Config.php
中的数组找了很多都没有解决这个问题
Core\Config代码:
class Config extends \Phalcon\Config
{
public function toArray()
{
$configArray = parent::toArray();
unset($configArray['index']);
return $configArray;
}
}
Phalcon\Config代码:
class Loader
{
/**
* Load config from file extension dynamical
*
* @param string $filePath
*
* @return Config
* @throws Exception
*/
public static function load($filePath)
{
if (!is_file($filePath)) {
throw new Exception('Config file not found');
}
$extension = strtolower(
pathinfo(
$filePath,
PATHINFO_EXTENSION
)
);
switch ($extension) {
case 'ini':
return new Ini($filePath);
case 'json':
return new Json($filePath);
case 'php':
case 'php5':
case 'inc':
return new Php($filePath);
case 'yml':
case 'yaml':
return new Yaml($filePath);
default:
throw new Exception(
'Config adapter for .' . $extension . ' files is not support'
);
}
}
}
您的问题仅部分与 Phalcon 有关。错误本身直接是 PHP 的子错误。 https://3v4l.org/F8EfM
class Something {
public function toArray(): array
{
return [];
}
}
class SomethingElse extends Something {
public function toArray()
{
return [];
}
}
实际上,父 class 定义了一个 return 类型提示,但子没有。这些被认为是不相容的。为了修复它,子 class 必须与父具有相同的声明。 https://3v4l.org/b3BGR
class SomethingElse extends Something {
public function toArray(): array
{
return [];
}
}
现在,也就是说,我确实提到它仅 partially
适用于 Phalcon。核心错误是 PHP,但根本原因是您的 Phalcon 版本与代码库相比。也就是说,正在运行的项目没有这样的问题,或者它使用了与代码相关的正确版本的 Phalcon。失败的项目可能是基于比您安装的旧版本的 Phalcon 构建的。使用 Return 类型提示是一种较新的范例。为了 'fix' 这个问题,你有两个选择。首先是升级代码以与较新版本的 Phalcon 兼容(只需将 Core\Config::toArray
编辑为 : array
)。但是,由于必须解决所有此类问题,这很快就会成为一个独立的项目。第二个选项是降级你安装的 Phalcon 版本以匹配它最初构建的版本。不幸的是,我无法确定它最初构建的版本。也有可能您可能需要降级 PHP 版本,但我并不肯定。
旁注:这种情况是我个人不再使用 XAMPP 而是通过 Rancher Desktop
使用 Docker 图片的原因之一。这样我就可以直接在image中显式设置Phalcon&PHP的版本