在非常简单的hello world PHP程序中使用静态方法的问题

在非常简单的hello world PHP程序中使用静态方法的问题,php,zend-framework,static,Php,Zend Framework,Static,我通过阅读本教程来学习: 代码如下: <?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::set

我通过阅读本教程来学习: 代码如下:

<?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'));

    }
}

?>

我收到此错误:

致命错误:无法使C:\XAMPP\XAMPP\htdocs\HelloWorld\Application\Bootstrap\u Bootstrap::run()类引导中的非静态方法Zend\u Application\u Bootstrap::static(在第6行的C:\XAMPP\XAMPP\htdocs\HelloWorld\Application\Bootstrap.php中)


我做错了什么?

尝试将
public static function run(){
更改为
public function run(){

尝试将
public static function run(){
更改为
public function run(){
如果仔细查看错误说明了一切:

无法使非静态方法Zend\u应用程序\u引导\u引导::run()static


因此,请从run方法def中删除static修饰符。

如果仔细查看,错误说明了一切:

无法使非静态方法Zend\u应用程序\u引导\u引导::run()static


因此,从run方法def中删除static修饰符。

只有在以下情况下才能静态调用方法

  • 它被定义为静态的
  • 它不引用任何非静态声明
  • 这是因为静态函数在没有任何上下文的情况下运行,这使得它们(稍微)比标准方法快,但有一些约束。请参阅

    在代码中,类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,因此不确定您是否会因此遇到更多与静态相关的错误。从根本上说,检查您的代码与教程是否匹配,然后按照另一个教程进行操作;该教程一定是错误的。

    只有在以下情况下才能静态调用方法:

  • 它被定义为静态的
  • 它不引用任何非静态声明
  • 这是因为静态函数在没有任何上下文的情况下运行,这使得它们(稍微)比标准方法快,但有一些约束。请参阅

    在代码中,类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,因此不确定是否会导致更多与静态相关的错误。从根本上说,检查代码与教程是否匹配,然后再学习另一个教程;该教程一定是错误的。

    但是教程说run()方法必须是静态的,我该怎么办?但是教程说run()方法方法必须是静态的,我该怎么做?