PHP: 自动加载找不到 JsonSerializable
PHP: autoload can't find JsonSerializable
我对我的实体使用 JsonSerializable 将它们转换为 json 数组,如下所示:
namespace backoffice\entities;
class MyObject implements \JsonSerializable{
//---do some stuff---
}
然后我使用我的 Autoloader.php 通过命名空间加载 类:
/**
* Class Autoloader
*/
class Autoloader{
static function register(){
spl_autoload_register(array(__CLASS__, 'autoload'));
}
static function autoload($className){
$className = str_replace('\', DIRECTORY_SEPARATOR, $className);
require_once $className.'.php';
}
}
在 autoload
函数中,我将 \
替换为服务器的 directory_separator。
自动加载器加载我的 类 没有问题,但是当他进入 JsonSerializable(这是一个 SPL 接口)时转换 \
并从我的命名空间加载它(他不会找到它)并向我显示此错误:
Warning: require_once(backoffice/entities/JsonSerializable.php) [function.require-once]: failed to open stream: No such file or directory
如何让它正常工作并从SPL加载这个接口?
我找到了答案。
这是一个 PHP 版本问题,JsonSerializable 需要 PHP 5.4 并且在线服务器使用 PHP 5.3 所以这就是他找不到它的原因,并且它在 localhost 上工作,因为我正在使用PHP5.5
我对我的实体使用 JsonSerializable 将它们转换为 json 数组,如下所示:
namespace backoffice\entities;
class MyObject implements \JsonSerializable{
//---do some stuff---
}
然后我使用我的 Autoloader.php 通过命名空间加载 类:
/**
* Class Autoloader
*/
class Autoloader{
static function register(){
spl_autoload_register(array(__CLASS__, 'autoload'));
}
static function autoload($className){
$className = str_replace('\', DIRECTORY_SEPARATOR, $className);
require_once $className.'.php';
}
}
在 autoload
函数中,我将 \
替换为服务器的 directory_separator。
自动加载器加载我的 类 没有问题,但是当他进入 JsonSerializable(这是一个 SPL 接口)时转换 \
并从我的命名空间加载它(他不会找到它)并向我显示此错误:
Warning: require_once(backoffice/entities/JsonSerializable.php) [function.require-once]: failed to open stream: No such file or directory
如何让它正常工作并从SPL加载这个接口?
我找到了答案。
这是一个 PHP 版本问题,JsonSerializable 需要 PHP 5.4 并且在线服务器使用 PHP 5.3 所以这就是他找不到它的原因,并且它在 localhost 上工作,因为我正在使用PHP5.5