с ошибками php Строгие стандарты: нестатический метод [дубликат]

Начиная с Flask 1.0 сервер WSGI, включенный с Flask, запускается в поточном режиме по умолчанию.

До версии 1.0 или если вы отключили потоки, сервер запускается в однопоточном режиме и может обрабатывать только один запрос за раз. Любые параллельные запросы должны будут ждать, пока они не будут обработаны, что может привести к проблемам, если вы попытались связаться с вашим собственным сервером из запроса .

С запросами threaded=True каждый из которых обрабатывается в новом потоке. Сколько потоков, которые ваш сервер может обрабатывать одновременно, полностью зависит от вашей ОС и от каких ограничений он устанавливает количество потоков в процессе. Реализация использует класс SocketServer.ThreadingMixIn , который не устанавливает ограничений на количество потоков, которые он может вращать.

Обратите внимание, что сервер Flask предназначен только для разработки . Это не готовый к производству сервер. Не полагайтесь на это, чтобы запустить свой сайт в более широкой сети. Вместо этого используйте правильный сервер WSGI, например gunicorn или uWSGI ).

99
задан shin 13 January 2011 в 20:41
поделиться

7 ответов

В ваших методах отсутствует ключевое слово static . Измените

function getInstanceByName($name=''){

на

public static function getInstanceByName($name=''){

, если вы хотите называть их статически.

Обратите внимание, что статические методы (и Singletons ) являются смертью для проверки .

Также обратите внимание, что вы слишком много делаете работа в конструкторе, особенно все, что запросы не должны быть там. Все, что должен сделать ваш конструктор, - установить объект в допустимое состояние. Если вам нужно иметь данные извне класса, чтобы сделать это, подумайте о том, чтобы вводить его, а не тянуть его. Также обратите внимание, что конструкторы ничего не могут вернуть. Они всегда будут возвращать пустоту, поэтому все эти return false утверждения ничего не делают, кроме завершения конструкции.

167
ответ дан Andy Mercer 22 August 2018 в 03:40
поделиться

Если разрешение области видимости :: должно было использоваться вне класса, то соответствующая функция или переменная должна быть объявлена ​​как статическая

class Foo { 
        //Static variable 
        public static $static_var = 'static variable'; 
        //Static function 
        static function staticValue() { return 'static function'; } 

        //function 
        function Value() { return 'Object'; } 
} 



 echo Foo::$static_var . "<br/>"; echo Foo::staticValue(). "<br/>"; $foo = new Foo(); echo $foo->Value();
0
ответ дан B001ᛦ 22 August 2018 в 03:40
поделиться
  • 1
  • 2
    & lt;? php class Foo {/ * Статическая переменная * / public static $ static_var = 'статическая переменная'; / * Статическая функция * / статическая функция staticValue () {return 'static function'; } / * function * / function Value () {return 'Object'; }} echo Foo :: $ static_var. & Quot; & Lt; бр / & GT; & Quot ;; echo Foo :: staticValue (). & Quot; & Lt; бр / & GT; & Quot ;; $ foo = new Foo (); echo $ foo- & gt; Value (); / * Надеемся, что этот пример поможет вам * / – Ravi Krishnan 23 August 2016 в 13:08

return false обычно означает прекращение создания объекта с ошибкой. Это так просто.

0
ответ дан Bo Persson 22 August 2018 в 03:40
поделиться

Я думаю, что это может ответить на ваш вопрос.

Нестатический метод ..... не следует называть статически

Если метод не статический, вам нужно инициализировать его так:

$var = new ClassName();
$var->method();

Или, в PHP 5.4, вы можете использовать этот синтаксис:

(new ClassName)->method();
11
ответ дан Community 22 August 2018 в 03:40
поделиться
  • 1
    Is (новое ClassName) - & gt; method (); совместим с PHP 5.3? – Jeff 22 March 2016 в 02:20
  • 2
    @Jeff, я бы использовал (new ClassName())->method();, и я считаю, что он совместим с PHP от 5 до 7 – Dennis 13 July 2016 в 20:01
  • 3
    (new ClassName)->method(); несовместим с PHP 5.3. Я просто попробовал. – Sonny 24 January 2017 в 17:13

Вместо использования экземпляра с оператором разрешения области :: поскольку он не был определен как статическая функция.

$r=Page::getInstanceByName($page);

измените его на:

$r=Page->getInstanceByName($page);

И он будет работать как шарм.

-1
ответ дан Rashwan L 22 August 2018 в 03:40
поделиться
  • 1
    извините, сэр, я попробовал ваш, но он не работает – Ryan Arief 16 January 2016 в 09:00
0
ответ дан Stephen Leppik 22 August 2018 в 03:40
поделиться

использовать классName-> function (); вместо className :: function ();

0
ответ дан ulas korpe 22 August 2018 в 03:40
поделиться
Другие вопросы по тегам:

Похожие вопросы: