Происходит при попытке вызова не- статический метод для класса, поскольку он был статичным, и вы также имеете флаг 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();
Похожие вопросы:
еще можно сделать если операторы как это:
<?php
if ($something) {
echo 'one conditional line of code';
echo 'another conditional line of code';
}
if ($something) echo 'one conditional line of code';
if ($something)
echo 'one conditional line of code';
echo 'a NON-conditional line of code'; // this line gets executed regardless of the value of $something
?>
и затем можно также записать если - еще в альтернативном синтаксисе:
<?php
if ($something):
echo 'one conditional line of code';
echo 'another conditional line of code';
elseif ($somethingElse):
echo 'one conditional line of code';
echo 'another conditional line of code';
else:
echo 'one conditional line of code';
echo 'another conditional line of code';
endif;
?>
с альтернативным синтаксисом можно также упасть из парсинга режима как это:
<?php
if ($something):
?>
one conditional line of code<br />
another conditional line of code
<?php
else:
echo "it's value was: $value<br />\n";
?>
another conditional line of code
<?php
endif;
?>
, Но это становится действительно грязным действительно быстрый, и я не рекомендую, чтобы это было использование (кроме, возможно, для шаблонной логики).
и заставить его завершиться:
<?php
$result = $something ? 'something was true' : 'something was false';
echo $result;
?>
equals
<?php
if ($something) {
$result = 'something was true';
} else {
$result = 'something was false';
}
echo $result;
?>
Для вдаваний в немного большее количество подробностей причина, что фигурные скобки являются дополнительными, состоит в том, что синтаксис похож:
if(CONDITION) BLOCK
[elseif(CONDITION) BLOCK]
[else BLOCK]
БЛОК может быть отдельным оператором:
foo();
или это может быть включенная в фигурную скобку группа операторов:
{
foo();
bar();
}
По-моему
if ($REMOTE_ADDR == "") $ip = "no ip"; else $ip = getHostByAddr($REMOTE_ADDR);
допустимо, но намного тяжелее читать, чем:
if ($REMOTE_ADDR == "") {
$ip = "no ip";
} else {
$ip = getHostByAddr($REMOTE_ADDR);
}
Фигурные скобки (не скобки) являются дополнительными в PHP, как в самом подобном синтаксису C. Возможно, Вы думаете о Perl; они требуются там для той формы если синтаксис.
вещью двоеточия является альтернативная форма управляющей структуры это поддержки PHP. Я ненавижу его, но некоторые люди (особенно обрабатывают разработчиков системы по шаблону, по-видимому) любят его.
Да, исключая фигурные скобки позволяется, хотя много раз я слышал, что 2 причины того, что не использовался тот синтаксис:
кроме того, да, синтаксис двоеточия допустим. Альтернативы могут быть найдены здесь: http://php.net/manual/en/control-structures.alternative-syntax.php
brackets are needed to enclose what you want to do if the condition is true
я не могу думать ни о каком языке, который требует этого