我正在通过阅读本教程来学习:Link 这是代码:
<?php
require_once 'Zend/Loader.php';
class Bootstrap extends Zend_Application_Bootstrap_Bootstrap
{
public static $root = '';
public static $frontController = null;
public static function run(){
self::setupEnvironment();
self::prepare();
$response = self::$frontController->dispatch();
self::sendResponse($response);
}
public static function setupEnvironment(){
error_reporting(E_ALL|E_STRICT);
ini_set('display_startup_errors',true);
ini_set('display_errors',true);
date_default_timezone_set('Europe/London');
self::$root = realpath('..');
define('APP_ROOT', self::$root);
spl_autoload_register(array(__CLASS__,'autoload'));
}
}
?>
我收到了这个错误:
致命错误:无法在第6行的C:\ XAMPP \ xampp \ htdocs \ HelloWorld \ application \ Bootstrap.php类Bootstrap中创建非静态方法Zend_Application_Bootstrap_Bootstrap :: run()static
我做错了什么?
答案 0 :(得分:3)
如果仔细观察,错误说明了一切:
无法制作非静态方法Zend_Application_Bootstrap_Bootstrap :: run()static
因此从run方法def。
中删除static修饰符答案 1 :(得分:2)
尝试将public static function run(){
更改为public function run(){
答案 2 :(得分:0)
只有在
时才能静态调用方法这是因为静态函数在没有任何上下文的情况下运行,这使得它们(略微)比标准方法更快,但有一些约束。见PHP Manual for Static keyword
在代码中,类Bootstrap将run()声明为static,但它从父类Zend_Application_Bootstrap_Bootstrap重载方法run()。
如果查看父类的代码,那么它的函数run()不会被声明为静态。由于重载方法必须与其父方法的声明匹配,这意味着您不能将BootStrap :: run()声明(或调用)为静态。
解决方案是修改代码以删除静态声明。
public function run(){
self::setupEnvironment();
self::prepare();
$response = self::$frontController->dispatch();
self::sendResponse($response);
}
我不使用Zend,因此不确定您是否会因此遇到更多与静态相关的错误。从根本上说,检查你的代码与教程,如果匹配,那么按照另一个教程;那一定是错的。