Проблема с использованием статического метода в очень простой PHP-программе hello world - PullRequest
0 голосов
/ 26 февраля 2010

Я учусь, читая этот учебник: Ссылка Вот код:

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

    }
}

?>

Я получаю эту ошибку:

Неустранимая ошибка: Не удается сделать статический метод Zend_Application_Bootstrap_Bootstrap :: run () статическим в классе Bootstrap в C: \ XAMPP \ xampp \ htdocs \ HelloWorld \ application \ Bootstrap.php в строке 6

Что я делаю неправильно

Ответы [ 3 ]

3 голосов
/ 26 февраля 2010

Если вы внимательно посмотрите, ошибка говорит само за себя:

Невозможно сделать нестатический метод Zend_Application_Bootstrap_Bootstrap :: run () static

Итак, удалите статический модификатор из метода run def.

2 голосов
/ 26 февраля 2010

Попробуйте изменить public static function run(){ на public function run(){

0 голосов
/ 13 февраля 2011

Метод может вызываться только статически, если

  1. определяется как статический,
  2. не ссылается ни на какое нестатическое объявление

Это потому, что статические функции запускаются без какого-либо контекста, который делает их (незначительно) быстрее, чем стандартные методы, но с некоторыми ограничениями. См. Руководство по PHP для ключевого слова Static

В коде класс Bootstrap объявляет run () как статический, но он перегружает метод run () из родительского класса Zend_Application_Bootstrap_Bootstrap.

Если вы посмотрите на код родительского класса, вы увидите, что его функция run () не объявлена ​​статической. Поскольку перегруженные методы должны соответствовать объявлению их родительского метода, это означает, что вы не можете объявить (или вызвать) BootStrap :: run () как статический.

Решение состоит в том, чтобы изменить ваш код, чтобы удалить статическое объявление.

public function run(){
    self::setupEnvironment();
    self::prepare();
    $response = self::$frontController->dispatch();
    self::sendResponse($response);
}

Я не использую Zend, поэтому не уверен, что в результате вы столкнетесь с дальнейшими статическими ошибками. По сути, проверьте ваш код по сравнению с учебником, и если он совпадает, то следуйте другому учебнику; что, должно быть, не прав.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...