Происходит при попытке вызова не- статический метод для класса, поскольку он был статичным, и вы также имеете флаг E_STRICT
в настройках error_reporting()
.
Пример:
class HTML {
public function br() {
echo '
';
}
}
HTML::br()
или $html::br()
Вы действительно можете избежать этой ошибки, не добавляя E_STRICT
к error_reporting()
, например
error_reporting(E_ALL & ~E_STRICT);
, поскольку, как и для PHP 5.4.0 и выше, E_STRICT
включен в E_ALL
[ ref ]. Но это не рекомендуется. Решение состоит в том, чтобы определить вашу предполагаемую статическую функцию как фактическую static
:
public static function br() {
echo '
';
}
или вызвать функцию условно:
$html = new HTML();
$html->br();
Похожие вопросы:
Это - Общий метод, Создайте, объявляется с параметрами типа, и проверьте, что это связывается для получения дополнительной информации:
Это называет общий метод - так в Вашем случае, метод может быть объявлен как это:
public T Create<T>()
можно определить аргумент типа в угловых скобках, как Вы были бы для создания экземпляра универсального типа:
List<Event> list = new List<Event>();
, который помогает?
Одно различие между универсальным методы и универсальный типы - то, что компилятор может попытаться вывести аргумент типа. Например, если Ваш Create
метод был вместо этого:
public T Copy<T>(T original)
Вы могли просто звонить
Copy(someEvent);
, и компилятор выведет, что Вы имели в виду:
Copy<Event>(someEvent);
Это - общий метод, который реализует Метод фабрики шаблон.
Этот синтаксис просто применяет дженерики к методу. Это обычно используется для сценариев, где Вы хотите управлять типом возврата метода. Вы найдете этот вид синтаксиса много в коде, который использует платформу МОК.
Это - способ, которым Вы упоминаете общий метод в C#.
при определении общего метода Вы кодируете как это:
return-type MethodName<type-parameter-list>(parameter-list)
при вызове общего метода компилятор обычно выводит параметр типа из определенных аргументов, как этот пример:
Array.ForEach(myArray, Console.WriteLine);
В этом примере, если "myArray" является массивом строк, он назовет Массив. ForEach< string> и если это будет международный массив, это назовет Массив. ForEach< int>.
Иногда, для компилятора невозможно вывести тип из параметров (точно так же, как Ваш пример, где нет никаких параметров вообще). В этих случаях необходимо определить их вручную как этот.