在非常简单的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()方法方法必须是静态的,我该怎么做?