【发布时间】:2015-01-16 01:46:52
【问题描述】:
我在 Java 中阅读了一些关于此的问题,但我在 PHP 中找不到我正在寻找的内容 - 尽管这些问题非常接近:
php static methods question
Call method non-static with static in PHP
是否可以从静态中调用非静态方法?
我有一个如下的会话类(由 session::init() 调用),但我不知道如何避免收到错误消息。
<?php
class session {
public static function init(){
if (**QUERY HERE**_is_session_started() === FALSE ) {
// if (session_status() == PHP_SESSION_NONE) {
@session_start();
} else {
echo "Session already started<br/>";
}
}
private function _is_session_started() {
if ( php_sapi_name() !== 'cli' ) {
if ( version_compare(phpversion(), '5.4.0', '>=') ) {
return session_status() === PHP_SESSION_ACTIVE ? TRUE : FALSE;
} else {
return session_id() === '' ? FALSE : TRUE;
}
}
return FALSE;
}
}
我只希望 _is_session_started 函数被 init() 函数调用 - 所以它不需要是静态的或公共的 - 但我不确定如何引用它。
如果我将 QUERY HERE 替换为 'self::' 页面加载,但我收到此错误:
PHP Strict Standards: Non-static method session::_is_session_started() should not be called statically in /Applications/MAMP/htdocs/mvc/libs/session.php on line 5
但如果我尝试使用 $this->_is_session_started() 非静态地引用该方法,则会收到致命错误,因为静态 init() 函数尚未实例化会话类。
所以我认为必须有另一种方法来做到这一点。我可以将 _is_session_started 方法设为静态,或者只是让我的 init 函数更长,但我很想知道为什么会这样。
谢谢
【问题讨论】:
-
顺便说一句,您可能想阅读How Not To Kill Your Testability Using Statics